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:
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.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:
- L'accesso viene attivato automaticamente all'avvio del gioco. Anziché utilizzare
GoogleSignInClient
dell'SDK GoogleSignIn per eseguire l'accesso, puoi utilizzareGamesSignInClient.isAuthenticated()
per recuperare il risultato del tentativo di accesso automatico. - Le classi Factory client non avranno più bisogno di un oggetto
GoogleSignInAccount
trasmesso. Non è possibile richiedere ambiti OAuth aggiuntivi (verranno richiesti automaticamenteGAMES_LITE
). - I token di autenticazione vengono ora forniti utilizzando
GamesSignInClient.requestServerSideAccess()
nell'SDK dei servizi per i giochi di Play. - 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.
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(). } });
Rimuovi tutte le chiamate per uscire, poiché la gestione dell'account è ora inclusa nelle impostazioni del sistema operativo e dell'app Play Giochi.
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()
.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() } );
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