Zintegruj interfejsy Friends API (Java)

Wykonaj czynności opisane w tym przewodniku, aby wdrożyć interfejsy API znajomych w kodzie gry w języku Java.

Wczytaj znajomych

Możesz pobrać (lub wyświetlić w grze) listę graczy, którzy są aktualnymi użytkownikami. Jako użytkownik możesz określić, które gry mają dostęp do listy znajomych. Po pobraniu listy znajomych musisz uwzględnić przypadek, w którym wymagane jest uprawnienie. To wszystko znajduje się w interfejsie API, co ułatwia dostęp do nich i późniejsze korzystanie z listy znajomych. Aby wczytać listę znajomych, wykonaj następujące czynności:

  1. Wywołaj metodę PlayersClient.loadFriends(), która jest wywołaniem asynchronicznym zwracającym obiekt Task.
  2. Jeśli wywołanie się powiedzie (użytkownik uzyskał już dostęp do listy znajomych), Usługi gier Google Play zwracają adnotację PlayerBuffer, które symbolizuje znajomych użytkownika.
  3. Jeśli gracz musi przyznać dostęp do listy znajomych, wywołanie zakończy się niepowodzeniem z FriendsResolutionRequiredException. Nie są jeszcze wyświetlane żadne okna.

    1. Ten wyjątek zawiera element Intent wywołujący okno z prośbą o zgodę na dostęp. Możesz natychmiast uruchomić to narzędzie Intent, aby otworzyć okno z prośbą o zgodę. Intent może zostać użyty tylko raz.
    2. Jeśli działanie Intent zostało wykonane jako Activity.RESULT_OK, użytkownik wyraził zgodę. Zadzwoń jeszcze raz pod numer loadFriends(), aby zwrócić listę znajomych. Jeśli wynik to Activity.RESULT_CANCELLED, użytkownik nie wyraził zgody, a loadFriends() będzie nadal zwracać wartość FriendsResolutionRequiredException.

Ten kod pokazuje, jak wdrożyć ładowanie listy znajomych:

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

Ten kod pokazuje, co zrobić w przypadku otrzymania prośby o zgodę:

/** 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.
    }
  }
}

Wyświetlanie profilu innego gracza

W grze możesz wyświetlić widok profilu innego gracza. Ten widok umożliwia graczom wysyłanie i akceptowanie zaproszeń do znajomych. Ten widok nie wymaga dostępu do listy znajomych. Poza tym, jeśli w grze występują inne nazwy graczy niż identyfikatory gracza w Grach Play, możesz je przekazać do widoku profilu, żeby można było uwzględnić je w dowolnych zaproszeniach znajomych.

Aby wyświetlić profil innego gracza, wykonaj te czynności:

  1. Wywołaj metodę PlayersClient.getCompareProfileIntent(), która jest wywołaniem asynchronicznym zwracającym obiekt Task.
  2. Jeśli wywołanie jest udane, Usługi gier Google Play zwracają intencję, która wyświetla ekran pozwalający użytkownikowi na porównywanie go z profilem innego gracza.
  3. Użyj aplikacji Intent z poprzedniego kroku, aby rozpocząć aktywność.
// 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);
          // ...
        }});

Jeśli gra ma własną nazwę w grach, można ją dodać do wywołania interfejsu API. Dzięki temu Gry Play będą mogły ustawić pseudonimy graczy, którzy wysyłają zaproszenia z grze ze znajomych na <nazwa-gry> z <<nazwa-gry>" (gry te automatycznie dołączają tekst „z <nazwa-gry>”):

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