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 :
Connectez l'appareil à un ordinateur sur lequel le SDK Android est installé.
Ouvrez un terminal et exécutez cette commande :
adb shell setprop log.tag.Games VERBOSE
Exécutez votre jeu sur l'appareil, et reproduisez le problème que vous essayez de déboguer.
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 :
Ouvrez le fichier
AndroidManifest.xml
et vérifiez qu'il contient une balisemeta-data
comme indiqué ci-dessous :<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
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épertoireres/xml
, par exempleres/xml/strings.xml
oures/xml/ids.xml
.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, voici les actions qu'ils ont menées :<string name="app_id">123456789012</string>
Vérifier le nom de votre package
Le nom de package de votre jeu doit correspondre au nom de package dans l'ID client. Pour vérifier le nom de package, procédez comme suit :
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'attributpackage
dans la balisemanifest
.Vérifiez le nom de package que vous avez fourni lors de la création de votre ID client. Pour vérifier le nom de package dans la console développeur, accédez à celle-ci, puis cliquez sur l'entrée correspondant à votre jeu.
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 tout d'abord l'empreinte digitale SHA1 de votre certificat comme suit :
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
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.
- 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.
Dans le répertoire temporaire, exécutez la commande suivante pour décompresser votre APK :
unzip YourGame.apk
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
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 digitale configurée dans votre ID client. Pour ce faire, procédez comme suit :
- Ouvrez la Play Console, puis recherchez votre jeu.
- 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.
- Sélectionnez votre projet.
- 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.
- Sur la barre latérale de gauche, sélectionnez Applications enregistrées.
- 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 :
- Ouvrez la Play Console, puis recherchez votre jeu.
- Ouvrez l'onglet Test.
- 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...
}
}