Znajomi w grach na Androida

Ten przewodnik opisuje, jak używać interfejsów API Friends w projektach Android Studio.

Wczytywanie znajomych

Możesz pobrać i wyświetlić (w grze) listę graczy, którzy są znajomymi obecnego użytkownika. Jako użytkownik możesz kontrolować, które gry mają dostęp do listy znajomych. Podczas pobierania listy znajomych musisz obsłużyć przypadek, w którym wymagane jest uprawnienie. Wszystko to jest zawarte w interfejsie API, aby ułatwić proszenie o dostęp do listy znajomych i korzystanie z niej. Aby wczytać listę znajomych, wykonaj te czynności:

  1. Wywołaj metodę PlayersClient.loadFriends(), która jest wywołaniem asynchronicznym zwracającym obiekt Task.
  2. Jeśli połączenie się powiedzie (użytkownik przyznał już dostęp do listy znajomych), Usługi gier Google Play zwracają adnotowany PlayerBuffer, który reprezentuje znajomych użytkownika.
  3. Jeśli gracz musi przyznać dostęp do listy znajomych, wywołanie zakończy się niepowodzeniem i zostanie zwrócony kod błędu FriendsResolutionRequiredException. Nie wyświetlono jeszcze żadnych okien.

    1. Ten wyjątek zawiera Intent, który wywołuje okno dialogowe z prośbą o zgodę użytkownika. Możesz od razu uruchomić tę Intent, aby otworzyć okno z prośbą o zgodę. Możesz użyć tego Intent tylko raz.
    2. Jeśli wynikiem działania Intent jest Activity.RESULT_OK, oznacza to, że użytkownik wyraził zgodę. Zadzwoń ponownie pod numer loadFriends(), aby przywrócić listę znajomych. Jeśli wynikiem jest Activity.RESULT_CANCELLED, użytkownik nie wyraził zgody, a loadFriends() będzie nadal zwracać wartość FriendsResolutionRequiredException.

      .

Poniższy kod pokazuje, jak wczytać listę 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;
}

Poniższy kod pokazuje, jak obsługiwać wynik żądania zgody:

/** 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 swojej grze możesz wyświetlić profil innego gracza w Grach Play. W tym widoku gracze mogą wysyłać i akceptować zaproszenia do znajomych w przypadku oglądanego gracza. Ten widok nie wymaga dostępu do listy znajomych. Jeśli w grze są używane nazwy graczy inne niż identyfikatory gracza w Grach Play, możesz przekazywać je do widoku profilu, aby można było je uwzględniać w zaproszeniach do znajomych w celu uzyskania dodatkowego kontekstu.

Aby wyświetlić profil innego gracza:

  1. Wywołaj metodę PlayersClient.getCompareProfileIntent(), która jest wywołaniem asynchronicznym zwracającym obiekt Task.
  2. Jeśli wywołanie się powiedzie, Usługi gier Google Play zwrócą Intent, który wyświetli ekran, na którym użytkownik może porównać swój profil z profilem innego gracza.
  3. Użyj 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ę graczy, można ją dodać do wywołania interfejsu API. Dzięki temu Usługi Play Games mogą ustawiać pseudonimy graczy, którzy wysyłają zaproszenia do grona znajomych z poziomu Twojej gry, na „<game-specific-name> z <your-game-name>” (Usługi Play Games automatycznie dodają „z <your-game-name>”):

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