Solución de problemas de los Servicios de juego de Play en juegos para Android

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

En esta página, se describe cómo solucionar los problemas que podrías encontrar al desarrollar juegos para Android con los Servicios de juego de Google Play.

Registro

Para solucionar problemas relacionados con el juego, puedes activar el registro detallado en tu dispositivo mediante el comando adb shell. Luego, podrás ver los mensajes de registro de los Servicios de juego de Google Play mediante Logcat.

Cómo habilitar el registro

Para habilitar el registro en tu dispositivo de prueba, haz lo siguiente:

  1. Conecta el dispositivo a una máquina que tenga instalado el SDK de Android.

  2. Abre una terminal y ejecuta este comando:

    adb shell setprop log.tag.Games VERBOSE
  3. Ejecuta tu juego en el dispositivo y reproduce el problema que intentas depurar.

  4. Revisa los registros:

    adb logcat

Cómo inhabilitar el registro

Para inhabilitar el registro detallado de los Servicios de juego de Play en tu dispositivo y volver al comportamiento de registro original, ejecuta el siguiente comando:

adb shell setprop log.tag.Games INFO

No se puede acceder

Si los jugadores no pueden acceder a tu juego, asegúrate de haber seguido las instrucciones para crear tus IDs de cliente y configurar los servicios de juego. Si aún encuentras errores de acceso, verifica los siguientes elementos para asegurarte de que tu juego esté configurado correctamente.

Verifica tus etiquetas de metadatos

Tu archivo AndroidManifest.xml debe contener una etiqueta de metadatos de juegos. Sigue estos pasos a fin de verificar que las etiquetas de metadatos estén configuradas de forma correcta:

  1. Abre el archivo AndroidManifest.xml y verifica que contenga una etiqueta meta-data como se muestra a continuación:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Busca la definición de tu recurso @string/app_id. Por lo general, se define en un archivo en formato XML ubicado en el directorio res/xml, por ejemplo, res/xml/strings.xml o res/xml/ids.xml.

  3. Verifica que el valor del recurso @string/app_id coincida con el ID numérico de tu aplicación. El valor de este recurso solo debe contener dígitos. Por ejemplo:

    <string name="app_id">123456789012</string>
    

Verifica el nombre de tu paquete

El nombre del paquete del juego debe coincidir con el nombre de paquete de tu ID de cliente. Sigue estos pasos a fin de verificar el nombre del paquete:

  1. Abre tu AndroidManifest.xml y comprueba que el nombre del paquete de tu juego sea el correcto. El nombre del paquete es el valor del atributo package de la etiqueta manifest.

  2. Verifica el nombre del paquete que proporcionaste cuando creaste el ID de cliente. Para verificar el nombre del paquete en Google Play Console, ve a Play Console y haz clic en la entrada correspondiente a tu juego.

  3. Ve a la pestaña Aplicaciones vinculadas y examina la lista de IDs de clientes. Debe haber una aplicación vinculada de Android en esta lista cuyo nombre de paquete coincida con el nombre de paquete de tu AndroidManifest.xml. De lo contrario, crea un ID de cliente nuevo con el nombre correcto del paquete y, luego, intenta acceder de nuevo.

Verifica la huella digital del certificado

El certificado con el que firmes el juego debe coincidir con la huella digital del certificado asociada con tu ID de cliente. Para verificar esto, primero comprueba la huella digital SHA1 de tu certificado de la siguiente manera:

  1. Busca el archivo del certificado y obtén su huella digital SHA1. Para obtenerla, ejecuta este comando:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Toma nota de la secuencia de dígitos hexadecimales con la etiqueta SHA1: en el resultado. Esa es la huella digital de tu certificado.

