Servicios de juegos de Google Play: no se puede iniciar sesión

Inmediatamente después de la presentación de Google I / O de ayer, he actualizado mi SDK de Android para integrar los servicios del juego en una de mis aplicaciones.

Cosas que he hecho hasta ahora:

  1. agregué y vinculé mi aplicación a Dev Console (servicios de juegos)
  2. incluí el ID del cliente OAuth en mi aplicación / manifiesto
  3. agregué BaseGameActivity y GameHelper a mi proyecto ( desde GitHub )
  4. agregué la biblioteca de google-play-services a mi proyecto
  5. extended BaseGameActivity , se agregó com.google.android.gms.common.SignInButton

También configuré metadatos del juego y, por supuesto, algunos logros. La consola de desarrollo indica que está lista para ser lanzada. Para probar el flujo de inicio de sesión y los logros, agregué dos cuentas de Google+ como usuarios de prueba.

Pero cuando pruebo SignInButton, aparece una alerta: Error desconocido . Aquí está el logcat:

 ERROR/Volley: il.a: Unexpected response code 403 for https://www.googleapis.com/games/v1/players/me ERROR/SignInIntentService: Access Not Configured ERROR/LoadSelfFragment: Unable to sign in - application does not have a registered client ID 

Creé mi aplicación en modo de producción usando ProGuard y el certificado correcto.

¿Me he perdido algo?

Actualización: algunos bashs más

Aquí hay una breve descripción de lo que he intentado mientras tanto. Nada ayudó.

  • eliminar y volver a crear la entrada de la aplicación de Android vinculada (huella digital doble comprobada)
  • desactivar la piratería
  • saltar a la defensiva
  • crea un nuevo juego (de prueba) y usa su ID de cliente

El problema no está relacionado con las cuentas para la sección de prueba . El uso de una cuenta que no está habilitada para la prueba dará lugar a otro mensaje de error:

 E/GameAgent: Unable to retrieve 1P application 547xxxxxx457 from network E/CheckGameplayAcl: Unable to load metadata for game 

¡Solución de Hartok!

La solución de Hartok me ayudó mucho a solucionar este problema. Nunca antes había visitado la consola de API de Google . Es importante saber que el ID del Cliente OAuth no se elimina cuando elimina una aplicación vinculada de su juego o incluso elimina un juego (en la Consola Dev). Debes visitar la consola de API y eliminarla manualmente.

La huella digital SHA1 seleccionada automáticamente es (siempre) incorrecta. Tienes que buscar el tuyo:

 keytool -exportcert -alias  -keystore  -list -v 

La nueva identificación de cliente de mi aplicación (correctamente) vinculada parecía 89xxxxxxxx73-2u6mXXXXXXXXXXXXXXXXXXX8903.apps.goo... , no solo 12 dígitos como antes. Finalmente descubrí que debes excluir el guión y las cosas alfanuméricas y solo debes usar los 12 dígitos.

He solucionado este problema.

En mi caso, cuando vinculé mi aplicación (aún no publicada) a mi proyecto de Google Play Game Services, la Huella digital de certificado seleccionada automáticamente por Google Play no fue la correcta.

Para solucionarlo, eliminé el ID de mi cliente de la aplicación en la Consola de API de Google , desvinculaba mi aplicación y luego la volvía a vincular con la Huella digital de certificado adecuada. Esta huella dactilar se muestra al exportar su aplicación en Eclipse (si su complemento ADT está actualizado).

Espero eso ayude.

Después de 2 largas semanas tratando de solucionar este problema, he creado los pasos necesarios para resolver este problema, y ​​decidí compartirlo con todos los que padecen el mismo problema, sin publicar el juego. se usa para probar cuando llegue el momento de la publicación, compartiré los pasos utilizados para publicar la aplicación y me aseguraré de que funcione con el servicio de juegos de Google play.

tenga en cuenta que todo lo que estaba intentando hacer es iniciar sesión con el botón de inicio de sesión de Google sin realizar ninguna acción sobre lo que debería suceder después de firmarlo, también tenga en cuenta que he usado BaseGameUtils del ejemplo de Google Play como biblioteca y mi IDE de elección para hacer todo esto fue Eclipse.

A continuación se muestran los pasos uno a uno usando eclipse:

