Интегрируйте API друзей (Java)

Используйте шаги, описанные в этом руководстве, для реализации API-интерфейсов друзей в коде вашей игры Java.

Загрузить друзей

Вы можете получить и отобразить (в игре) список игроков, которые являются друзьями текущего пользователя. Как пользователь, вы можете контролировать, какие игры имеют доступ к списку друзей. Когда вы получаете список друзей, вы должны обработать случай, когда требуется разрешение. Все это инкапсулировано в API, чтобы сделать запрос доступа и последующее использование списка друзей простой задачей. Чтобы загрузить список друзей, выполните следующие действия:

  1. Вызовите метод PlayersClient.loadFriends() , который представляет собой асинхронный вызов, возвращающий объект Task .
  2. Если вызов выполнен успешно (пользователь уже предоставил доступ к списку друзей), игровые сервисы Google Play возвращают аннотированный PlayerBuffer , представляющий друзей пользователя.
  3. Если игроку необходимо предоставить доступ к списку друзей, вызов завершится с ошибкой FriendsResolutionRequiredException . Диалоги пока не отображаются.

    1. Это исключение содержит Intent , которое запускает диалоговое окно с запросом согласия игрока. Вы можете немедленно запустить это Intent , чтобы открыть диалоговое окно согласия. Вы можете использовать это Intent только один раз.
    2. Если результатом действия Intent является Activity.RESULT_OK , согласие было предоставлено. Вызовите loadFriends() еще раз, чтобы вернуть список друзей. Если результатом является Activity.RESULT_CANCELLED , пользователь не дал согласия, и loadFriends() продолжит возвращать FriendsResolutionRequiredException .

Следующий код показывает, как реализовать загрузку списка друзей:

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

В следующем коде показано, как обрабатывать результат запроса согласия:

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

Посмотреть профиль другого игрока

Вы можете отобразить профиль другого игрока в Play Играх из своей игры. Этот вид позволяет игрокам отправлять и принимать приглашения в друзья для просматриваемого игрока. Этот вид не требует доступа к списку друзей. Кроме того, если в вашей игре используется собственная концепция имен игроков, отделенная от идентификаторов игроков Play Games, вы можете передать их в представление профиля, чтобы их можно было включить в любые приглашения в друзья для дополнительного контекста.

Чтобы показать профиль другого игрока, выполните следующие действия:

  1. Вызовите метод PlayersClient.getCompareProfileIntent() , который представляет собой асинхронный вызов, возвращающий объект Task .
  2. Если вызов успешен, игровые сервисы Google Play возвращают Intent, который отображает экран, на котором пользователь может сравнить себя с профилем другого игрока.
  3. Используйте Intent из предыдущего шага, чтобы начать действие.
// 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);
          // ...
        }});

Если в игре есть собственное имя для игроков, их можно добавить в вызов API. Это позволяет Play Games устанавливать псевдонимы игроков, которые отправляют приглашения в друзья из вашей игры, на «<название в игре> из <вашего-имени-игры>» (Play Games автоматически добавляет «из <вашего-имени-игры>»). "):

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