A continuación, comprueba que tu herramienta de compilación use este certificado:

  1. Genera el APK de tu juego desde la herramienta de compilación y fírmalo con el certificado que desees. Copia el APK generado en un directorio temporal.
  2. En el directorio temporal, ejecuta el siguiente comando para descomprimir el APK.

    unzip YourGame.apk
    
  3. Genera una clave privada con un archivo de certificado RSA:

    keytool -printcert -file META-INF/CERT.RSA
    

    Como alternativa, puedes generar la clave privada mediante un archivo de certificado DSA:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Observa la secuencia de dígitos hexadecimales de la línea con la etiqueta SHA1:.

    Esta secuencia de dígitos debe coincidir con la huella digital del certificado del paso anterior. De lo contrario, tu herramienta de compilación o sistema no están configurados para firmar la aplicación con tu certificado. En este caso, consulta la documentación de tu entorno de compilación a fin de determinar cómo configurarlo de forma correcta y vuelve a acceder.

A continuación, comprueba si la huella digital del certificado coincide con la configurada en tu ID de cliente. Para hacer esto:

  1. Abre Play Console y navega a tu juego.
  2. En la página Detalles del juego, desplázate hasta la parte inferior y haz clic en el vínculo al proyecto vinculado de Google Cloud Platform.
  3. Selecciona tu proyecto.
  4. En la barra lateral izquierda, selecciona API y autenticación. Asegúrate de que el estado de la API de los Servicios de juego de Google Play esté ACTIVADO en la lista de API que se muestra.
  5. En la barra lateral izquierda, selecciona Apps registradas.
  6. Expande la sección del ID de cliente de OAuth 2.0 y observa la huella digital del certificado (SHA1).

Si esta huella digital no coincide con la huella digital de tu certificado de los pasos anteriores, debes crear un nuevo ID de cliente con la huella digital correcta del certificado. Debes crear el ID de cliente nuevo en Play Console, no en el proyecto de Google Cloud Platform.

Verifica que las cuentas de prueba estén habilitadas

Antes de que se publique un juego, la cuenta que lo creó en Play Console también debe estar habilitada como una de verificador. Para comprobar que esté configurada de manera correcta, sigue estos pasos:

  1. Abre Play Console y navega a tu juego.
  2. Abre la pestaña Pruebas.
  3. Comprueba que la cuenta con la que intentas acceder esté en la lista de cuentas de verificadores.

Si no aparece en la lista, agrégala, espera unos minutos y vuelve a intentar acceder.

Problemas de Proguard

Si usas Proguard y ves errores en el APK ofuscado, verifica el nivel de API de destino en tu archivo AndroidManifest.xml. Asegúrate de establecerlo en 17 o más.

Otras causas de problemas de configuración

Revisa otras causas habituales de errores:

  • Si tu juego está publicado, verifica que también se publique su configuración (es posible publicar la aplicación sin publicar la configuración del juego). Para ello, ve a Google Play Console, navega a tu app y comprueba que la casilla junto al nombre del juego indique que está publicado. Si indica que se encuentra en otro estado, como "Listo para publicar" o "Ready to Test", haz clic en la casilla y selecciona Publicar el proyecto de juego.
  • Si no puedes publicar tu juego, verifica que uno de los IDs de cliente tenga habilitada la opción que indica que la app es preferible para nuevas instalaciones.

Objetos de escucha anónimos

No uses objetos de escucha anónimos. Estos son implementaciones de una interfaz de objeto de escucha que se definen intercaladas, como se ilustra a continuación.

    ImageManager im = ...;

    // Anonymous listener -- dangerous:
    im.loadImage(new ImageManager.OnImageLoadedListener() {
        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }

Los objetos de escucha anónimos no son confiables porque el SDK de Play Juegos los mantiene como referencias débiles, lo que significa que el recolector de elementos no utilizados puede reclamarlos antes de que se los invoque. En su lugar, debes implementar el objeto de escucha usando un objeto persistente como la Activity.

    public class MyActivity extends Activity
            implements ImageManager.OnImageLoadedListener {

        private void loadOurImages() {
            ImageManager im = ...;
            im.loadImage(this);
        }

        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }