Puoi utilizzare i Servizi per i giochi di Google Play per far accedere i giocatori a un gioco Android sviluppato su Firebase. Per usare Firebase per accedere ai servizi di Google Play Giochi,
prima accedi con il giocatore con Google Play Giochi e richiedi un codice di autorizzazione
OAuth 2.0. Quindi, passa il codice di autorizzazione a PlayGamesAuthProvider
per
generare una credenziale Firebase da utilizzare per l'autenticazione con Firebase.
Prima di iniziare
Configurare il progetto Android
Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android.
Nel file Gradle del modulo (a livello di app) (di solito
<project>/<app-module>/build.gradle.kts
o<project>/<app-module>/build.gradle
), aggiungi la dipendenza per la libreria Firebase Authentication per Android. Ti consigliamo di utilizzare Firebase Android BoM per controllare la versione della libreria.Inoltre, durante la configurazione di Firebase Authentication, devi aggiungere l'SDK Google Play Services alla tua app.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.5.1")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }Con Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase per Android.
(Alternativa) Aggiungi dipendenze della libreria Firebase senza utilizzare BoM
Se scegli di non utilizzare Firebase BoM, devi specificare ogni versione della libreria Firebase nella riga di dipendenza.
Tieni presente che se nella tua app utilizzi più librerie Firebase, ti consigliamo vivamente di utilizzare BoM per gestire le versioni delle librerie, in modo da garantire la compatibilità di tutte le versioni.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.1.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.2.0") }
Configura il progetto Firebase
Imposta la fingerprint SHA-1 del tuo gioco dalla pagina Impostazioni della console Firebase.
Puoi ottenere l'hash SHA del certificato di firma con il comando gradle
signingReport
:./gradlew signingReport
Attiva Google Play Giochi come provider di accesso:
Trova l'ID client e il client secret del server web del tuo progetto. L'ID client del web server identifica il tuo progetto Firebase per i server di autenticazione di Google Play.
Per trovare questi valori:
- Apri il progetto Firebase nella pagina delle credenziali della console API di Google.
- Nella sezione ID client OAuth 2.0, apri la pagina dei dettagli del client web (creato automaticamente dal servizio Google). In questa pagina sono elencati l'ID client e il secret del tuo web server.
Quindi, nella console Firebase, apri la sezione Autenticazione.
Nella scheda Metodo di accesso, attiva il fornitore di servizi di accesso Play Giochi. Dovrai specificare l'ID client e il client secret del server web del tuo progetto, che hai ottenuto dalla console delle API.
Configura Play Games services con le informazioni dell'app Firebase
Nella Console Google Play, apri l'app Google Play o creane una.
Nella sezione Crescita, fai clic su Play Games services > Configurazione e gestione > Configurazione.
Fai clic su Sì, il mio gioco utilizza già API di Google, seleziona il progetto Firebase dall'elenco e poi fai clic su Utilizza.
Nella pagina di configurazione Play Games services, fai clic su Aggiungi credenziale.
- Seleziona il tipo di server di gioco.
- Nel campo Client OAuth, seleziona l'ID client web del tuo progetto. Assicurati che si tratti dello stesso ID client specificato quando hai attivato l'accesso con Play Games.
- Salva le modifiche.
Sempre nella pagina di configurazione di Play Games services, fai nuovamente clic su Aggiungi credenziale.
- Seleziona il tipo Android.
- Nel campo Client OAuth, seleziona l'ID client Android del tuo progetto. Se non vedi il tuo ID cliente Android, assicurati di impostare l'impronta SHA-1 del tuo gioco nella console Firebase.
- Salva le modifiche.
Nella pagina Tester, aggiungi gli indirizzi email di tutti gli utenti che devono poter accedere al tuo gioco prima di pubblicarlo suPlay Store.
Integra l'accesso di Play Giochi nel tuo gioco
Innanzitutto, integra l'accesso a Play Giochi nella tua app. Per istruzioni complete, consulta Accedere ad Android Giochi.
Nell'integrazione, quando crei l'oggetto GoogleSignInOptions
, utilizza la configurazione DEFAULT_GAMES_SIGN_IN
e chiama requestServerAuthCode
:
Kotlin+KTX
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build()
Java
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(getString(R.string.default_web_client_id)) .build();
Devi passare l'ID client del server web al metodo requestServerAuthCode
.
Si tratta dell'ID che hai fornito quando hai attivato l'accesso a Play Giochi nella console Firebase.
Esegui l'autenticazione con Firebase
Dopo aver aggiunto l'accesso a Play Giochi alla tua app, devi configurare Firebase in modo che utilizzi le credenziali dell'Account Google che ricevi quando un giocatore accede correttamente con Play Giochi.
- Innanzitutto, nel metodo
onCreate
dell'attività di accesso, recupera l'istanza condivisa dell'oggettoFirebaseAuth
:
Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Durante l'inizializzazione dell'attività, controlla se il player ha già eseguito l'accesso con Firebase:
Kotlin+KTX
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
If the player isn't signed in, present the player with your game's
signed-out experience, including the option to sign in.
- Dopo che un giocatore ha eseguito l'accesso a Play Giochi in modalità silenziosa o interattiva, recupera il codice di autenticazione dall'oggetto
GoogleSignInAccount
, scambialo con una credenziale Firebase e autenticati con Firebase utilizzando la credenziale Firebase:
Kotlin+KTX
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private fun firebaseAuthWithPlayGames(acct: GoogleSignInAccount) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.id!!) val auth = Firebase.auth val credential = PlayGamesAuthProvider.getCredential(acct.serverAuthCode!!) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } // ... } }
Java
// Call this both in the silent sign-in task's OnCompleteListener and in the // Activity's onActivityResult handler. private void firebaseAuthWithPlayGames(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithPlayGames:" + acct.getId()); final FirebaseAuth auth = FirebaseAuth.getInstance(); AuthCredential credential = PlayGamesAuthProvider.getCredential(acct.getServerAuthCode()); auth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = auth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInWithCredential:failure", task.getException()); Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } // ... } }); }
Se la chiamata a signInWithCredential
va a buon fine, puoi utilizzare il metodo getCurrentUser
per recuperare i dati dell'account dell'utente.
Passaggi successivi
Dopo che un utente accede per la prima volta, viene creato un nuovo account utente e collegato al suo ID di Google Play. Questo nuovo account viene archiviato nel progetto Firebase e può essere utilizzato per identificare un utente in ogni app del progetto.
Nel tuo gioco, puoi recuperare l'UID Firebase dell'utente dall'oggetto FirebaseUser
:
Kotlin+KTX
val user = auth.currentUser user?.let { val playerName = it.displayName // The user's Id, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, if you // have one; use FirebaseUser.getIdToken() instead. val uid = it.uid }
Java
FirebaseUser user = mAuth.getCurrentUser(); String playerName = user.getDisplayName(); // The user's Id, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, if you // have one; use FirebaseUser.getIdToken() instead. String uid = user.getUid();
Nelle regole di sicurezza di Firebase Realtime Database e Cloud Storage, puoi recuperare
l'ID utente univoco dell'utente che ha eseguito l'accesso dalla variabile auth
e utilizzarlo per controllare i dati a cui un utente può accedere.
Per ottenere informazioni sui giocatori di Play Giochi di un utente o per accedere ai servizi Play Giochi, utilizza le API fornite dall'SDK Google Play Giochi.
Per scollegare un utente, chiama FirebaseAuth.signOut()
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();