Friends APIs einbinden (Java)

Folge den Schritten in diesem Leitfaden, um die Friends APIs in deinem Java-Spielcode zu implementieren.

Freunde laden

Du kannst eine Liste deiner Freunde abrufen und im Spiel anzeigen lassen mit dem aktuellen Nutzer. Als Nutzer können Sie steuern, welche Spiele auf die Freundesliste zugreifen. Wenn du die Freundesliste abrufst, musst du wenn eine Berechtigung erforderlich ist. All dies ist in der API gekapselt, ist es ganz einfach, den Zugriff anzufordern und die Freundesliste zu verwenden. . So lädst du die Freundesliste:

  1. Rufen Sie die Methode PlayersClient.loadFriends() -Methode, bei der es sich um einen asynchronen Aufruf handelt, der eine Task-Objekt.
  2. Wenn der Anruf erfolgreich ist (der Nutzer hat den Freunden bereits Zugriff gewährt) geben die Google Play-Spieldienste eine kommentierte PlayerBuffer die die Freunde des Nutzers darstellt.
  3. Wenn der Spieler Zugriff auf die Freundesliste gewähren muss, schlägt der Aufruf fehl: eine FriendsResolutionRequiredException Es werden noch keine Dialogfelder angezeigt.

    1. Diese Ausnahme enthält ein Intent-Element, das einen Dialog auslöst, in dem Sie gefragt werden, um die Einwilligung des Players einzuholen. Sie können diese Intent sofort starten, um ein Dialog zur Einholung von Einwilligungen. Sie können dieses Gerät (Intent) nur einmal verwenden.
    2. Wenn das Ergebnis der Aktivität von Intent Activity.RESULT_OK lautet, dann: Einwilligung erteilt wurde. Rufe loadFriends() noch einmal an, um die Freunde zurückzugeben Liste. Wenn das Ergebnis Activity.RESULT_CANCELLED lautet, hat der Nutzer nicht einwilligen und loadFriends() wird weiterhin zurückkehren FriendsResolutionRequiredException

Der folgende Code zeigt, 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.
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 mit dem Ergebnis der Einwilligungsanfrage umgegangen 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 eine Ansicht des Play Spiele-Profils eines anderen Spielers aus in deinem Spiel. In dieser Ansicht können Spieler Einladungen an Freunde senden und annehmen für den angezeigten Player. Diese Ansicht benötigt keinen Zugriff auf die Freunde Liste. Wenn es in Ihrem Spiel eigene Spielernamen gibt, aus den Play Spiele-Spieler-IDs können Sie diese an die Profilansicht weitergeben, damit sie in jede Freundschaftseinladung aufgenommen werden können, um zusätzlichen Kontext zu erhalten.

So blenden Sie das Profil eines anderen Spielers ein:

  1. Rufen Sie die Methode PlayersClient.getCompareProfileIntent() -Methode, bei der es sich um einen asynchronen Aufruf handelt, der eine Task-Objekt.
  2. Wenn der Aufruf erfolgreich ist, geben die Google Play-Spieldienste einen Intent zurück, zeigt einen Bildschirm an, auf dem die Nutzenden sich mit einem anderen des Spielerprofils.
  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 festlegen, die deine Einladungen aus deinem Spiel zu „<game-specific-name>“ von <Name-Ihres-Spiels>“ (Play Spiele fügt automatisch "aus &lt;your-game-name&gt;&quot;):

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