Catch up on highlights from Firebase at Google I/O 2023. 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. Fügen Sie in Ihrer Modul-Gradle-Datei (auf App-Ebene) (normalerweise <project>/<app-module>/build.gradle ) die Abhängigkeit für die Firebase Authentication Android-Bibliothek hinzu. Wir empfehlen die Verwendung der Firebase Android BoM zur Steuerung der Bibliotheksversionierung.

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

    Kotlin+KTX

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

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

    (Alternative) Fügen Sie Firebase-Bibliotheksabhängigkeiten hinzu , 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, wodurch sichergestellt wird, dass alle Versionen kompatibel sind.

    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-ktx:22.0.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.5.0'
    }

    Java

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

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

    (Alternative) Fügen Sie Firebase-Bibliotheksabhängigkeiten hinzu , 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, wodurch sichergestellt wird, dass alle Versionen kompatibel sind.

    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:22.0.0'
    // Also add the dependency for the Google Play services library and specify its version implementation 'com.google.android.gms:play-services-auth:20.5.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 gradle 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:

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

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:

Kotlin+KTX

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

Java

private FirebaseAuth mAuth;
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
  1. Überprüfen Sie beim Initialisieren Ihrer Aktivität, ob der Player bereits bei Firebase angemeldet ist:

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. 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:

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

                    // ...
                }
            });
}

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:

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

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 Sie FirebaseAuth.signOut() auf:

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();