Используйте шаги, описанные в этом руководстве, для реализации API-интерфейсов Friends в коде вашей игры на Java.
Загрузить друзей
Вы можете получить и отобразить (в игре) список игроков, которые являются друзьями текущего пользователя. Пользователь может контролировать, какие игры имеют доступ к списку друзей. Когда вы получаете список друзей, вы должны обработать случай, когда требуется разрешение. Все это инкапсулировано в API, чтобы сделать запрос доступа и последующее использование списка друзей простой задачей. Чтобы загрузить список друзей, выполните следующие действия:
- Вызовите метод
PlayersClient.loadFriends()
, который является асинхронным вызовом, возвращающим объектTask
. - Если вызов успешен (пользователь уже предоставил доступ к списку друзей), игровые сервисы Google Play возвращают аннотированный
PlayerBuffer
, который представляет друзей пользователя. Если игроку необходимо предоставить доступ к списку друзей, вызов завершается с ошибкой
FriendsResolutionRequiredException
. Диалоги пока не отображаются.- Это исключение содержит
Intent
, которое запускает диалоговое окно для запроса согласия игрока. Вы можете запустить этоIntent
немедленно, чтобы открыть диалоговое окно согласия. Вы можете использовать этоIntent
только один раз. Если результатом активности
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, вы можете передать их в представление профиля, чтобы их можно было включать в любые приглашения друзей для дополнительного контекста.
Чтобы показать профиль другого игрока, выполните следующие действия:
- Вызовите метод
PlayersClient.getCompareProfileIntent()
, который является асинхронным вызовом, возвращающим объектTask
. - Если вызов успешен, игровые сервисы Google Play возвращают Intent, который отображает экран, на котором пользователь может сравнить себя с профилем другого игрока.
- Используйте
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 автоматически добавляет «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.
PlayGames.PlayersClient(this)
.getCompareProfileIntentWithAlternativeNameHints(otherPlayerId, otherPlayerInGameName, currentPlayerInGameName)
.addOnSuccessListener(new OnSuccessListener<Intent>() {
@Override
public void onSuccess(Intent intent) {
startActivityForResult(intent, RC_SHOW_PROFILE);
// ...
}});