Utilizza la procedura descritta in questa guida per implementare le API Friends nel codice del gioco Java.
Carica amici
Puoi recuperare e mostrare (nel gioco) un elenco di giocatori che sono amici dell'utente corrente. In qualità di utente, puoi controllare quali giochi hanno accesso all'elenco di amici. Quando recuperi l'elenco di amici, devi gestire il caso in cui sia necessaria l'autorizzazione. Tutto ciò è incapsulato nell'API per rendere la richiesta di accesso e, in seguito, l'utilizzo dell'elenco di amici è un'attività semplice. Per caricare l'elenco di amici, procedi nel seguente modo:
- Chiama il metodo
PlayersClient.loadFriends()
, che è una chiamata asincrona che restituisce un oggettoTask
. - Se la chiamata va a buon fine (l'utente ha già concesso l'accesso all'elenco di amici), Google Play Giochi restituisce un'annotazione
PlayerBuffer
che rappresenta gli amici dell'utente. Se il player deve concedere l'accesso all'elenco degli amici, la chiamata non riesce con
FriendsResolutionRequiredException
. Nessuna finestra di dialogo mostrata.- Questa eccezione contiene un
Intent
che attiva una finestra di dialogo per chiedere il consenso al player. Puoi avviare subito questoIntent
per aprire una finestra di dialogo per il consenso. Puoi utilizzare questoIntent
solo una volta. Se il risultato dell'attività di
Intent
èActivity.RESULT_OK
, significa che il consenso è stato concesso. RichiamaloadFriends()
per restituire l'elenco degli amici. Se il risultato èActivity.RESULT_CANCELLED
, l'utente non ha dato il suo consenso eloadFriends()
continuerà a restituireFriendsResolutionRequiredException
.
- Questa eccezione contiene un
Il seguente codice mostra come implementare il caricamento dell'elenco di amici:
// 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;
}
Il codice seguente mostra come gestire il risultato della richiesta di consenso:
/** 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.
}
}
}
Visualizzare il profilo di un altro giocatore
Puoi mostrare una visualizzazione del profilo Play Giochi di un altro giocatore all'interno del tuo gioco. Questa visualizzazione consente ai giocatori di inviare e accettare gli inviti degli amici per il giocatore visualizzato. Questa visualizzazione non richiede l'accesso all'elenco di amici. Inoltre, se il gioco ha un proprio concetto di nomi dei giocatori separati dagli ID dei giocatori di Play Giochi, puoi trasmetterli alla visualizzazione del profilo in modo che possano essere inclusi in qualsiasi invito di amicizia per contesto aggiuntivo.
Per mostrare il profilo di un altro giocatore, procedi nel seguente modo:
- Chiama il metodo
PlayersClient.getCompareProfileIntent()
, che è una chiamata asincrona che restituisce un oggettoTask
. - Se la chiamata ha esito positivo, i servizi per i giochi di Google Play restituiscono un intent che mostra una schermata in cui l'utente può confrontarsi con il profilo di un altro giocatore.
- Usa
Intent
del passaggio precedente per avviare un'attività.
// 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);
// ...
}});
Se il gioco ha un proprio nome per i giocatori, è possibile aggiungerli alla chiamata API. Consente a Play Giochi di impostare il nickname dei giocatori che inviano inviti degli amici dal tuo gioco a "<nome-gioco-specifico> da <nome-gioco>" (Play Giochi aggiunge automaticamente "da <nome-gioco>"):
// 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);
// ...
}});