GoogleAuthException al obtener un token de acceso con ClientID
Para más contexto, esta publicación sigue a ésta .
Para solucionar mi problema anterior, traté de seguir la solución presentada aquí por Tim Bray: Verificación de llamadas de fondo desde aplicaciones de Android
- Google OAuth2 - token de acceso y token de actualización -> invalid_grant / Code ya se redimió
- Acceso a la API de Gmail mediante Android
- Token de actualización de accountmanager (acceso sin conexión)
- ¿Cómo puedo verificar los símbolos generados por Android en mi servidor mediante PHP?
- La mejor forma de permitir a los usuarios acceder a la aplicación mediante sus credenciales de Google
Declaré dos proyectos en la consola de API de Google para obtener dos ID de cliente
- El primero como "Aplicación Web" con "localhost" como nombre de host (¿importa?)
- ID de cliente: XXXXXXXXXX.apps.googleusercontent.com
- El segundo como aplicación de Android con el nombre del paquete especificado en AndroidManifest.xml y SHA1 huella dactilar (probado con debug.keystore y [mi] .keystore)
- ID de cliente: YYYYYYYYYY.apps.googleusercontent.com
Lamentablemente me enfrento a una excepción en el lado de Android:
com.google.android.gms.auth.GoogleAuthException: Unknown at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) at fr.barles.android.activity.LoginActivity$1.doInBackground(LoginActivity.java:66) at fr.barles.android.activity.LoginActivity$1.doInBackground(LoginActivity.java:1) at android.os.AsyncTask$2.call(AsyncTask.java:185) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) at java.lang.Thread.run(Thread.java:1102)
En la línea:
return GoogleAuthUtil.getToken(LoginActivity.this, account[0], "audience:server:client_id:XXXXXXXXXX.apps.googleusercontent.com");
¿Que estoy haciendo mal?
Gracias por adelantado
- El texto "Aplicación no registrada de Android" se muestra en el cuadro de diálogo de permiso de información de perfil de usuario
- Autenticar como una cuenta de servicio de la aplicación de Android para Google Cloud Storage
- Error en la autenticación SASL de Gtalk XMPP con el mecanismo X-OAUTH2?
- ¿Cómo puede detectar Google una solicitud desde un WebView?
- Autenticación de su cliente en Puntos de extremo de Cloud sin una cuenta de Google
- Cómo utilizar GoogleApiClient para proporcionar credenciales para el cliente de punto final de la nube
- Cómo iniciar sesión con Google OAuth2 utilizando Angularjs dentro de Phonegap utilizando ClientID y ClientSecret
- Obtener tiempo de caducidad de token de acceso de Google en Android
Los dos ID de cliente deben formar parte del mismo proyecto.
Después de varias horas, descubrí que en la cadena de alcance ( "audience:server:client_id:..."
) debes usar el Client ID de la aplicación web, no el android.
El ID de cliente de la aplicación de Android no se utiliza. Solo está aquí para vincular el nombre del paquete de tu aplicación de Android con tu aplicación web.
No hay necesidad de hacer más. Vuelve a crear tu ID de cliente en la consola de Google y escribe esta línea en tu código como cadena de ámbito.
String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile";
Recibí este error cuando había cambiado mi nombre de paquete y olvidé generar un nuevo ID de cliente con la depuración SHA1 en la consola de API de Google.
Cambie el ámbito agregado en GoogleApiCliente a Plus.SCOPE_PLUS_LOGIN. Este trabajo para mí.
googleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(Plus.API) .addScope(Plus.SCOPE_PLUS_LOGIN) .build();
- Android MultiSelectListPreference, java.lang.String no se puede convertir en java.util.Set
- Implementación de Android de los métodos de ciclo de vida puede llamar a la aplicación de superclase después de hacer cualquier trabajo?