Pour pouvoir accéder aux fonctionnalités des services de jeux Google Play, votre jeu doit fournir le compte du joueur connecté. Cette documentation explique comment mettre en œuvre une expérience de connexion fluide dans votre jeu.
Le SDK des services de jeux Play v2 propose diverses améliorations qui augmentent le nombre d'utilisateurs connectés à votre jeu et facilitent le développement :
- Améliorations pour les utilisateurs :
- Après avoir sélectionné un compte par défaut, les utilisateurs sont connectés sans avoir à interagir avec une invite.
- Les utilisateurs n'ont plus besoin de télécharger l'application Play Jeux pour se connecter aux services de jeux Play ni pour créer un compte.
- Les utilisateurs peuvent désormais gérer le compte de leurs services de jeux Play pour plusieurs jeux à partir d'une seule page.
- Améliorations pour les développeurs :
- Le flux de connexion ou de déconnexion n'a plus besoin d'être géré avec le code client, car les utilisateurs peuvent se connecter automatiquement au démarrage du jeu et le compte est géré dans les paramètres du système d'exploitation.
Intégration d'un nouveau client
Cette section explique comment intégrer un nouveau client avec les services de jeux Play Sign-In v2.
Ajouter la dépendance
Ajoutez la dépendance du SDK des services de jeux Play au fichier build.gradle
racine de votre application. Si vous utilisez Gradle, vous pouvez ajouter ou mettre à jour la dépendance comme suit :
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
Définir l'ID du projet
Pour ajouter l'ID de projet du SDK des services de jeux Play à votre application, procédez comme suit :
Dans le fichier
AndroidManifest.xml
de votre application, ajoutez l'élément<meta-data>
et les attributs suivants à l'élément<application>
:<manifest> <application> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/game_services_project_id"/> </application> </manifest>
Définissez la référence de la ressource de chaîne
@string/game_services_project_id
en indiquant l'ID de projet des services de jeux correspondant à votre jeu. L'ID de projet des services de jeux se trouve sous le nom de votre jeu sur la page Configuration de la Google Play Console.Dans le fichier
res/values/strings.xml
, ajoutez une référence de ressource de chaîne et définissez l'ID du projet comme valeur. Dans Google Play Console, vous trouverez l'ID de votre projet sous le nom de votre jeu sur la page Configuration. Exemple :<!-- res/values/strings.xml --> <resources> <!-- Replace 0000000000 with your game’s project id. Example value shown above. --> <string translatable="false" name="game_services_project_id"> 0000000000 </string> </resources>
Initialiser le SDK
Initialisez le SDK Play Jeux dans le rappel onCreate(..)
de la classe Application
.
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
Obtenir le résultat de connexion
Lorsque votre jeu se lance, il tente toujours de connecter l'utilisateur. Pour authentifier l'utilisateur, vous devez vérifier qu'il s'est bien connecté, puis obtenir son ID de joueur.
Pour vérifier la tentative de connexion, appelez GamesSignInClient.isAuthenticated()
et utilisez addOnCompleteListener
pour récupérer les résultats. Exemple :
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
boolean isAuthenticated =
(isAuthenticatedTask.isSuccessful() &&
isAuthenticatedTask.getResult().isAuthenticated());
if (isAuthenticated) {
// Continue with Play Games Services
} else {
// Disable your integration with Play Games Services or show a
// login button to ask players to sign-in. Clicking it should
// call GamesSignInClient.signIn().
}
});
Si l'utilisateur choisit de ne pas se connecter au lancement du jeu, vous pouvez continuer à afficher un bouton avec l'icône Play Jeux et réessayer de le connecter en appelant GamesSignInClient.signIn()
si l'utilisateur
appuie sur ce bouton.
Après avoir vérifié que l'utilisateur est connecté, vous pouvez récupérer l'ID du joueur pour l'identifier. Exemple :
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
// Get PlayerID with mTask.getResult().getPlayerId()
}
);
Migrer vers les services de jeux Play Sign-In v2
Cette section explique comment migrer le code client de la version 1 des services de jeux Play vers la version 2.
Le nouveau SDK contient quatre modifications importantes qui augmentent le taux de réussite des connexions, et que vous devez connaître :
- La connexion se déclenche automatiquement au lancement du jeu. Au lieu d'utiliser le
GoogleSignInClient
du SDK GoogleSignIn pour connecter l'utilisateur, vous pouvez utiliserGamesSignInClient.isAuthenticated()
pour récupérer le résultat de la tentative de connexion automatique. - Il n'est plus nécessaire de transmettre un objet
GoogleSignInAccount
pour les classes Client Factory. Les champs d'application OAuth supplémentaires ne peuvent pas être demandés (GAMES_LITE
est demandé automatiquement). - Les jetons d'authentification sont désormais fournis à l'aide de
GamesSignInClient.requestServerSideAccess()
dans le SDK des services de jeux Play. - La méthode de déconnexion a été supprimée, et vous n'avez plus besoin de bouton dans le jeu pour connecter ou déconnecter les joueurs des services de jeux Play.
De plus, votre jeu enregistrera des connexions supplémentaires en raison de la connexion automatique au lancement du jeu. Par conséquent, nous vous recommandons d'examiner la gestion des quotas pour vous assurer que votre jeu ne dépasse pas le quota de requêtes de connexion.
Cibler le nouveau dépôt Maven du SDK
Si vous utilisez le système de compilation Gradle, remplacez votre dépendance par l'artefact com.google.android.gms:play-services-games-v2:+
dans le fichier build.gradle
de votre module. Exemple :
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
Initialiser le SDK
Initialisez le SDK Play Jeux dans le rappel onCreate(..)
de la classe Application
. Exemple :
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
Supprimer les appels de connexion et de déconnexion
Si vous ne spécifiez aucun champ d'application supplémentaire, la migration de votre cas d'utilisation devrait être simple.
Supprimez les appels de connexion à l'aide de l'API GoogleSignIn. Le joueur sera automatiquement connecté au lancement du jeu. À la place des appels de connexion, écoutez le résultat de la tentative de connexion automatique avec
GamesSignInClient.isAuthenticated()
.GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity()); gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> { boolean isAuthenticated = (isAuthenticatedTask.isSuccessful() && isAuthenticatedTask.getResult().isAuthenticated()); if (isAuthenticated) { // Continue with Play Games Services } else { // Disable your integration with Play Games Services or show a // login button to ask players to sign-in. Clicking it should // call GamesSignInClient.signIn(). } });
Supprimez tous les appels de déconnexion, car le compte est désormais géré dans les paramètres de l'OS et de l'application Play Jeux.
Si le joueur est connecté, supprimez le bouton de connexion à Play Jeux de votre jeu. Si l'utilisateur choisit de ne pas se connecter au lancement du jeu, vous pouvez choisir de continuer à afficher un bouton avec l'icône Play Jeux et de déclencher le processus de connexion avec
GamesSignInClient.signIn()
.Après avoir vérifié que l'utilisateur est connecté, vous pouvez récupérer l'ID du joueur pour l'identifier.
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> { // Get PlayerID with mTask.getResult().getPlayerId() } );
Supprimez votre dépendance à l'API GoogleSignIn si elle n'est plus utilisée.
Mettre à jour les noms des classes de clients
Lorsque vous créez des clients (LeaderboardsClient
ou AchievementsClient
, par exemple), utilisez PlayGames.getFooClient()
au lieu de Games.getFooClient()
.
Demander un accès côté serveur
Lorsque vous demandez un accès côté serveur, utilisez GamesSignInClient.requestServerSideAccess()
au lieu de GoogleSignInAccount.getServerAuthCode()
.
GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
.requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
/*forceRefreshToken=*/ false)
.addOnCompleteListener( task -> {
if (task.isSuccessful()) {
String serverAuthToken = task.getResult();
// Send authentication code to the backend game server to be
// exchanged for an access token and used to verify the
// player via the Play Games Services REST APIs.
} else {
// Failed to retrieve authentication code.
}
});
Supprimer les champs d'application supplémentaires
Avec les services de jeux Play v2, vous ne pouvez pas demander de champs d'application supplémentaires. Si vous avez besoin de cette fonctionnalité, nous vous recommandons d'utiliser le SDK Google Sign-In en plus des services de jeux Play.
Migration depuis GoogleApiClient
Pour les anciennes intégrations, il se peut que votre jeu dépende de la variante d'API GoogleApiClient du SDK des services de jeux Play. Cette solution est obsolète depuis 2017 et a été remplacée par des clients "sans connexion". Pour effectuer la migration, vous pouvez remplacer la classe GoogleApiClient
par un équivalent "sans connexion". Vous devrez ensuite suivre les conseils ci-dessus pour migrer votre jeu de la version 1 vers la version 2. Vous trouverez ci-dessous un mappage des classes courantes :
com.google.android.gms.games.achievement.Achievements ->
com.google.android.gms.games.AchievementsClient
com.google.android.gms.games.leaderboard.Leaderboard ->
com.google.android.gms.games.LeaderboardsClient
com.google.android.gms.games.snapshot.Snapshots ->
com.google.android.gms.games.SnapshotsClient
com.google.android.gms.games.stats.PlayerStats ->
com.google.android.gms.games.PlayerStatsClient
com.google.android.gms.games.Players ->
com.google.android.gms.games.PlayersClient
com.google.android.gms.games.GamesStatusCodes ->
com.google.android.gms.games.GamesClientStatusCodes