Aby zaimplementować interfejsy API dotyczące znajomych w kodzie gry w języku Java, wykonaj czynności opisane w tym przewodniku.
Ładowanie znajomych
Możesz pobrać i wyświetlić (w grze) listę graczy, którzy są znajomymi obecnego użytkownika. Użytkownik może kontrolować, które gry mają dostęp do listy znajomych. Podczas pobierania listy znajomych musisz obsłużyć przypadek, w którym wymagane jest pozwolenie. Wszystko to jest zaszyte w interfejsie API, aby żądanie dostępu i następnie korzystanie z listy znajomych było proste. Aby załadować listę znajomych:
- Wywołaj metodę
PlayersClient.loadFriends()
, która jest wywołaniem asynchronicznym zwracającym obiektTask
. - Jeśli wywołanie zakończy się powodzeniem (użytkownik już przyznał dostęp do listy znajomych), usługi Google Play Games zwraca adnotowaną
PlayerBuffer
, która reprezentuje listę znajomych użytkownika. Jeśli gracz musi przyznać dostęp do listy znajomych, wywołanie zakończy się niepowodzeniem z komunikatem
FriendsResolutionRequiredException
. Nie wyświetlają się jeszcze żadne dialogi.- To wyjątek zawierający
Intent
, który uruchamia okno z prośbą o zgodę na odtwarzanie. Możesz od razu uruchomić tęIntent
, aby otworzyć okno zgody. Z tejIntent
możesz skorzystać tylko raz. Jeśli wynik działania
Intent
toActivity.RESULT_OK
, oznacza to, że użytkownik wyraził zgodę. Aby powrócić do listy znajomych, ponownie wybierzloadFriends()
. Jeśli wynik toActivity.RESULT_CANCELLED
, użytkownik nie wyraził zgody, a wartośćloadFriends()
będzie nadal zwracać wartośćFriendsResolutionRequiredException
.
- To wyjątek zawierający
Poniższy kod pokazuje, jak zaimplementować wczytywanie listy 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.
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;
}
Ten kod pokazuje, jak obsłużyć 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. Ten widok umożliwia graczom wysyłanie i akceptowanie zaproszeń do znajomych w przypadku wyświetlanego gracza. Ten widok nie wymaga dostępu do listy znajomych. Jeśli w Twojej grze występuje osobna koncepcja nazw graczy niż identyfikatory graczy w Grach Play, możesz przekazać te nazwy do widoku profilu, aby można było uwzględnić je w zaproszeniu do dodania znajomego jako dodatkowy kontekst.
Aby wyświetlić profil innego gracza:
- Wywołaj metodę
PlayersClient.getCompareProfileIntent()
, która jest wywołaniem asynchronicznym zwracającym obiektTask
. - Jeśli wywołanie się powiedzie, usługi Gry Google Play zwrócą intencję, która wyświetli ekran, na którym użytkownik może porównać swój profil z profilem innego gracza.
- Aby rozpocząć aktywność, użyj
Intent
z poprzedniego kroku.
// 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);
// ...
}});
Jeśli gra ma własną nazwę dla graczy, można ją dodać do wywołania interfejsu API. Dzięki temu Google Play Games może ustawić pseudonimy graczy, którzy wysyłają zaproszenia do grona znajomych z Twojej gry, na „<game-specific-name> z <your-game-name>” (Google Play Games automatycznie dodaje „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 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);
// ...
}});