1-importe BaseGameUtils como una biblioteca en su espacio de trabajo eclipse, asegúrese de que no se produce ningún error después de la importación. si se produjo un error, haga lo siguiente:

a- haga clic derecho en el proyecto BaseGameUtil en Project Explorer

b-Haz clic en la ruta de comstackción de Java

c-Haga clic en agregar archivos externos desde allí navegue a su ubicación SDK y encuentre Google-Play-services.jar

d-selecciónelo y haga clic en Aceptar —> debería ver el jar agregado en la ventana JAR y carpetas de clase.

Vaya a la pestaña Orden y exportación, en el lado derecho de las bibliotecas y asegúrese de que las “bibliotecas privadas de Android” y las “Dependencias de Android” estén marcadas, y asegúrese de que se seleccione google-play-services.jar.

2- Ahora asegúrese de hacer referencia correctamente a su BaseGameUtility importado en la aplicación que desea usar, “Puede crear una aplicación hello world simple para probar esto”, por lo que ahora haremos referencia a BaseGameUtility en la aplicación hello world de la siguiente manera:

(importante asegurarse de que tanto hello world como BaseGameUtil estén en la misma unidad, dos unidades no funcionarán)

a-clic derecho en la aplicación hello world en el lado derecho en el explorador de proyectos

b-clic en la ruta de comstackción de Java

c-Click en Bibliotecas

d- agregue el soporte de Android-v4 si es necesario desde una fuente externa o interna (No se requiere)

e- agregue los utilitarios del juego base .jard haciendo clic en agregar carpeta de clase -> luego seleccione BaseGameUtilProject — Luego seleccione la carpeta / bin –Esto debería importarlo a su aplicación

f-add google-play-services.jar desde una fuente externa también si es necesario

g-in “ordenar y exportar” asegúrese de tener los siguientes elementos seleccionados —> “Librerías privadas de Android, dependencias de Android, BasegameUtils.jar, GooglePlayGameServices.jar” junto con los SRC y GEN normales que deben seleccionarse por defecto.

3- ahora en su archivo java helloworld.java asegúrese de que su pantalla principal tenga todas las importaciones requeridas y luego amplíe BaseGameUtil y asegúrese de que el proyecto implemente ViewOnClickListener.

4- Edite su manifiesto de Android para incluir lo siguiente:

   

y

  

5- Asegúrese de tener un archivo ids.xml en su recurso para incluir su ID de aplicación después de crearla.

  

Puede dejarlo en blanco por ahora ya que más adelante deberá colocar la ID de la aplicación en él

6-copia la clave de depuración que tienes en tu eclipse IDE antes de agregar esta aplicación en la consola de desarrollador. hacerlo en eclipse sucede de la siguiente manera:

a-haga clic en Ventana b- seleccione Android c-Click comstackción d- copie la huella digital SHA1 y consérvela para usarla al crear su aplicación en la consola de Desarrolladores.

7- Crea tu juego en la consola de desarrolladores y usa el SHA1 recuperado del paso 6.

8- Coloque la ID de la aplicación en ids.xml resaltada en el paso 5

9- verifique dos veces sus valores y asegúrese de que los nombres de los paquetes sean correctos entre la consola de los desarrolladores y el archivo de manifiesto.

  

10- Cuando termine, asegúrese de que la aplicación en la consola del desarrollador coincida con la SHA1 que está asignada en la consola del desarrollador utilizando la herramienta de claves. Este es el paso que me tomó 2 semanas solo para descubrir

a- ubique la aplicación APK desde la carpeta bin de su proyecto hello world y cópiela en otra ubicación para verificar su ID con la herramienta clave más adelante

b-ubique su herramienta de keytool -> generalmente ubicada debajo de la carpeta JAVA de su computadora, en mi caso estaba bajo C: \ Archivos de progtwig \ Java \ jdk1.7.0_09 \ jre \ bin

c- Extrae tu apk en la ubicación temporal

d- ejecuta el siguiente comando

keytool -printcert -file “TempLocation \ Meta-INF \ CERT.RSA”

Obtendrás un MD5 junto con SHA1 y SHA256

Asegúrese de que el SHA1 coincida con el de la consola de desarrolladores.

11- Aquí es cómo verificar su SHA1 desde la consola de desarrolladores,

