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

Используйте шаги, описанные в этом руководстве, для реализации API-интерфейсов Friends в коде вашей игры на 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.
Games.getPlayersClient(this, GoogleSignIn.getLastSignedInAccount(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.
Games.getPlayersClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .getCompareProfileIntent(otherPlayerId)
    .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent  intent) {
          startActivityForResult(intent, RC_SHOW_PROFILE);
          // ...
        }});

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

// 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.
Games.PlayersClient(this, GoogleSignIn.getLastSignedInAccount(this))
    .getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)
    .addOnSuccessListener(new OnSuccessListener<Intent>() {
        @Override
        public void onSuccess(Intent  intent) {
          startActivityForResult(intent, RC_SHOW_PROFILE);
          // ...
        }});