Friends APIs einbinden (Java)

Mithilfe der Schritte in dieser Anleitung können Sie die Friends APIs im Code Ihres Java-Spiels implementieren.

Freunde laden

Sie können im Spiel eine Liste der Spieler abrufen und anzeigen, die mit dem aktuellen Nutzer befreundet sind. Als Nutzer können Sie steuern, welche Spiele Zugriff auf die Freundesliste haben. Wenn Sie die Freundesliste abrufen, müssen Sie den Fall bearbeiten, in dem die Berechtigung erforderlich ist. Dies ist alles in der API gekapselt, um den Zugriff anzufordern und anschließend die Freundesliste zu verwenden. So laden Sie die Freundesliste:

  1. Rufen Sie die Methode PlayersClient.loadFriends() auf. Dabei handelt es sich um einen asynchronen Aufruf, der ein Task-Objekt zurückgibt.
  2. Wenn der Aufruf erfolgreich war (der Nutzer hat bereits Zugriff auf die Freundesliste gewährt), gibt die Google Play-Spieldienste ein annotiertes PlayerBuffer zurück, das die Freunde des Nutzers darstellt.
  3. Wenn der Spieler Zugriff auf die Freundesliste gewähren muss, schlägt der Aufruf mit FriendsResolutionRequiredException fehl. Es werden noch keine Dialogfelder angezeigt.

    1. Diese Ausnahme enthält eine Intent, die ein Dialogfeld auslöst, in dem der Spieler um seine Zustimmung gebeten wird. Sie können diese Intent sofort starten, um ein Dialogfeld zur Einwilligung zu öffnen. Sie können diese Intent nur einmal verwenden.
    2. Wenn das Ergebnis der Aktivität von Intent Activity.RESULT_OK ist, wurde die Einwilligung erteilt. Rufen Sie loadFriends() noch einmal auf, um die Freundesliste zurückzugeben. Wenn das Ergebnis Activity.RESULT_CANCELLED ist, hat der Nutzer nicht eingewilligt und loadFriends() gibt weiterhin FriendsResolutionRequiredException zurück.

Der folgende Code zeigt, wie du das Laden der Kontaktliste implementieren kannst:

// 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 Anfrage zur Einwilligung verarbeitet werden soll:

/** 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 innerhalb Ihres Spiels eine Ansicht des Play Spiele-Profils eines anderen Spielers anzeigen. In dieser Ansicht können Spieler Freundschaftsanfragen für den angezeigten Spieler senden und annehmen. Diese Ansicht erfordert keinen Zugriff auf die Freundesliste. Wenn Ihr Spiel ein eigenes Konzept für Spielernamen hat, das von den Play Spiele-Spieler-IDs getrennt ist, können Sie diese an die Profilansicht übergeben, sodass sie in jede Freundschaftseinladung für zusätzlichen Kontext aufgenommen werden können.

So zeigen Sie das Profil eines anderen Spielers an:

  1. Rufen Sie die Methode PlayersClient.getCompareProfileIntent() auf. Dabei handelt es sich um einen asynchronen Aufruf, der ein Task-Objekt zurückgibt.
  2. Wenn der Aufruf erfolgreich ist, geben die Google Play-Spieldienste einen Intent zurück, über den der Nutzer mit dem Profil eines anderen Spielers verglichen werden kann.
  3. 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, können diese dem API-Aufruf hinzugefügt werden. Dadurch kann Play Spiele den Alias von Spielern, die innerhalb Ihres Spiels Freundschaftsanfragen senden, von <Name Ihres Spiels> zu <game-specific-name> festlegen (Play Spiele hängt automatisch "von <Name Ihres Spiels>>" 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.
PlayGames.PlayersClient(this)
    .getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)
    .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent  intent) {
          startActivityForResult(intent, RC_SHOW_PROFILE);
          // ...
        }});