Check out what’s new from Firebase at Google I/O 2022. Learn more

Authentifizieren Sie sich mit Google Play Games Services auf Android

Sie können Google Play Games-Dienste verwenden, um Spieler bei einem Android-Spiel anzumelden, das auf Firebase basiert. Um sich bei Google Play Games-Diensten mit Firebase anzumelden, melden Sie den Player zuerst bei Google Play Games an und fordern Sie dabei einen OAuth 2.0-Authentifizierungscode an. Übergeben Sie dann den Authentifizierungscode an PlayGamesAuthProvider , um Firebase-Anmeldeinformationen zu generieren, mit denen Sie sich bei Firebase authentifizieren können.

Bevor Sie beginnen

Richten Sie Ihr Android-Projekt ein

  1. Fügen Sie Ihrem Android-Projekt Firebase hinzu, falls Sie dies noch nicht getan haben .

  2. Deklarieren Sie mithilfe der Firebase-Android-BoM die Abhängigkeit für die Firebase-Authentifizierungs-Android-Bibliothek in Ihrer Modul-Gradle-Datei (auf App-Ebene) (normalerweise app/build.gradle ).

    Außerdem müssen Sie im Rahmen der Einrichtung der Firebase-Authentifizierung das SDK der Google Play-Dienste zu Ihrer App hinzufügen.

    Java

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

    Durch die Verwendung der Firebase Android BoM verwendet Ihre App immer kompatible Versionen der Firebase Android-Bibliotheken.

    (Alternative) Deklarieren Sie Abhängigkeiten der Firebase-Bibliothek, ohne die Stückliste zu verwenden

    Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

    Beachten Sie, dass wir bei Verwendung mehrerer Firebase-Bibliotheken in Ihrer App dringend empfehlen, die BoM zum Verwalten von Bibliotheksversionen zu verwenden, um sicherzustellen, dass alle Versionen kompatibel sind.

    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.5'
    // 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.1.0')
    
        // 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'
    }

    Durch die Verwendung der Firebase Android BoM verwendet Ihre App immer kompatible Versionen der Firebase Android-Bibliotheken.

    (Alternative) Deklarieren Sie Abhängigkeiten der Firebase-Bibliothek, ohne die Stückliste zu verwenden

    Wenn Sie die Firebase-Stückliste nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in ihrer Abhängigkeitszeile angeben.

    Beachten Sie, dass wir bei Verwendung mehrerer Firebase-Bibliotheken in Ihrer App dringend empfehlen, die BoM zum Verwalten von Bibliotheksversionen zu verwenden, um sicherzustellen, dass alle Versionen kompatibel sind.

    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.5'
    // 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'
    }

Richten Sie Ihr Firebase-Projekt ein

  1. Legen Sie den SHA-1-Fingerabdruck Ihres Spiels auf der Seite „ Einstellungen “ der Firebase-Konsole fest.

    Sie können den SHA-Hash Ihres Signaturzertifikats mit dem Befehl signingReport signingReport abrufen:

    ./gradlew signingReport

  2. Aktivieren Sie Google Play Games als Anmeldeanbieter:

    1. Finden Sie die Webserver-Client-ID und das Client-Geheimnis Ihres Projekts. Die Webserver-Client-ID identifiziert Ihr Firebase-Projekt gegenüber den Google Play-Authentifizierungsservern.

      So finden Sie diese Werte:

      1. Öffnen Sie Ihr Firebase-Projekt auf der Anmeldeseite der Google APIs-Konsole .
      2. Öffnen Sie im Abschnitt OAuth 2.0-Client-IDs die Detailseite des Webclients (automatisch vom Google-Dienst erstellt) . Diese Seite listet Ihre Webserver-Client-ID und Ihr Geheimnis auf.
    2. Öffnen Sie dann in der Firebase-Konsole den Abschnitt Authentifizierung .

    3. Aktivieren Sie auf der Registerkarte Anmeldemethode den Play Spiele - Anmeldeanbieter . Sie müssen die Webserver-Client-ID und das Clientgeheimnis Ihres Projekts angeben, die Sie von der APIs-Konsole erhalten haben.

