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

Questa guida descrive come eseguire la migrazione del codice client dalla versione 1 di Play Games Services alla versione 2.

Il nuovo SDK contiene quattro modifiche principali per aumentare il successo degli accessi che devi conoscere:

  1. L'accesso viene attivato automaticamente al momento dell'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. Le classi Client Factory non avranno più bisogno di un oggetto GoogleSignInAccount tramesso. Non è possibile richiedere ambiti OAuth aggiuntivi (GAMES_LITE verrà richiesto automaticamente).
  3. Ora i token di autenticazione vengono forniti utilizzando GamesSignInClient.requestServerSideAccess() all'interno dell'SDK Play Games Services.
  4. Il metodo di disconnessione viene rimosso e non sarà più necessario un pulsante in-game per accedere o uscire da Play Giochi.

Inoltre, al momento del lancio del gioco verranno eseguiti accessi aggiuntivi a causa dell'accesso automatico. Di conseguenza, ti consigliamo di rivedere la gestione delle quote per assicurarti che il tuo gioco non superi la quota di richieste di accesso.

Scegli come target il nuovo repository Maven dell'SDK

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

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

Inizializza l'SDK

Inizializza l'SDK Play Games 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, la migrazione del caso d'uso dovrebbe essere semplice.

  1. Rimuovi le chiamate di accesso utilizzando l'API GoogleSignIn. L'accesso verrà sempre eseguito al momento dell'avvio 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 uscire, poiché la gestione dell'account ora è contenuta nelle impostazioni dell'OS e dell'app Play Giochi.

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

  4. Dopo aver verificato che l'utente ha 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 client (ad es. LeaderboardsClient o AchievementsClient), utilizza PlayGames.getFooClient() anziché Games.getFooClient().

Richiedi l'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 with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

Rimuovi gli ambiti aggiuntivi

Con la versione 2 di Play Services non puoi richiedere altri ambiti. Se devi ancora richiedere ambiti aggiuntivi, ti consigliamo di utilizzare l'SDK di Accedi con Google insieme a Play Services per i giochi.

Migrazione da GoogleApiClient

Per le integrazioni esistenti precedenti, il tuo gioco potrebbe dipendere dalla variante dell'API GoogleApiClient dell'SDK dei servizi per i giochi di Play. Questo protocollo è stato ritirato alla fine del 2017 e sostituito da client "senza connessione". Per eseguire la migrazione, puoi sostituire la classe GoogleApiClient con un equivalente "senza connessione". Dovrai inoltre seguire le indicazioni riportate in questa pagina per eseguire la migrazione del tuo gioco dalla versione 1 alla versione 2. Ecco una mappatura delle classi 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