Autentica con i servizi per i giochi di Google Play su Android

Puoi utilizzare i servizi di Google Play Giochi per far accedere i giocatori a un gioco Android basate su Firebase. Per utilizzare l'accesso con Firebase ai servizi per i giochi di Google Play, innanzitutto fai accedere il giocatore con Google Play Giochi e, al momento dell'accesso, richiedi un codice di autenticazione OAuth 2.0. Poi, passa il codice di autenticazione a PlayGamesAuthProvider per generare una credenziale Firebase, che potrai utilizzare per autenticarti con Firebase.

Prima di iniziare

Configurare il progetto Android

  1. Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android.

  2. 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 il controllo delle versioni delle librerie.

    Inoltre, durante la configurazione di Firebase Authentication, devi aggiungere SDK Google Play Services alla tua app.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.2.0"))
    
        // 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")
    }

    Utilizzando Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase per Android.

    (alternativa) Aggiungi dipendenze della libreria Firebase senza utilizzare il BoM

    Se scegli di non utilizzare Firebase BoM, devi specificare ogni versione della libreria Firebase nella sua linea di dipendenza.

    Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo consiglia di utilizzare BoM per gestire le versioni della libreria, in modo da garantire che tutte le versioni siano compatibili.

    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.0.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")
    }
    . Cerchi un modulo della libreria specifico per Kotlin? A partire da Ottobre 2023 (Firebase BoM 32.5.0), gli sviluppatori Kotlin e Java possono dipendono dal modulo principale della libreria (per i dettagli, consulta Domande frequenti su questa iniziativa).

Configura il progetto Firebase

  1. Imposta l'impronta SHA-1 del gioco dal Pagina Impostazioni della console Firebase.

    Puoi ottenere l'hash SHA del certificato di firma con il Gradle Comando signingReport:

    ./gradlew signingReport

  2. Attiva Google Play Giochi come provider di accesso:

    1. Trova l'ID client del server web e il client secret del tuo progetto. Sul Web identifica il tuo progetto Firebase in Google Play. auth.

      Per trovare questi valori:

      1. Apri il progetto Firebase nella pagina delle credenziali della console API di Google.
      2. Nella sezione ID client OAuth 2.0, apri il Client web (automatico) creata dal servizio Google. In questa pagina sono elencate le tue pagine web l'ID client e il secret del server.
    2. Quindi, nella console Firebase, apri la sezione Autenticazione.

    3. Nella scheda Metodo di accesso, attiva l'accesso per Play Giochi. o il provider di servizi di terze parti. Dovrai specificare il server web del progetto l'ID client e il client secret ottenuti dalla console API.

Configura Play Games services con le informazioni dell'app Firebase

  1. Nella Console Google Play, apri l'app Google Play o creane una.

  2. Nella sezione Crescita, fai clic su Play Games services > Configurazione e gestione > Configurazione.

  3. Fai clic su Sì, il mio gioco utilizza già API di Google e seleziona l'account Firebase progetto dall'elenco e fai clic su Usa.

  4. Nella pagina di configurazione Play Games services, fai clic su Aggiungi credenziale.

    1. Seleziona il tipo Server di gioco.
    2. Nel campo Client OAuth, seleziona l'ID client web del progetto. Essere assicurati che sia lo stesso ID client specificato al momento dell'attivazione Accesso con Play Games.
    3. Salva le modifiche.
  5. Sempre nella pagina di configurazione di Play Games services, fai clic su Aggiungi credenziale di nuovo.

    1. Seleziona il tipo per Android.
    2. Nel campo Client OAuth, seleziona l'ID client Android del tuo progetto. Se non vedi il tuo ID client Android, assicurati di impostare il Impronta SHA-1 nella console Firebase.)
    3. Salva le modifiche.
  6. Nella pagina Tester, aggiungi gli indirizzi email di tutti gli utenti che devono poter accedere al gioco prima di rilasciarlo sul Play Store.

Integra l'accesso di Play Giochi nel tuo gioco

Innanzitutto, integra l'accesso di Play Giochi nella tua app. Consulta Accedere ai giochi Android per istruzioni complete.

Nell'integrazione, quando crei l'oggetto GoogleSignInOptions, utilizza il metodo configurazione di 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 nel Console Firebase.

Esegui l'autenticazione con Firebase

Dopo aver aggiunto l'accesso a Play Giochi alla tua app, devi configurare Firebase per utilizzare Le credenziali dell'Account Google che ricevi quando un giocatore esegue l'accesso. con Play Giochi.

  1. Innanzitutto, nel metodo onCreate della tua attività di accesso, ottieni il istanza condivisa dell'oggetto FirebaseAuth:

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
  1. Durante l'inizializzazione dell'attività, controlla se il player è già registrato 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.
  1. Dopo che un giocatore esegue l'accesso con Play Giochi in modalità silenziosa o interattiva, ottenere il codice di autorizzazione dall'oggetto GoogleSignInAccount, scambiarlo con credenziali Firebase ed esegui l'autenticazione con Firebase credenziale:

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 al numero signInWithCredential ha esito positivo, puoi utilizzare il metodo getCurrentUser per ottenere i dati dell'account dell'utente.

Passaggi successivi

Dopo che un utente ha eseguito l'accesso per la prima volta, viene creato un nuovo account utente e collegati al suo ID Play Giochi. Il nuovo account è memorizzato come parte di progetto Firebase e può essere utilizzato per identificare un utente in ogni app 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();

Nel tuo Firebase Realtime Database e le regole di sicurezza di Cloud Storage, puoi ottenere l'ID utente unico dell'utente che ha eseguito l'accesso dalla variabile auth e utilizzalo per controllare a quali dati può accedere un utente.

Per ricevere 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 disconnettere un utente, chiama FirebaseAuth.signOut():

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();