.GoogleAuthException: Desconocido al realizar el SSO de Google.
Excepción:
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
Mi código de registro:
- Permisos de concesión de API de GMail antes de la excepción UserRecoverableAuthUIE
- Google Plus SignIn / oAuth2 - lanzamiento del lado del servidor TokenResponseException: 401 no autorizado
- Cómo registrar usuarios con la cuenta de Google en la aplicación Android
- ¿Cómo puedo verificar los símbolos generados por Android en mi servidor mediante PHP?
- Obtención de un código de autorización OAuth2 que se puede compartir con un servidor
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; }
No tengo ni idea de lo que está pasando aquí. ¿Ayuda?
- Inicio de sesión de Android con acceso inactivo de google
- Cómo utilizar GoogleApiClient para proporcionar credenciales para el cliente de punto final de la nube
- Cómo restaurar un proyecto de consola de Google eliminado
- Constante de alcance para correo electrónico con GoogleApiClient.Builder
- Error en la autenticación SASL de Gtalk XMPP con el mecanismo X-OAUTH2?
- Google devuelve siempre un token de id caducado (JWT)
- Uso de Google OAuth 2 en dispositivos incrustados basados en Android
- Acceso a la API de Gmail mediante Android
Tuve un problema similar. En mi caso el problema era en el nombre de la aplicación perdida en la consola de google.
Abra la consola navegue hasta su proyecto y elija "Pantalla de consentimiento". Rellene el campo "NOMBRE DEL PRODUCTO" y guárdelo.
Al igual que CheatEx, tuve que seleccionar mi dirección de correo electrónico de la pantalla "Consent Screen" y guardar.