Résoudre les problèmes liés aux services de jeux Play dans les jeux Android

Cette page décrit des solutions permettant de résoudre les problèmes que vous pouvez rencontrer lors du développement de jeux pour Android avec les services de jeux Google Play.

Journalisation

Pour résoudre les problèmes liés à votre jeu, vous pouvez activer la journalisation détaillée sur votre appareil à l'aide de la commande adb shell. Vous pouvez ensuite afficher les messages de journal des services de jeux Google Play à l'aide de Logcat.

Activer la journalisation

Pour activer l'enregistrement dans les journaux sur votre appareil de test :

  1. Connectez l'appareil à un ordinateur sur lequel le SDK Android est installé.

  2. Ouvrez un terminal et exécutez cette commande :

    adb shell setprop log.tag.Games VERBOSE
  3. Exécutez votre jeu sur l'appareil, et reproduisez le problème que vous essayez de déboguer.

  4. Affichez les journaux :

    adb logcat

Désactiver la journalisation

Pour désactiver la journalisation détaillée des services de jeux Play sur votre appareil et rétablir le comportement de journalisation d'origine, exécutez la commande suivante :

adb shell setprop log.tag.Games INFO

Impossible de se connecter

Si les joueurs ne peuvent pas se connecter à votre jeu, assurez-vous en premier lieu que vous avez bien suivi les instructions pour créer les ID clients et configurer les services de jeux. Si vous rencontrez toujours des erreurs de connexion, vérifiez les éléments suivants pour vous assurer que votre jeu est correctement configuré.

Vérifier vos balises de métadonnées

Votre fichier AndroidManifest.xml doit contenir une balise de métadonnées de jeux. Pour vérifier que vos balises de métadonnées sont correctement configurées, suivez les instructions ci-dessous :

  1. Ouvrez le fichier AndroidManifest.xml et vérifiez qu'il contient une balise meta-data comme indiqué ci-dessous :

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Recherchez la définition de votre ressource @string/app_id. Elle est généralement définie dans un fichier XML situé dans le répertoire res/xml, par exemple res/xml/strings.xml ou res/xml/ids.xml.

  3. Vérifiez que la valeur de la ressource @string/app_id correspond à l'identifiant numérique de votre application. La valeur de cette ressource ne doit contenir que des chiffres. Par exemple :

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

Vérifier le nom de votre package

Le nom de package de votre jeu doit correspondre à celui de votre ID client. Pour vérifier le nom du package:

  1. Ouvrez le fichier AndroidManifest.xml et vérifiez que le nom du package de votre jeu est correct. Le nom du package correspond à la valeur de l'attribut package dans la balise manifest.

  2. Vérifiez le nom de package que vous avez fourni lors de la création de votre ID client. Pour vérifier le nom du package dans la Google Play Console, accédez à la Play Console, puis cliquez sur l'entrée correspondant à votre jeu.

  3. Cliquez sur l'onglet Applications associées, puis consultez la liste des ID clients. Une application associée Android dont le nom de package correspond au nom de package présent dans votre fichier AndroidManifest.xml devrait y figurer. Si les noms de package ne correspondent pas, créez un nouvel ID client comportant le nom de package correct, puis essayez à nouveau de vous connecter.

Vérifier l'empreinte du certificat

Le certificat avec lequel vous signez votre jeu doit correspondre à l'empreinte du certificat associé à votre ID client. Pour vous en assurer, vérifiez d'abord l'empreinte SHA1 de votre certificat comme suit:

  1. Recherchez votre fichier de certificat, puis récupérez son empreinte numérique SHA1. Pour obtenir l'empreinte numérique SHA1, exécutez cette commande :

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Notez la séquence de chiffres hexadécimaux libellés SHA1: dans le résultat obtenu. Il s'agit de l'empreinte numérique de votre certificat.

