Integra le API Friends (Java)

A seguito del ritiro dell'API Google Sign-in, rimuoveremo l'SDK di Google Play Services per i giochi v1 nel 2026. Dopo febbraio 2025, non potrai pubblicare su Google Play titoli appena integrati con l'SDK v1 per i giochi. Ti consigliamo di utilizzare invece l'SDK giochi v2.
Sebbene i titoli esistenti con le integrazioni precedenti della versione 1 dei giochi continuino a funzionare per un paio di anni, ti invitiamo a eseguire la migrazione alla versione 2 a partire da giugno 2025.
Questa guida è dedicata all'utilizzo dell'SDK Play Services v1. Per informazioni sulla versione più recente dell'SDK, consulta la documentazione della versione 2.

Segui i passaggi descritti in questa guida per implementare le API Amici nel codice del tuo gioco Java.

Caricare gli amici

Puoi recuperare e visualizzare (nel gioco) un elenco di giocatori che sono amici con l'utente corrente. In qualità di utente, puoi controllare quali giochi hanno accesso all'elenco di amici. Quando recuperi l'elenco di amici, devi gestire la situazione in cui è richiesta l'autorizzazione. Tutto questo è incapsulato nell'API per semplificare la richiesta di accesso e l'utilizzo successivo dell'elenco di amici. Per caricare l'elenco di amici:

  1. Chiama il metodo PlayersClient.loadFriends(), che è una chiamata asincrona che restituisce un oggetto Task.
  2. Se la chiamata va a buon fine (l'utente ha già concesso l'accesso all'elenco di amici), Google Play Services per i giochi restituisce un PlayerBuffer annotato che rappresenta gli amici dell'utente.
  3. Se il giocatore deve concedere l'accesso all'elenco di amici, la chiamata non va a buon fine con a FriendsResolutionRequiredException. Non vengono ancora visualizzate finestre di dialogo.

    1. Questa eccezione contiene un Intent che attiva una finestra di dialogo per chiedere il consenso al player. Puoi avviare immediatamente questo Intent per aprire una finestra di dialogo per il consenso. Puoi utilizzare questo Intent una sola volta.
    2. Se il risultato dell'attività di Intent è Activity.RESULT_OK, il consenso è stato concesso. Chiama di nuovo loadFriends() per visualizzare nuovamente l'elenco di amici. Se il risultato è Activity.RESULT_CANCELLED, l'utente non ha dato il suo consenso e loadFriends() continuerà a restituire FriendsResolutionRequiredException.

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

Il seguente codice 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 visualizzare una visualizzazione del profilo di Play Giochi di un altro giocatore dal tuo gioco. Questa visualizzazione consente ai giocatori di inviare e accettare richieste di amicizia per il giocatore visualizzato. Questa visualizzazione non richiede l'accesso al elenco di amici. Inoltre, se il tuo gioco ha un proprio concetto di nomi dei giocatori distinto dagli ID giocatore di Play Giochi, puoi trasmetterli alla visualizzazione del profilo in modo che possano essere inclusi negli inviti di amicizia per fornire ulteriore contesto.

Per visualizzare il profilo di un altro giocatore:

  1. Chiama il metodo PlayersClient.getCompareProfileIntent(), che è una chiamata asincrona che restituisce un oggetto Task.
  2. Se la chiamata va a buon fine, Google Play Services per i giochi restituisce un Intent che visualizza una schermata in cui l'utente può confrontarsi con il profilo di un altro giocatore.
  3. Utilizza il pulsante Intent del passaggio precedente per avviare un'attività.
// 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);
          // ...
        }});

Se il gioco ha un nome proprio per i giocatori, questi possono essere aggiunti alla chiamata API. In questo modo, Play Giochi può impostare il nickname dei giocatori che inviano invita a a giocare dall'interno del tuo gioco su "<nome-specifico-del-gioco> da <nome-del-tuo-gioco>" (Play Giochi aggiunge automaticamente "da <nome-del-tuo-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.
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);
          // ...
        }});