Znajomi w grach na Androida

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

Wczytaj 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, dzięki czemu proszenie o dostęp do listy znajomych i korzystanie z niej jest proste. 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 wywołanie się powiedzie (użytkownik przyznał już dostęp do listy znajomych), usługi Gier Google Play zwrócą obiekt z adnotacjami PlayerBuffer, który reprezentuje znajomych użytkownika.
  3. Jeśli gracz musi przyznać dostęp do listy znajomych, wywołanie zakończy się niepowodzeniem z kodem 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ę na przetwarzanie danych osobowych. 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 zwró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 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 przekazać je do widoku profilu, aby można było je uwzględnić w zaproszeniach do znajomych i dodać kontekst.

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