Suivez les étapes de ce guide pour implémenter les API Friends dans le code de votre jeu Java.
Charger des amis
Vous pouvez récupérer et afficher (dans le jeu) une liste de joueurs qui sont amis avec l'utilisateur actuel. En tant qu'utilisateur, il est possible de contrôler quels jeux ont accès à la liste d'amis. Lorsque vous récupérez la liste d'amis, vous devez gérer le cas où une autorisation est nécessaire. Tout cela est encapsulé dans l'API pour faciliter la demande d'accès, puis l'utilisation de la liste d'amis. Pour charger la liste d'amis, procédez comme suit :
- Appelez la méthode
PlayersClient.loadFriends()
, qui est un appel asynchrone renvoyant un objetTask
. - Si l'appel aboutit (l'utilisateur a déjà accordé l'accès à la liste d'amis), les services de jeux Google Play renvoient un
PlayerBuffer
annoté qui représente les amis de l'utilisateur. Si le joueur doit accorder l'accès à la liste d'amis, l'appel échoue avec l'exception
FriendsResolutionRequiredException
. Aucune boîte de dialogue n'a encore été affichée.- Cette exception contient un
Intent
qui déclenche l'affichage d'une boîte de dialogue demandant le consentement du joueur. Vous pouvez lancer immédiatement cetIntent
pour ouvrir une boîte de dialogue de collecte du consentement. Vous ne pouvez utiliser cetIntent
qu'une seule fois. Si le résultat de l'activité de l'
Intent
estActivity.RESULT_OK
, cela signifie que le consentement a été accordé. RappelezloadFriends()
pour renvoyer la liste d'amis. Si le résultat estActivity.RESULT_CANCELLED
, cela signifie que l'utilisateur n'a pas donné son consentement.loadFriends()
continue donc à renvoyer l'exceptionFriendsResolutionRequiredException
.
- Cette exception contient un
Le code suivant montre comment implémenter le chargement de la liste d'amis:
// Attempt loading friends.
// Register a success listener to handle the successfully loaded friends list.
// Register a failure listener to handle asking for permission to access the list.
Games.getPlayersClient(this, GoogleSignIn.getLastSignedInAccount(this))
.loadFriends(PAGE_SIZE, /* forceReload= */ false)
.addOnSuccessListener(
new OnSuccessListener<AnnotatedData<PlayerBuffer>>() {
@Override
public void onSuccess(AnnotatedData<PlayerBuffer> data) {
PlayerBuffer playerBuffer = data.get();
// ...
})
.addOnFailureListener(
exception -> {
if (exception instanceof FriendsResolutionRequiredException) {
PendingIntent pendingIntent =
((FriendsResolutionRequiredException) task.getException())
.getResolution();
parentActivity.startIntentSenderForResult(
pendingIntent.getIntentSender(),
/* requestCode */ SHOW_SHARING_FRIENDS_CONSENT,
/* fillInIntent */ null,
/* flagsMask */ 0,
/* flagsValues */ 0,
/* extraFlags */ 0,
/* options */ null);
}
});
return;
}
Le code suivant montre comment gérer le résultat de la demande de consentement :
/** Handle the activity result from the request for consent. */
@Override
public void onActivityResult(int requestCode, int result, Intent data) {
if (requestCode == SHOW_SHARING_FRIENDS_CONSENT) {
if (result == Activity.RESULT_OK) {
// We got consent from the user to access their friends. Retry loading the friends
callLoadFriends();
} else {
// User did not grant consent.
}
}
}
Afficher le profil d'un autre joueur
Vous pouvez afficher le profil Play Jeux d'un autre joueur dans votre jeu. Cette vue permet aux joueurs d'envoyer et d'accepter des invitations à devenir amis. Elle ne nécessite pas d'accéder à la liste d'amis. De plus, si votre jeu possède son propre concept de noms de joueurs, distinct des ID de joueur Play Jeux, vous pouvez les transmettre à la vue du profil afin qu'ils puissent être inclus dans les invitations à devenir amis pour plus de contexte.
Pour afficher le profil d'un autre joueur, procédez comme suit :
- Appelez la méthode
PlayersClient.getCompareProfileIntent()
, qui est un appel asynchrone renvoyant un objetTask
. - Si l'appel aboutit, les services de jeux Google Play renvoient un Intent qui affiche un écran permettant à l'utilisateur de se comparer au profil d'un autre joueur.
- Utilisez l'
Intent
de l'étape précédente pour démarrer une activité.
// Retrieve and launch an Intent to show a player profile within the game.
Games.getPlayersClient(this, GoogleSignIn.getLastSignedInAccount(this))
.getCompareProfileIntent(otherPlayerId)
.addOnSuccessListener(new OnSuccessListener<Intent>() {
@Override
public void onSuccess(Intent intent) {
startActivityForResult(intent, RC_SHOW_PROFILE);
// ...
}});
Si le jeu possède son propre concept de noms de joueurs, ceux-ci peuvent être ajoutés à l'appel d'API. Play Jeux peut ainsi définir le pseudo des joueurs qui envoient des invitations d'amis depuis votre jeu à "<game-specific-name> from <your-game-name>" (Play Jeux ajoute automatiquement "depuis <your-game-name>"):
// Show a player profile within the game, with additional hints containing the
// game-specific names for both players.
// - otherPlayerId is the Play Games playerId of the player to view.
// - otherPlayerInGameName is the game-specific name of the player being viewed.
// - currentPlayerInGameName is the game-specific name of the player who is signed
// in. Hence if the player sends an invitation to the profile they are viewing,
// their game-specific name can be included.
Games.PlayersClient(this, GoogleSignIn.getLastSignedInAccount(this))
.getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)
.addOnSuccessListener(new OnSuccessListener<Intent>() {
@Override
public void onSuccess(Intent intent) {
startActivityForResult(intent, RC_SHOW_PROFILE);
// ...
}});