a- ir a los servicios del juego

b- haga clic en el nombre del juego en nuestro caso helloWorld

c- Desplácese hacia abajo hasta “Proyecto de consola API”

d- Deberías ver “este juego está vinculado al proyecto de la consola API llamado helloworld”

e- helloworld debería ser un hipervínculo, haga clic en él,

f- esto abrirá la consola de Google APis

g- en APconsole, haga clic en Acceso API

h- desplácese hasta “ID de cliente para la aplicación instalada”, debería ver que SHA1 se asegure de que sea el mismo que el generado desde la herramienta de teclado anteriormente en el paso 10. (Si no coinciden, debe eliminar el juego de la consola de desarrolladores y volver a crearlo con el SHA1 correcto) “asegúrese de no cambiar el SHA1 de la consola de API de Google, ya que esto causará problemas.

I-Asegúrate de que el nombre del paquete es el mismo nombre del paquete en tu manifiesto de Android. Me refiero a que cuando se menciona el nombre del paquete, asegúrate de que coincida con el del “ID del cliente para las aplicaciones instaladas” (en mi caso no coincidía con el la línea 4 de mi manifiesto)

Y eso es todo, ahora debería poder probar su inicio de sesión utilizando el servicio de juegos de google play

Tenía el mismo problema. Mi solución fue vincular el mismo paquete dos veces en Dev Console, el primero con la huella digital SHA1 de mi propio certificado y el segundo con mi clave de depuración SHA1.

Intenté usar solo uno o simplemente el otro antes de esto y tampoco funcionó.

En el Paso 3. Genere un ID de cliente de OAuth 2.0 que específicamente da una advertencia de la siguiente manera:

Advertencia: no abra la consola de API de Google directamente y agregue manualmente sus ID de cliente en esa página. Hacerlo podría causar errores cuando envíe solicitudes a los servicios del juego.

Así que mi experiencia fue que debes seguir la guía religiosamente: configurar Google Play Game Services con Google Play Developer Console

Estaba peleando con este problema mucho. Los cambios en la API de Google Console solo rompen el ID del cliente de OAuth, no lo toques. La única solución para mí fue crear un nuevo servicio de juego y conectar la aplicación firmada con la clave normal (sin depurar), porque una vez que agregas apk con cualquier clave, si intentas agregarla nuevamente con otra clave, no funcionará. Eliminar el juego no funcionará, Google aún recordará el nombre del paquete. Puede intentar cambiar el nombre del paquete apk (por supuesto, no es la mejor idea) y volver a intentarlo, pero no siempre funciona.

Entonces, una vez que tengas este problema, la mejor solución es cambiar el nombre del paquete apk y crear un nuevo servicio del juego; esto siempre funciona, y ten cuidado con el nombre del servicio del juego; no lo hagas con el nombre que usaste antes; arruinará todo.

De los pocos problemas que tengo con este servicio, lo más divertido es que ahora tengo mi apk conectado con el servicio del juego, pero no aparece en él y no puedo agregarlo debido a un error: este ID de cliente es único en el mundo y ya está en uso – Creo que la ID de cliente no es una ID de OAuth – No puedo eliminarla – no existe tal opción – y tal vez este es un problema de raíz de lo que obtuvimos aquí.

Asegúrese de que la ID que ingrese en los metadatos sea su ID de aplicación, no su ID de cliente. Y no puede codificarlo, ya que debe ser una cadena, debe especificarlo en sus recursos y luego hacer referencia a él en su manifiesto.

Lea esto para más información:

https://developers.google.com/games/services/console/enabling#c_specify_client_id_settings

Nota: para Android, no es necesario que incluya la identificación completa del cliente en su aplicación, ya que se derivará automáticamente de la ID de la aplicación.

Estoy experimentando problemas similares y veo que esta página se actualizó el 30 de mayo de 2013:

https://developers.google.com/games/services/android/troubleshooting

Puede ayudarnos a algunos de nosotros.

Guy, ¿ha configurado correctamente su cuenta para la prueba?

Consulta https://developers.google.com/games/services/console/testpub#enabling_accounts_for_testing.

Si su juego se encuentra en un estado no publicado, debe incluir en la lista blanca las cuentas de usuario a las que desea otorgar acceso para la prueba. De lo contrario, los evaluadores encontrarán errores OAuth y 404 cuando intenten acceder a los puntos finales de los servicios del juego.

