Folgen Sie der Anleitung in diesem Leitfaden, um die APIs für Freunde in Ihrem Java-Spielcode zu implementieren.
Freunde laden
Sie können eine Liste der Spieler abrufen und im Spiel anzeigen, die mit dem aktuellen Nutzer befreundet sind. Als Nutzer können Sie festlegen, welche Spiele auf die Freundesliste zugreifen dürfen. Wenn Sie die Freundesliste abrufen, müssen Sie den Fall behandeln, in dem eine Berechtigung erforderlich ist. All dies ist in der API gekapselt, um den Zugriff anzufordern und die Freundesliste anschließend ganz einfach zu verwenden. So laden Sie die Freundesliste:
- Rufen Sie die Methode
PlayersClient.loadFriends()
auf. Dies ist ein asynchroner Aufruf, der einTask
-Objekt zurückgibt. - Wenn der Aufruf erfolgreich ist (der Nutzer hat bereits Zugriff auf die Freundesliste gewährt), gibt Google Play Spieledienste eine kommentierte
PlayerBuffer
zurück, die die Freunde des Nutzers darstellt. Wenn der Spieler Zugriff auf die Freundesliste gewähren muss, schlägt der Aufruf fehl und es wird
FriendsResolutionRequiredException
zurückgegeben. Es werden noch keine Dialogfelder angezeigt.- Diese Ausnahme enthält eine
Intent
, die ein Dialogfeld auslöst, in dem der Nutzer um seine Einwilligung gebeten wird. Sie können dieseIntent
sofort starten, um ein Einwilligungsdialogfeld zu öffnen. Sie können dieseIntent
nur einmal verwenden. Wenn das Ergebnis der Aktivität des
Intent
Activity.RESULT_OK
ist, wurde die Einwilligung erteilt. Rufen SieloadFriends()
noch einmal auf, um die Freundesliste zurückzugeben. Wenn das ErgebnisActivity.RESULT_CANCELLED
ist, hat der Nutzer nicht zugestimmt.loadFriends()
gibt dann weiterhinFriendsResolutionRequiredException
zurück.
- Diese Ausnahme enthält eine
Im folgenden Code wird gezeigt, wie das Laden der Freundesliste implementiert wird:
// 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;
}
Im folgenden Code wird gezeigt, wie das Ergebnis der Einwilligungsanfrage verarbeitet wird:
/** 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.
}
}
}
Profil eines anderen Spielers ansehen
Sie können sich das Play Spiele-Profil eines anderen Spielers direkt in Ihrem Spiel ansehen. In dieser Ansicht können Spieler Freundschaftsanfragen an den Spieler senden und annehmen, dessen Profil aufgerufen wird. Für diese Ansicht ist kein Zugriff auf die Freundesliste erforderlich. Wenn Ihr Spiel ein eigenes Konzept für Spielernamen hat, das sich von den Play Spiele-Spieler-IDs unterscheidet, können Sie diese an die Profilansicht weitergeben, damit sie in Freundschaftsanfragen für zusätzlichen Kontext verwendet werden können.
So rufst du das Profil eines anderen Spielers auf:
- Rufen Sie die Methode
PlayersClient.getCompareProfileIntent()
auf. Dies ist ein asynchroner Aufruf, der einTask
-Objekt zurückgibt. - Wenn der Aufruf erfolgreich ist, gibt Google Play Spieledienste einen Intent zurück, über den ein Bildschirm angezeigt wird, auf dem sich der Nutzer mit dem Profil eines anderen Spielers vergleichen kann.
- Verwenden Sie
Intent
aus dem vorherigen Schritt, um eine Aktivität zu starten.
// 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);
// ...
}});
Wenn das Spiel einen eigenen Namen für Spieler hat, können diese dem API-Aufruf hinzugefügt werden. So kann Play Spiele den Alias von Spielern, die über Ihr Spiel Freundschaftsanfragen senden, auf „<game-specific-name> von <your-game-name>“ festlegen. Play Spiele fügt automatisch „von <your-game-name>“ an:
// 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);
// ...
}});