Accesso per i giochi Android

Per poter accedere alla funzionalità dei servizi per i giochi di Google Play, il gioco deve fornire l'account del giocatore che ha eseguito l'accesso. Questa documentazione descrive come implementare un'esperienza di accesso senza interruzioni nel tuo gioco.

L'SDK dei servizi per i giochi di Play v2 offre una serie di miglioramenti che aumentano il numero di utenti che hanno eseguito l'accesso al tuo gioco e semplificano lo sviluppo:

  • Miglioramenti per gli utenti:
    • Dopo aver selezionato un account predefinito, gli utenti vengono collegati senza dover interagire con una richiesta.
    • Gli utenti non devono più scaricare l'app Play Giochi per accedere con i servizi per i giochi di Play o creare un nuovo account.
    • Ora gli utenti possono gestire i propri account dei servizi per i giochi di Play per più giochi da un'unica pagina.
  • Miglioramenti per gli sviluppatori:
    • Il codice client non deve più gestire il flusso di accesso o disconnessione, poiché l'accesso viene attivato automaticamente all'inizio del gioco e la gestione dell'account viene gestita nelle impostazioni del sistema operativo.

Integrazione di nuovi clienti

Questa sezione mostra come eseguire l'integrazione di un nuovo client con Accedi ai servizi per i giochi di Play v2.

Aggiungi la dipendenza

Aggiungi la dipendenza dell'SDK dei servizi per i giochi di Play al file build.gradle di livello principale dell'app. Se utilizzi Gradle, puoi aggiungere o aggiornare la dipendenza in questo modo:

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

Definisci l'ID progetto

Per aggiungere alla tua app l'ID progetto dell'SDK dei servizi per i giochi di Play, svolgi i passaggi che seguono:

  1. Nel file AndroidManifest.xml dell'app, aggiungi i seguenti elementi e attributi <meta-data> all'elemento <application>:

    <manifest>
      <application>
        <meta-data android:name="com.google.android.gms.games.APP_ID"
                   android:value="@string/game_services_project_id"/>
      </application>
    </manifest>
    

    Definisci il riferimento della risorsa Stringa @string/game_services_project_id utilizzando l'ID progetto dei servizi di gioco dei tuoi giochi come valore. Puoi trovare l'ID progetto dei servizi per i giochi sotto il nome del gioco nella pagina Configurazione di Google Play Console.

  2. Nel file res/values/strings.xml, aggiungi un riferimento di risorsa stringa e imposta l'ID progetto come valore. In Google Play Console, puoi trovare l'ID progetto sotto il nome del gioco nella pagina Configurazione. Ecco alcuni esempi:

    <!-- res/values/strings.xml -->
    <resources>
      <!-- Replace 0000000000 with your game’s project id. Example value shown above.  -->
      <string translatable="false"  name="game_services_project_id"> 0000000000 </string>
    </resources>
    

Inizializzare l'SDK

Inizializza l'SDK Play Giochi nel callback onCreate(..) del tuo corso Application.

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

...

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

Ricevere i risultati dell'accesso

All'avvio, il gioco proverà sempre ad accedere all'utente. Per autenticare l'utente, devi verificare che abbia eseguito l'accesso correttamente e poi ottenere il suo ID giocatore.

Per verificare il tentativo di accesso, chiama GamesSignInClient.isAuthenticated() e utilizza addOnCompleteListener per recuperare i risultati. Ecco alcuni esempi:

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

Se l'utente sceglie di non eseguire l'accesso all'avvio del gioco, se lo desideri puoi scegliere di continuare a mostrare un pulsante con l'icona di Play Giochi e tentare di accedere nuovamente all'utente chiamando GamesSignInClient.signIn() se l'utente preme il pulsante.

Dopo aver verificato che l'utente abbia eseguito l'accesso, puoi recuperare l'ID giocatore per identificare l'utente. Ecco alcuni esempi:

PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
    // Get PlayerID with mTask.getResult().getPlayerId()
  }
);

Esegui la migrazione ad Accedi ai servizi per i giochi di Play v2

In questa sezione 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 essere a conoscenza:

  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. Le classi Factory client non avranno più bisogno di un oggetto GoogleSignInAccount trasmesso. Non è possibile richiedere ambiti OAuth aggiuntivi (verranno richiesti automaticamente GAMES_LITE).
  3. I token di autenticazione vengono ora forniti utilizzando GamesSignInClient.requestServerSideAccess() nell'SDK dei servizi per i giochi di Play.
  4. Il metodo di disconnessione viene rimosso e non avremo più bisogno di un pulsante in-game per accedere o uscire dai servizi per i giochi di Play.

Inoltre, al momento dell'avvio del gioco, verranno eseguiti accessi aggiuntivi dovuti all'accesso automatico. Di conseguenza, devi controllare la tua gestione delle quote per assicurarti che il gioco non superi la quota di richieste di accesso.

Scegli come target il nuovo Repository Maven dell'SDK

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

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

Inizializzare l'SDK

Inizializza l'SDK Play Giochi nel callback onCreate(..) della tua classe Application. Ecco alcuni esempi:

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

...

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

Rimuovere le chiamate di accesso e di disconnessione

Se non specifichi ambiti aggiuntivi, la migrazione del caso d'uso dovrebbe essere semplice.

  1. Rimuovere le chiamate di accesso utilizzando l'API GoogleSignIn. L'accesso verrà sempre eseguito al 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 uscire, poiché la gestione dell'account è ora 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 all'avvio 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 client (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 ancora 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 software è 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 quindi anche seguire le indicazioni sopra riportate per eseguire la migrazione del tuo gioco dalla v1 alla v2. Di seguito è riportata 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