Este fue el paso que faltaba para mí. Después de eso ya no recibí esos errores:

E / GameAgent: no se puede recuperar la aplicación 1P 547xxxxxx457 de la red
E / CheckGameplayAcl: no se pueden cargar metadatos para el juego

El truco que funcionó para mí fue publicar la configuración de los servicios de juegos porque ya tenía un APK publicado para las pruebas alfa.

Para obtener más información, consulte el párrafo “Otras causas” en la resolución de problemas https://developers.google.com/games/services/android/troubleshooting

Sin embargo, el enfoque de Hartok me ayudaba a mí mismo. “Es posible que debas eliminar los proyectos de la consola google api”. este sonido es suficiente, pero no lo es, al menos no para mí. Google tiene poca función de “recuperación” en la consola API. Simplemente puede restaurar todo, esto significa que almacena sus claves SHA-1, pero marcadas como eliminadas (?). Lo que funcionó para mí para usar la clave de depuración nuevamente, que también fue bloqueada, es que eliminé todos mis proyectos de prueba y borré manualmente todas las claves OAuth dentro de la opción “Acceso a API” de todos esos proyectos eliminados, luego pude usar mi clave de depuración de nuevo. Espero que ayude a alguien …

Aquí hay una lista de verificación:

  1. Primero compruebe si no ha cometido ningún error o falta de coincidencia que se describe en https://developers.google.com/games/services/android/troubleshooting
  2. Un problema común es un ID de recurso ‘app_id’ en conflicto, por ejemplo, si está usando un SDK de Facebook, podría estar usando una clave con el mismo nombre, así que vuelva a verificarlo y cambie el nombre de los otros en caso de que encuentre conflictos. (Yo mantendría el ‘app_id’ asignado a este proyecto, ya que la biblioteca BaseGameUtils se refiere a él como ‘ app_id ‘ en algún código fuente que comprobé).

  3. Aunque los documentos hacen referencia a ” Google Developers Console “, no juegue de forma inteligente e intente agregar los ID de cliente desde allí. Aunque, al final, los ID del cliente también terminarán allí. Hay una pequeña nota que se puede leer mal fácilmente:

Debe crear la nueva ID de cliente en la Consola para progtwigdores de Google Play , no en la Consola de desarrolladores de Google .

  1. Por lo tanto, basándonos en esta nota, cree sus ID de cliente únicamente desde la Consola para progtwigdores de Google Play , en otras palabras, “Agregar una aplicación vinculada”. Por lo tanto, normalmente crearía 2 aplicaciones vinculadas una para usar ‘debug.keystore’ (usando el mismo paquete, pero con diferentes huellas dactilares) y otra ‘aplicación vinculada’ para el almacén de claves ‘de producción’, pero usando el mismo paquete, pero con diferente huellas dactilares

Creo que esto abarca todo, la mayoría de las personas podrían encontrarse en una trampa, ya que todo se ve bien en Google Developer Console , pero de hecho, es probable que se hayan perdido los pasos 3 y 4 anteriores.

Gracias a Sachin Chavan finalmente lo resolvió, el problema fue:
1. Google play tomó el sha1 equivocado.
2. Intenté agregarlo desde la Consola de Google Developer; no funcionó.
Después de mirar la publicación y enlace de Sachin Chavan, vi que puedes vincular la misma aplicación desde Google Play Console varias veces, así que tomé el alias SHA1 con:

 keytool -exportcert \ -alias  \ -keystore  \ -list -v 

y la depuración SHA1 con:

 keytool -exportcert \ -alias androiddebugkey \ -keystore  \ -list -v 

Conecté la aplicación dos veces más, la primera vez que ingresé el alias SHA1 y la segunda vez que depuré SHA1 , después de un día de muchos errores, lo resolví (las etapas en negrita).

Todavía no funciona para mí. Google hizo un reinicio completo de mis servicios de juego de Google Play e hizo paso a paso la integración. Aún así dije que no tengo un ID de cliente de google registrado. Una gran falla, teniendo en cuenta 3 años para hacer los servicios de juegos de Google Play.