Ensuite, vérifiez que votre outil de création utilise ce certificat.

  1. Générez le fichier APK de votre jeu à partir de votre outil de création, puis signez-le avec le certificat souhaité. Copiez le fichier APK généré dans un répertoire temporaire.
  2. Dans le répertoire temporaire, exécutez la commande suivante pour décompresser votre APK :

    unzip YourGame.apk
    
  3. Générez une clé privée à l'aide d'un fichier de certificat RSA :

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

    Vous pouvez également générer la clé privée à l'aide d'un fichier de certificat DSA :

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Notez la séquence de chiffres hexadécimaux sur la ligne libellée SHA1:.

    Cette séquence de chiffres doit correspondre à l'empreinte de votre certificat récupérée lors de l'étape précédente. Si ce n'est pas le cas, cela signifie que votre outil ou votre système de création n'est pas configuré pour signer votre application avec votre certificat. Dans ce cas, consultez la documentation de votre environnement de création pour savoir comment configurer celui-ci correctement puis essayez à nouveau de vous connecter.

Vérifiez ensuite si l'empreinte du certificat correspond à l'empreinte configurée dans votre ID client. Pour…

  1. Ouvrez la Play Console, puis recherchez votre jeu.
  2. Sur la page Caractéristiques du jeu, faites défiler la page jusqu'en bas, puis cliquez sur le lien redirigeant vers le projet associé dans Google Cloud Platform.
  3. Sélectionnez votre projet.
  4. Dans la barre de gauche, sélectionnez APIs & auth (API et authentification). Assurez-vous que l'état de l'API des services de jeux Google Play est activé dans la liste des API affichée.
  5. Sur la barre latérale de gauche, sélectionnez Applications enregistrées.
  6. Développez la section "ID client OAuth 2.0", puis notez l'empreinte du certificat (SHA1).

Si cette empreinte numérique ne correspond pas à l'empreinte numérique de votre certificat récupéré lors des étapes précédentes, vous devez créer un nouvel ID client comportant l'empreinte numérique de certificat correcte. Vous devez créer l'ID client dans la Play Console, et non dans le projet Google Cloud Platform.

Vérifier que les comptes de test sont activés

Avant la publication d'un jeu, le compte utilisé pour créer le jeu dans la Play Console doit également être activé en tant que testeur. Voici comment procéder pour vérifier que cette fonctionnalité est correctement configurée :

  1. Ouvrez la Play Console, puis recherchez votre jeu.
  2. Ouvrez l'onglet Test.
  3. Vérifiez que le compte avec lequel vous essayez de vous connecter figure dans la liste des testeurs.

Si le compte avec lequel vous essayez de vous connecter n'est pas dans la liste, ajoutez-le, attendez quelques minutes, puis réessayez de vous connecter.

Problèmes avec Proguard

Si vous utilisez Proguard et que vous constatez des erreurs dans le fichier APK obscurci, vérifiez le niveau d'API cible dans votre fichier AndroidManifest.xml. Assurez-vous de le définir sur 17 ou plus.

Autres causes de problèmes de configuration

Vérifiez les autres causes d'erreur les plus courantes :

  • Si votre jeu est publié, vérifiez que ses paramètres sont également publiés (il est possible de publier l'application sans publier les paramètres du jeu). Pour ce faire, accédez à la Google Play Console, puis à votre application. Vérifiez que la case située à côté du nom du jeu indique qu'il est publié. Si elle indique un autre état, tel que "Prêt pour la publication" ou "Prêt pour les tests", cliquez sur la case, puis sélectionnez Publier le jeu.
  • Si vous ne pouvez pas publier votre jeu, vérifiez que l'option Cette application est prioritaire pour les nouvelles installations est activée pour un seul ID client.

Écouteurs anonymes

N'utilisez pas d'écouteurs anonymes. Les écouteurs anonymes sont des implémentations d'une interface d'écouteur définie de manière intégrée, comme illustré ci-dessous.

    ImageManager im = ...;

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

Les écouteurs anonymes ne sont pas fiables, car le SDK Play Jeux les conserve comme des références faibles, ce qui signifie qu'ils peuvent être éliminés par le récupérateur de mémoire avant d'être appelés. Implémentez plutôt l'écouteur à l'aide d'un objet persistant, tel que 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...
        }
    }