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

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

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"; 

https://github.com/AshishPsaini/GoogleAuth

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: inicia sesión a través de Google más "Se ha producido un error interno"
  • Error de GLS: INVALID_AUDIENCE en los puntos finales de la nube de google
  • Google oauth2 funciona con un código de tiempo generado desde Android pero no funciona para el código generado desde JS SDK
  • Error de Google Api y Android Oauth INVALID_AUDIENCE
  • Uso de Google OAuth 2 en dispositivos incrustados basados ​​en Android
  • Cómo usar la API de inicio de sesión de Google con Cordova / Phonegap
  • Inicia sesión de Google en la aplicación sin agregarla a las cuentas de dispositivos
  • Permisos de concesión de API de GMail antes de la excepción UserRecoverableAuthUIE
  • ¿Cómo puedo llegar a la información de calendario de los usuarios en el servidor?
  • Desconocido GoogleAuthException al intentar obtener un token de autorización
  • Cómo verificar el token de ID de Android en el motor de búsqueda de App Engine
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.