In dieser Anleitung wird beschrieben, wie Sie die Friends-APIs in Android Studio-Projekten verwenden.
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 Zugriff auf die Freundesliste haben. Wenn Sie die Freundesliste abrufen, müssen Sie den Fall berücksichtigen, in dem eine Berechtigung erforderlich ist. Das ist alles in der API enthalten, um den Zugriff und die anschließende Verwendung der Freundesliste zu vereinfachen. 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), geben die Google Play-Spieledienste ein annotiertes
PlayerBuffer
zurück, das die Freunde des Nutzers repräsentiert. Wenn der Spieler Zugriff auf die Freundesliste gewähren muss, schlägt der Aufruf mit einem
FriendsResolutionRequiredException
fehl. Es werden noch keine Dialogfelder angezeigt.- Diese Ausnahme enthält ein
Intent
, das ein Dialogfeld auslöst, in dem der Spieler um Einwilligung gebeten wird. Sie könnenIntent
sofort aufrufen, um ein Einwilligungsdialogfeld zu öffnen. Sie können dieseIntent
nur einmal verwenden. Wenn das Ergebnis der Aktivität von
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 keine Einwilligung erteilt undloadFriends()
gibt weiterhinFriendsResolutionRequiredException
zurück.
- Diese Ausnahme enthält ein
Der folgende Code zeigt, wie die Freundesliste geladen 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.
PlayGames.getPlayersClient(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;
}
Der folgende Code zeigt, wie das Ergebnis der Einwilligungserklärung 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 in Ihrem Spiel eine Ansicht des Google Play Spiele-Profils eines anderen Spielers anzeigen. In dieser Ansicht können Spieler Freundschaftseinladungen für den angezeigten Spieler senden und annehmen. Für diese Ansicht ist kein Zugriff auf die Freundesliste erforderlich. Wenn Ihr Spiel eigene Spielernamen hat, die sich von den Play Spiele-Spieler-IDs unterscheiden, können Sie diese an die Profilansicht übergeben, damit sie in Freundeseinladungen für zusätzlichen Kontext enthalten sein können.
So rufen Sie 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, geben die Google Play-Spieledienste eine Intent zurück, mit der ein Bildschirm angezeigt wird, auf dem sich der Nutzer mit dem Profil eines anderen Spielers vergleichen kann.
- Verwende
Intent
aus dem vorherigen Schritt, um eine Aktivität zu starten.
// Retrieve and launch an Intent to show a player profile within the game.
PlayGames.getPlayersClient(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, kann dieser dem API-Aufruf hinzugefügt werden. Dadurch kann Play Spiele den Spitznamen von Spielern, die Freundschaftseinladungen aus Ihrem Spiel senden, auf „<game-specific-name> from <your-game-name>“ festlegen. Play Spiele fügt automatisch „from <your-game-name>“ hinzu:
// 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 authenticated.
// Hence if the player sends an invitation to the profile they are viewing,
// their game-specific name can be included.
PlayGames.PlayersClient(this)
.getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)
.addOnSuccessListener(new OnSuccessListener<Intent>() {
@Override
public void onSuccess(Intent intent) {
startActivityForResult(intent, RC_SHOW_PROFILE);
// ...
}});