Freunde in Android-Spielen

In dieser Anleitung wird beschrieben, wie Sie die Friends-APIs in Android Studio-Projekten verwenden.

Freunde laden

Sie können (im Spiel) eine Liste der Spieler abrufen und anzeigen lassen, die mit dem aktuellen Nutzer befreundet sind. Nutzer können steuern, welche Spiele auf die Freundesliste zugreifen dürfen. Für den Abruf der Freundesliste müssen Sie den Fall berücksichtigen, dass eine Berechtigung erforderlich ist. All dies ist in der API enthalten, um die Anforderung des Zugriffs und die anschließende Verwendung der Freundesliste zu vereinfachen. So laden Sie die Freundesliste:

  1. Rufen Sie die Methode PlayersClient.loadFriends() auf. Dies ist ein asynchroner Aufruf, der ein Task-Objekt zurückgibt.
  2. Wenn der Aufruf erfolgreich ist (der Nutzer hat bereits Zugriff auf die Freundesliste gewährt), geben die Google Play Games-Dienste einen kommentierten PlayerBuffer zurück, der 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 einen Intent, der ein Dialogfeld auslöst, in dem der Spieler um Einwilligung gebeten wird. Sie können diesen Intent sofort aufrufen, um einen Dialog zur Einholung von Einwilligungen zu öffnen. Dieser Intent kann nur einmal verwendet werden.
    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 keine Einwilligung erteilt und loadFriends() gibt weiterhin FriendsResolutionRequiredException zurück.

Die Freundesliste kann mit dem folgenden Code geladen werden:

// 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;
}

Das Ergebnis der Anforderung der Einwilligungserklärung kann mit dem folgenden Code verarbeitet werden:

/** 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 Play Games-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 Games-Spieler-IDs unterscheiden, können Sie diese an die Profilansicht übergeben, damit sie in Freundeseinladungen als zusätzlicher Kontext aufgenommen werden können.

So rufen Sie das Profil eines anderen Spielers auf:

  1. Rufen Sie die Methode PlayersClient.getCompareProfileIntent() auf. Dies ist ein asynchroner Aufruf, der ein Task-Objekt zurückgibt.
  2. Wenn der Aufruf erfolgreich ist, geben die Google Play Games-Dienste einen Intent zurück, mit dem ein Bildschirm angezeigt wird, auf dem sich der Nutzer mit dem Profil eines anderen Spielers vergleichen kann.
  3. Verwenden Sie den 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 bei Spielern einen eigenen Namen hat, kann dieser dem API-Aufruf hinzugefügt werden. Dadurch kann Play Games den Spitznamen von Spielern, die Freundschaftseinladungen aus Ihrem Spiel senden, auf „<game-specific-name> from <your-game-name>“ festlegen. Play Games hängt automatisch „from <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 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);
          // ...
        }});