Konfigurieren Sie Play Games-Dienste mit Ihren Firebase-App-Informationen

  1. Öffnen Sie in der Google Play Console Ihre Google Play App oder erstellen Sie eine.

  2. Klicken Sie im Abschnitt Erweitern auf Play Games-Dienste > Einrichtung und Verwaltung > Konfiguration .

  3. Klicken Sie auf Ja, mein Spiel verwendet bereits Google-APIs , wählen Sie Ihr Firebase-Projekt aus der Liste aus und klicken Sie dann auf Verwenden .

  4. Klicken Sie auf der Konfigurationsseite der Play Games-Dienste auf Anmeldedaten hinzufügen .

    1. Wählen Sie den Spielservertyp aus .
    2. Wählen Sie im Feld OAuth-Client die Web-Client-ID Ihres Projekts aus. Stellen Sie sicher, dass dies die gleiche Client-ID ist, die Sie bei der Aktivierung der Play Spiele-Anmeldung angegeben haben.
    3. Speichern Sie Ihre Änderungen.
  5. Klicken Sie auf der Konfigurationsseite der Play Games-Dienste erneut auf Anmeldedaten hinzufügen .

    1. Wählen Sie den Android -Typ aus.
    2. Wählen Sie im Feld OAuth-Client die Android-Client-ID Ihres Projekts aus. (Wenn Sie Ihre Android-Client-ID nicht sehen, achten Sie darauf, den SHA-1-Fingerabdruck Ihres Spiels in der Firebase-Konsole festzulegen.)
    3. Speichern Sie Ihre Änderungen.
  6. Fügen Sie auf der Seite Tester die E-Mail-Adressen aller Benutzer hinzu, die sich bei Ihrem Spiel anmelden können müssen, bevor Sie es im Play Store veröffentlichen.

Integrieren Sie die Play Games-Anmeldung in Ihr Spiel

Integrieren Sie zunächst die Play Games-Anmeldung in Ihre App. Ausführliche Anweisungen finden Sie unter Bei Android-Spielen anmelden.

Verwenden Sie in Ihrer Integration beim Erstellen des GoogleSignInOptions Objekts die Konfiguration DEFAULT_GAMES_SIGN_IN und rufen Sie requestServerAuthCode auf:

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

Sie müssen Ihre Webserver-Client-ID an die Methode „ requestServerAuthCode “ übergeben. Dies ist die ID, die Sie angegeben haben, als Sie die Play Games-Anmeldung in der Firebase-Konsole aktiviert haben.

Authentifizieren Sie sich mit Firebase

Nachdem Sie die Play Games-Anmeldung zu Ihrer App hinzugefügt haben, müssen Sie Firebase so einrichten, dass die Anmeldeinformationen für das Google-Konto verwendet werden, die Sie erhalten, wenn sich ein Spieler erfolgreich bei Play Games anmeldet.

  1. Rufen Sie zunächst in der onCreate -Methode Ihrer Anmeldeaktivität die freigegebene Instanz des FirebaseAuth -Objekts ab:

Java

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

Kotlin+KTX

private lateinit var auth: FirebaseAuth
// ...
// Initialize Firebase Auth
auth = Firebase.auth
  1. Überprüfen Sie beim Initialisieren Ihrer Aktivität, ob der Player bereits bei Firebase angemeldet ist:

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. Nachdem sich ein Spieler entweder im Hintergrund oder interaktiv bei Play Games angemeldet hat, rufen Sie den Authentifizierungscode aus dem GoogleSignInAccount Objekt ab, tauschen Sie ihn gegen Firebase-Anmeldedaten aus und authentifizieren Sie sich bei Firebase mit den Firebase-Anmeldedaten:

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

                // ...
            }
}

Wenn der Aufruf von signInWithCredential erfolgreich ist, können Sie die getCurrentUser Methode verwenden, um die Kontodaten des Benutzers abzurufen.

Nächste Schritte

Nachdem sich ein Benutzer zum ersten Mal angemeldet hat, wird ein neues Benutzerkonto erstellt und mit seiner Play Games-ID verknüpft. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren.

In Ihrem Spiel können Sie die Firebase-UID des Benutzers aus dem FirebaseUser -Objekt abrufen:

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
}

In Ihren Firebase-Echtzeitdatenbank- und Cloudspeicher-Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth -Variable abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

Verwenden Sie die vom Google Play Games SDK bereitgestellten APIs, um die Play Games-Spielerinformationen eines Nutzers abzurufen oder auf Play Games-Dienste zuzugreifen.

Um einen Benutzer abzumelden, rufen FirebaseAuth.signOut() auf:

Java

FirebaseAuth.getInstance().signOut();

Kotlin+KTX

Firebase.auth.signOut()