2013-07-28 8 views
5

Wyjątek:.GoogleAuthException: Nieznany podczas logowania jednokrotnego Google.

07-28 14:36:13.140: W/System.err(11382): com.google.android.gms.auth.GoogleAuthException: Unknown 
07-28 14:36:13.140: W/System.err(11382): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
07-28 14:36:13.140: W/System.err(11382): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
07-28 14:36:13.148: E/AndroidRuntime(11382): FATAL EXCEPTION: main 

mój znak Up kod:

public class Signup extends Activity { 

     final private String CLIENT_ID = <android-client-id>; 
     final private List<String> SCOPES = Arrays.asList(new String[]{ 
      "https://www.googleapis.com/auth/plus.login" 
     }); 
     private String webId = <web-client-id>; 


     private GoogleAccountCredential mCredential; 

     private EditText mExchangeCodeEditText; 
     private EditText mIdTokenEditText; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_google); 
     //mExchangeCodeEditText = (EditText) findViewById(R.id.editTextExchangeCode); 
     // mIdTokenEditText = (EditText) findViewById(R.id.editTextIdToken); 

     // initiate a credential object with drive and plus.login scopes 
     // cross identity is only available for tokens retrieved with plus.login 
     mCredential = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(SCOPES.get(0))); 

     // user needs to select an account, start account picker 
     startActivityForResult(
      mCredential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); 
     } 

     /** 
     * Handles the callbacks from result returning 
     * account picker and permission requester activities. 
     */ 
     @Override 
     protected void onActivityResult(
      final int requestCode, final int resultCode, final Intent data) { 
     switch (requestCode) { 
     // user has returned back from the account picker, 
     // initiate the rest of the flow with the account he/she has chosen. 
     case REQUEST_ACCOUNT_PICKER: 
      String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); 
      if (accountName != null) { 
      mCredential.setSelectedAccountName(accountName); 
      new RetrieveExchangeCodeAsyncTask().execute(); 
      new RetrieveJwtAsyncTask().execute(); 
      } 
      break; 
     // user has returned back from the permissions screen, 
     // if he/she has given enough permissions, retry the the request. 
     case REQUEST_AUTHORIZATION: 
      if (resultCode == Activity.RESULT_OK) { 
      // replay the same operations 
      new RetrieveExchangeCodeAsyncTask().execute(); 
      new RetrieveJwtAsyncTask().execute(); 
      } 
      break; 
     } 
     } 

     /** 
     * Retrieves the exchange code to be sent to the 
     * server-side component of the app. 
     */ 
     public class RetrieveExchangeCodeAsyncTask 
      extends AsyncTask<Void, Boolean, String> { 

     @Override 
     protected String doInBackground(Void... params) { 

      String scope = String.format("oauth2:server:client_id:%s:api_scope:%s", 
       CLIENT_ID, TextUtils.join(" ", SCOPES)); 
      try { 

       GoogleAccountCredential.usingAudience(Signup.this, "server:client_id:" + webId); 
      return GoogleAuthUtil.getToken(

       Signup.this, mCredential.getSelectedAccountName(), scope); 
      } catch (UserRecoverableAuthException e) { 
      startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); 
      } catch (Exception e) { 
      e.printStackTrace(); // TODO: handle the exception 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String code) { 
      // exchange code with server-side to retrieve an additional 
      // access token on the server-side. 
     // mExchangeCodeEditText.setText(code); 
      Log.d("code",code); 
     } 
     } 

     /** 
     * Retrieves a JWT to identify the user without the 
     * regular client-side authorization flow. The jwt payload needs to be 
     * sent to the server-side component. 
     */ 
     public class RetrieveJwtAsyncTask 
      extends AsyncTask<Void, Boolean, String> { 

     @Override 
     protected String doInBackground(Void... params) { 
      String scope = "audience:server:client_id:" + CLIENT_ID; 
      try { 
      return GoogleAuthUtil.getToken(
        Signup.this, mCredential.getSelectedAccountName(), scope); 
      } catch(UserRecoverableAuthIOException e) { 
      startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); 
      } catch (Exception e) { 
      e.printStackTrace(); // TODO: handle the exception 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String idToken) { 
      // exchange encrypted idToken with server-side to identify the user 
     // mIdTokenEditText.setText(idToken); 
      Log.d("idtoken",idToken); 
     } 
     } 

     private static final int REQUEST_ACCOUNT_PICKER = 100; 
     private static final int REQUEST_AUTHORIZATION = 200; 

    } 

Jestem całkowicie nieświadomi tego, co się tutaj dzieje. Wsparcie?

+0

Od kiedy metoda GoogleAuthUtil.getToken() rozpocząć rzucanie GoogleAuthException z komunikatem „BadUsername” dla wiadomości e-mail, który nie jest zarejestrowany na urządzeniu, zamiast poprzedniego wyjątku IllegalArgumentException z komunikatem „Non istniejące konto«email_address»”? http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String) – toobsco42

Odpowiedz

1

Miałem podobny problem. W moim przypadku problem polegał na braku nazwy aplikacji w konsoli Google.

Otwórz console przejdź do swojego projektu i wybierz "Ekran zgody". Wypełnij pole "NAZWA PRODUKTU" i zapisz.

0

Podobny do CheatEx, musiałem wybrać mój adres e-mail ze strony "Zgoda" i zapisać.

Powiązane problemy