Integra le API Friends (Java)

Segui la procedura descritta in questa guida per implementare le API Friends nel tuo codice di gioco Java.

Carica amici

Puoi recuperare e visualizzare (nel gioco) un elenco di giocatori che sono amici con l'utente corrente. Come utente, puoi controllare quali giochi hanno l'accesso all'elenco di amici. Quando recuperi l'elenco di amici, devi gestire nei casi in cui è richiesta l'autorizzazione. Tutto questo è incapsulato nell'API rendere semplice la richiesta di accesso e successivamente l'utilizzo dell'elenco di amici dell'attività. Per caricare l'elenco di amici, procedi nel seguente modo:

  1. Chiama il PlayersClient.loadFriends() , ovvero una chiamata asincrona che restituisce un Task.
  2. Se la chiamata ha esito positivo (l'utente ha già concesso l'accesso agli amici ), i servizi per i giochi di Google Play restituisce un elenco di PlayerBuffer 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 un FriendsResolutionRequiredException Ancora nessuna finestra di dialogo mostrata.

    1. Questa eccezione contiene un Intent che attiva una finestra di dialogo per chiedere al per richiedere il consenso. Puoi avviare subito questo Intent per aprire un finestra di dialogo per il consenso. Puoi usare questo Intent solo una volta.
    2. Se il risultato dell'attività di Intent è Activity.RESULT_OK: sia stato concesso. Chiama di nuovo loadFriends() per restituire gli amici dall'elenco di lettura. Se il risultato è Activity.RESULT_CANCELLED, l'utente ha eseguito non acconsentire 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 mostrare la visualizzazione del profilo Play Giochi di un altro giocatore da all'interno del gioco. Questa visualizzazione consente ai giocatori di inviare e accettare inviti di amici per il player visualizzato. Questa visualizzazione non richiede l'accesso agli amici dall'elenco di lettura. Inoltre, se il tuo gioco ha un concetto specifico di nomi dei giocatori, dagli ID giocatore di Play Giochi, puoi trasmetterli alla visualizzazione del profilo in modo da poterli includere in qualsiasi invito di amicizia per ulteriore contesto.

Per mostrare il profilo di un altro giocatore:

  1. Chiama il PlayersClient.getCompareProfileIntent() , ovvero una chiamata asincrona che restituisce un Task.
  2. 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 un altro profilo del giocatore.
  3. Usa la 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 proprio nome per i giocatori, questi possono essere aggiunti alla chiamata API. Consente a Play Giochi di impostare il nickname dei giocatori che inviano amici inviti dall'interno del tuo gioco a "<nome-specifico del gioco> da <nome-gioco>" Play Giochi aggiunge automaticamente "da &lt;your-game-name&gt;&quot;):

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