Autenticati utilizzando i servizi di giochi di Google Play su Android

Puoi utilizzare i servizi di Google Play Games per far accedere i giocatori a un gioco Android basato su Firebase. Per utilizzare i servizi di Google Play Games, accedi con Firebase, accedi prima al giocatore con Google Play Games e richiedi un codice di autenticazione OAuth 2.0 quando lo fai. Quindi, passa il codice di autenticazione a PlayGamesAuthProvider per generare una credenziale Firebase, che puoi utilizzare per autenticarti con Firebase.

Prima di iniziare

Configura il tuo progetto Android

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

  2. Utilizzando Firebase Android BoM , dichiara la dipendenza per la libreria Android Firebase Authentication nel file Gradle del tuo modulo (a livello di app (solitamente app/build.gradle ).

    Inoltre, come parte della configurazione dell'autenticazione Firebase, devi aggiungere l'SDK dei servizi di Google Play alla tua app.

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare 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 declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

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

    (Alternativa) Dichiara le dipendenze della libreria Firebase senza utilizzare la distinta base

    Se scegli di non utilizzare la distinta base di Firebase, devi specificare ciascuna versione della libreria Firebase nella relativa riga di dipendenza.

    Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la distinta base per gestire le versioni delle librerie, il che garantisce che tutte le versioni siano compatibili.

    dependencies {
        // Declare 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:21.0.7'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:30.3.1')
    
        // Declare 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-ktx'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

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

    (Alternativa) Dichiara le dipendenze della libreria Firebase senza utilizzare la distinta base

    Se scegli di non utilizzare la distinta base di Firebase, devi specificare ciascuna versione della libreria Firebase nella relativa riga di dipendenza.

    Tieni presente che se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la distinta base per gestire le versioni delle librerie, il che garantisce che tutte le versioni siano compatibili.

    dependencies {
        // Declare 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-ktx:21.0.7'
    // Also declare the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.2.0'
    }

Configura il tuo progetto Firebase

  1. Imposta l'impronta digitale SHA-1 del tuo gioco dalla pagina Impostazioni della console Firebase.

    Puoi ottenere l'hash SHA del tuo certificato di firma con il comando gradle signingReport :

    ./gradlew signingReport

  2. Abilita Google Play Games come provider di accesso:

    1. Trova l'ID client del server Web e il segreto client del tuo progetto. L'ID client del server web identifica il tuo progetto Firebase sui server di autenticazione di Google Play.

      Per trovare questi valori:

      1. Apri il tuo progetto Firebase nella pagina delle credenziali della console delle API di Google .
      2. Nella sezione ID client OAuth 2.0 , apri la pagina dei dettagli del client Web (creato automaticamente da Google Service) . Questa pagina elenca l'ID client e il segreto del tuo server web.
    2. Quindi, nella console Firebase , apri la sezione Autenticazione .

    3. Nella scheda Metodo di accesso, abilita il provider di accesso a Play Giochi . Dovrai specificare l'ID client del server Web del tuo progetto e il client secret, che hai ottenuto dalla console delle API.

Configura i servizi di Play Games con le informazioni dell'app Firebase

  1. In Google Play Console , apri la tua app Google Play o creane una.

  2. Nella sezione Cresci , fai clic su Servizi di Play Games > Configurazione e gestione > Configurazione .

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

  4. Nella pagina di configurazione dei servizi di Play Games, fai clic su Aggiungi credenziali .

    1. Seleziona il tipo di server di gioco .
    2. Nel campo client OAuth , seleziona l'ID client web del tuo progetto. Assicurati che sia lo stesso ID client che hai specificato quando hai abilitato l'accesso a Play Giochi.
    3. Salva le modifiche.
  5. Sempre nella pagina di configurazione dei servizi di Play Games, fai nuovamente clic su Aggiungi credenziali .

    1. Seleziona il tipo di 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 l'impronta digitale SHA-1 del tuo gioco nella console Firebase.)
    3. Salva le modifiche.
  6. Nella pagina Tester , aggiungi gli indirizzi email di tutti gli utenti che devono poter accedere al tuo gioco prima di rilasciarlo sul Play Store.

Integra l'accesso a Play Games nel tuo gioco

Innanzitutto, integra l'accesso a Play Games nella tua app. Consulta Accedi a Giochi Android per istruzioni complete.

Nella tua integrazione, quando crei l'oggetto GoogleSignInOptions , utilizza la configurazione DEFAULT_GAMES_SIGN_IN e chiama requestServerAuthCode :

Java

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build();

Kotlin+KTX

val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
        .requestServerAuthCode(getString(R.string.default_web_client_id))
        .build()

È necessario passare l'ID client del server Web al metodo requestServerAuthCode . Questo è l'ID che hai fornito quando hai abilitato l'accesso a Play Games nella console Firebase.

Autenticati con Firebase

Dopo aver aggiunto l'accesso a Play Games alla tua app, devi configurare Firebase per utilizzare le credenziali dell'account Google che ottieni quando un giocatore accede correttamente con Play Games.

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

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. Quando inizializzi la tua attività, controlla se il giocatore ha già effettuato l'accesso con Firebase:

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

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)
}
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 ha eseguito l'accesso con Play Games in modo silenzioso o interattivo, ottieni il codice di autenticazione dall'oggetto GoogleSignInAccount , scambialo con una credenziale Firebase e autenticati con Firebase utilizzando la credenziale Firebase:

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

                    // ...
                }
            });
}

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)
                }

                // ...
            }
}

Se la chiamata a signInWithCredential positivo, puoi utilizzare il metodo getCurrentUser per ottenere i dati dell'account dell'utente.

Prossimi passi

Dopo che un utente accede per la prima volta, viene creato un nuovo account utente e collegato al suo ID Play Games. Questo nuovo account viene archiviato come parte del tuo progetto Firebase e può essere utilizzato per identificare un utente in ogni app del tuo progetto.

Nel tuo gioco, puoi ottenere l'UID Firebase dell'utente dall'oggetto FirebaseUser :

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

Kotlin+KTX

val user = auth.currentUser
user?.let {
    val playerName = user.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 = user.uid
}

Nelle regole di sicurezza del database in tempo reale e dell'archiviazione cloud di Firebase, puoi ottenere l'ID utente univoco dell'utente che ha eseguito l'accesso dalla variabile auth e utilizzarlo per controllare a quali dati può accedere un utente.

Per ottenere le informazioni sul giocatore di Play Games di un utente o per accedere ai servizi di Play Games, utilizza le API fornite da Google Play Games SDK .

Per disconnettere un utente, chiama FirebaseAuth.signOut() :

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()