Freunde in Android-Spielen

In diesem Leitfaden wird beschrieben, wie du die Friends APIs in Android Studio-Projekten verwendest.

Freunde laden

Sie können eine Liste der Spieler, die mit dem aktuellen Nutzer befreundet sind, im Spiel abrufen und anzeigen. Als Nutzer können Sie festlegen, welche Spiele Zugriff auf die Freundesliste haben. Beim Abrufen der Freundesliste ist eine entsprechende Berechtigung erforderlich. All dies wird in der API gekapselt, damit die Zugriffsanfrage und anschließende Verwendung der Freundesliste eine einfache Aufgabe ist. So lädst du 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), gibt die Google Play-Spieldienste ein kommentiertes 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 einem FriendsResolutionRequiredException fehl. Es werden noch keine Dialogfelder angezeigt.

    1. Diese Ausnahme enthält ein Intent, das ein Dialogfeld auslöst, in dem der Player um Einwilligung gebeten wird. Sie können diese Intent sofort starten, um einen Dialog zur Einholung von Einwilligungen zu öffnen. Du kannst dieses Gerät (Intent) nur einmal verwenden.
    2. Wenn das Ergebnis der Aktivität von Intent Activity.RESULT_OK ist, wurde die Einwilligung erteilt. Rufe 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 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 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 innerhalb Ihres Spiels anzeigen lassen. In dieser Ansicht können Spieler Freundschaftsanfragen für den angezeigten Spieler senden und annehmen. Für diese Ansicht ist kein Zugriff auf die Freundesliste erforderlich. Wenn Ihr Spiel außerdem ein eigenes Konzept von Spielernamen hat, die von den Play Spiele-Spieler-IDs getrennt sind, können Sie diese an die Profilansicht weitergeben, damit sie in Freundschaftseinladungen für zusätzlichen Kontext hinzugefügt 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, gibt die Google Play-Spieldienste einen Intent zurück, der einen Bildschirm anzeigt, auf dem der Nutzer sich mit dem Profil eines anderen Spielers vergleichen kann.
  3. Verwenden Sie die 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 Freundschaftsanfragen innerhalb Ihres Spiels senden, von <Name Ihres Spiels> zu "<Name des Spiels>" von <Name Ihres Spiels> festlegen. In Play Spiele wird automatisch "von <Name Ihres Spiels>" angehängt:

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