Lo último, la cuenta con @ googlemail.com no se reconoce, no se pueden exportar los ID de los logros (se necesita copiar el html, cuando se tienen 40 logros, es bastante doloroso).

05-22 00: 35: 57.914: I / dqi (11166): excepción de E / S (org.apache.http.NoHttpResponseException) capturada al procesar la solicitud: El servidor de destino no respondió 05-22 00: 35: 57.914: I / dqi (11166): Solicitud de reintentación 05-22 00: 35: 58.135: E / Volley (11166): [506] il.a: Código de respuesta inesperado 403 para https://www.googleapis.com/games/v1/ players / me 05-22 00: 35: 58.195: E / Volley (11166): [506] il.a: Código de respuesta inesperado 403 para https://www.googleapis.com/games/v1/players/me 05- 22 00: 35: 58.205: E / SignInIntentService (11166): Acceso no configurado 05-22 00: 35: 58.205: E / SignInIntentService (11166): aol 05-22 00: 35: 58.205: E / SignInIntentService (11166): at ajy.a (SourceFile: 108) 05-22 00: 35: 58.205: E / SignInIntentService (11166): at abm.a (SourceFile: 213 05-22 00: 35: 58.205: E / SignInIntentService (11166): at abm.a (SourceFile: 194) 05-22 00: 35: 58.205: E / SignInIntentService (11166): en aav.a (SourceFile: 486) 05-22 00: 35: 58.205: E / SignInIntentService (11166): en aqu.a (SourceFile: 221) 05-22 00: 35: 58.205: E / SignInInten tService (11166): en com.google.android.gms.games.service.GamesSignInIntentService.onHandleIntent (SourceFile: 343) 05-22 00: 35: 58.205: E / SignInIntentService (11166): en android.app.IntentService $ ServiceHandler .handleMessage (IntentService.java:65) 05-22 00: 35: 58.205: E / SignInIntentService (11166): en android.os.Handler.dispatchMessage (Handler.java:99) 05-22 00: 35: 58.205: E / SignInIntentService (11166): en android.os.Looper.loop (Looper.java:137) 05-22 00: 35: 58.205: E / SignInIntentService (11166): en android.os.HandlerThread.run (HandlerThread.java: 60) 05-22 00: 35: 58.205: E / LoadSelfFragment (15328): no se puede iniciar sesión: la aplicación no tiene una ID de cliente registrada

En mi caso, olvidé cambiar el nombre del paquete en AndroidManifest.xml; eso fue todo. Creo que esto debería verificarse primero.

Por favor, intente esto:

  1. Registre su aplicación como prueba (si aún no se ha publicado) (en el sitio para desarrolladores de Google).
  2. Haga una prueba de identificación de usuario y regístrelos allí.
  3. Ahora escribe tu identificación SHA1 allí.
  4. Anote su ID de desarrollador generada por Google.
  5. Ponlo en el lugar apropiado en tu aplicación.

Si ya lo hace, siga este paso más importante.

6 – Ahora exporta tu aplicación con el mismo almacén de claves y ahora instálala en tu dispositivo (en el que has iniciado sesión como id de probador, registrado en Google).
Ahora seguramente tendrá acceso al servidor en tiempo real de Google sin ningún error.

¡ID de versión! Tuve que cambiar mi ID de versión a un valor mayor que mi versión más reciente. ¡De repente pude ingresar!

Para mí, estaba usando una muestra (Button Clicker) y disfrazándola como una de mis aplicaciones lanzadas. Probablemente todavía tuve que hacer todo el cambio de SHA1 porque parecía estar apagado, pero el cambio que se inclinó a mi favor fue actualizar la ID de la versión a 3 ya que la muestra comienza en 1 y mi aplicación real / publicada se estableció en 2.

Para mí, la firma de depuración funciona, no está firmada; / ¿Podemos ponernos en contacto con google sobre esto? Me he pasado todo el día en él; / me aparece “no hay ninguna aplicación vinculada asociada con este ID de cliente”, pero ambos están en Google Api en el proyecto correcto.

Además, accidentalmente tengo dos aplicaciones vinculadas y publicadas que apuntan al mismo ID de aplicación en la consola de desarrollador, ambas publicadas y no pueden eliminarse.

Por favor, compruebe la conexión a Internet cuando se está ejecutando la aplicación. Si no está conectado, este mensaje de error se registra.