Esegui la migrazione all'accesso ai servizi per i giochi di Play v2

In questa pagina viene descritto come eseguire la migrazione del codice client dai servizi per i giochi di Play v1 alla versione 2.

Il nuovo SDK contiene quattro modifiche principali per aumentare l'efficacia dell'accesso, di cui dovresti tenere conto:

  1. L'accesso viene attivato automaticamente all'avvio del gioco. Anziché utilizzare GoogleSignInClient dell'SDK GoogleSignIn per eseguire l'accesso, puoi utilizzare GamesSignInClient.isAuthenticated() per recuperare il risultato del tentativo di accesso automatico.
  2. Per le classi di fabbrica client non sarà più necessario passare un oggetto GoogleSignInAccount. Non è possibile richiedere ambiti OAuth aggiuntivi (verranno richiesti automaticamente GAMES_LITE e SCOPE_APPFOLDER).
  3. I token di autenticazione vengono ora forniti utilizzando GamesSignInClient.requestServerSideAccess() nell'SDK dei servizi per i giochi di Play.
  4. Il metodo di uscita viene rimosso e non avremo più bisogno di un pulsante in-game per accedere o uscire dai servizi per i giochi di Play.

Inoltre, il tuo gioco subirà accessi aggiuntivi a causa dell'accesso automatico al momento del lancio. Di conseguenza, devi esaminare la tua gestione delle quote per assicurarti che il gioco non superi la quota per le richieste di accesso.

Scegli come target il nuovo Repository Maven di SDK

Se utilizzi il sistema di compilazione Gradle, puoi modificare la dipendenza dall'artefatto com.google.android.gms:play-services-games-v2:+ nel file build.gradle del modulo. Ad esempio:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

Inizializza l'SDK

Inizializza l'SDK di Play Giochi nel callback onCreate(..) della tua classe Application. Ad esempio:

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

Rimuovere le chiamate di accesso e di uscita

Se non specifichi ambiti aggiuntivi diversi da GAMES, GAMES_LIGHT e SCOPE_APPFOLDER, la migrazione del tuo caso d'uso dovrebbe essere semplice.

  1. Rimuovi le chiamate di accesso utilizzando l'API GoogleSignIn. L'accesso verrà sempre eseguito al momento del lancio del gioco. Ascolta invece il risultato del tentativo di accesso automatico utilizzando GamesSignInClient.isAuthenticated().

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. Rimuovi tutte le chiamate per l'uscita, poiché ora la gestione dell'account è inclusa nelle impostazioni del sistema operativo e dell'app Play Giochi.

  3. Se il giocatore ha eseguito l'accesso correttamente, rimuovi il pulsante di accesso a Play Giochi dal gioco. Se l'utente sceglie di non eseguire l'accesso al momento del lancio del gioco, puoi scegliere di continuare a mostrare un pulsante con l'icona di Play Giochi e attivare la procedura di accesso con GamesSignInClient.signIn().

  4. Dopo aver verificato che l'utente abbia eseguito l'accesso, puoi recuperare l'ID giocatore per identificarlo.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. Rimuovi la dipendenza dall'API GoogleSignIn, se non è più in uso.

Aggiorna i nomi delle classi client

Quando crei i clienti (ad es. LeaderboardsClient o AchievementsClient) utilizza PlayGames.getFooClient() anziché Games.getFooClient().

Richiedi accesso lato server

Quando richiedi l'accesso lato server, utilizza GamesSignInClient.requestServerSideAccess() anziché GoogleSignInAccount.getServerAuthCode().

GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
gamesSignInClient
  .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID,
                           /*forceRefreshToken=*/ false)
  .addOnCompleteListener( task -> {
    if (task.isSuccessful()) {
      String serverAuthToken = task.getResult();
      // Send authentication code to the backend game server to be
      // exchanged for an access token and used to verify the
      // player via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Rimuovi ambiti aggiuntivi

Con i servizi per i giochi di Play v2 non puoi richiedere ambiti aggiuntivi. Se devi comunque richiedere ambiti aggiuntivi, ti consigliamo di utilizzare l'SDK Accedi con Google insieme ai servizi per i giochi di Play.

Migrazione da GoogleApiClient

Per le integrazioni esistenti precedenti, il gioco potrebbe dipendere dalla variante dell'API GoogleApiClient dell'SDK dei servizi per i giochi di Play. Questo sistema è stato ritirato alla fine del 2017 e sostituito dai client "senza connessione". Per eseguire la migrazione, puoi sostituire la classe GoogleApiClient con un'equivalente "senza connessione". Dovrai inoltre seguire le indicazioni riportate sopra per eseguire la migrazione del tuo gioco dalla versione 1 alla versione 2. Di seguito è riportata una mappatura delle classi più comuni:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes