Mit den Google Play-Spieldiensten auf Android-Geräten authentifizieren

Mit den Google Play-Spieldiensten können Sie Spieler in einem Android-Spiel anmelden, das auf Firebase basiert. Wenn Sie die Google Play-Spieldienste-Anmeldung mit Firebase verwenden möchten, melden Sie den Spieler zuerst mit Google Play-Spieldiensten an und fordern Sie dabei einen OAuth 2.0-Autorisierungscode an. Übergeben Sie den Autorisierungscode dann an PlayGamesAuthProvider, um Anmeldedaten für Firebase zu generieren, mit denen Sie sich bei Firebase authentifizieren können.

Hinweis

Android-Projekt einrichten

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

  2. Fügen Sie in der Gradle-Datei Ihres Moduls (auf App-Ebene) (in der Regel <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle) die Abhängigkeit für die Firebase Authentication-Bibliothek für Android hinzu. Wir empfehlen, die Firebase Android BoM zu verwenden, um die Versionsverwaltung der Bibliothek zu steuern.

    Außerdem müssen Sie das Google Play Services SDK in Ihre App einfügen, um Firebase Authentication einzurichten.

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

    Mit der Firebase Android BoM haben Sie immer eine kompatible Version der Firebase Android-Bibliotheken in Ihrer App.

    (Alternative)  Firebase-Bibliotheksabhängigkeiten ohne Verwendung von BoM hinzufügen

    Wenn Sie die Firebase BoM nicht verwenden möchten, müssen Sie jede Firebase-Bibliotheksversion in der entsprechenden Abhängigkeitszeile angeben.

    Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir dringend, die BoM zum Verwalten von Bibliotheksversionen zu verwenden, um sicherzustellen, 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:24.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.3.0")
    }

Das Firebase-Projekt einrichten

  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 Gradle-Befehl signingReport abrufen:

    ./gradlew signingReport

  2. Google Play Spiele als Anmeldeanbieter aktivieren:

    1. Suchen Sie die Client-ID und den Clientschlüssel des Webservers Ihres Projekts. Die Webserver-Client-ID identifiziert Ihr Firebase-Projekt bei den Google Play-Authentifizierungsservern.

      So ermitteln Sie diese Werte:

      1. Öffnen Sie Ihr Firebase-Projekt in der Google APIs Console auf der Seite „Anmeldedaten“.
      2. Öffnen Sie im Bereich OAuth 2.0-Client-IDs die Detailseite Webclient (von Google-Dienst automatisch erstellt). Auf dieser Seite werden die Client-ID und das Secret Ihres Webservers aufgeführt.
    2. Öffnen Sie dann in der Firebase-Konsole den Abschnitt Authentifizierung.

    3. Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Play Spiele. Sie müssen die Webserver-Client-ID und das Client-Secret Ihres Projekts angeben, die Sie über die APIs-Konsole erhalten haben.

Play Games services mit den Informationen zu Ihrer Firebase-App konfigurieren

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

  2. Klicken Sie im Bereich Wachstum auf Play Games services > Einrichtung und Verwaltung > Konfiguration.

  3. Klicken Sie auf Ja, in meinem Spiel kommen bereits Google-APIs zum Einsatz, wählen Sie Ihr Firebase-Projekt aus der Liste aus und klicken Sie dann auf Verwenden.

  4. Klicken Sie auf der Konfigurationsseite für Play Games services auf Anmeldedaten hinzufügen.

    1. Wählen Sie den Typ Spieleserver aus.
    2. Wählen Sie im Feld OAuth-Client die Webclient-ID Ihres Projekts aus. Achten Sie darauf, dass es sich um dieselbe Client-ID handelt, die Sie beim Aktivieren der Play Games-Anmeldung angegeben haben.
    3. Speichern Sie die Änderungen.
  5. Klicken Sie auf der Konfigurationsseite für Play Games services noch einmal auf Anmeldedaten hinzufügen.

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

Anmeldung über Play Spiele in Ihr Spiel einbinden

Integrieren Sie zuerst die Play Spiele-Anmeldung in Ihre App. Eine vollständige Anleitung finden Sie unter Anmeldung bei Android-Spielen.

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

Kotlin

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. Das ist die ID, die Sie beim Aktivieren der Play Spiele-Anmeldung in der Firebase-Konsole angegeben haben.

Mit Firebase authentifizieren

Nachdem Sie die Anmeldung über Google Play Spiele in Ihre App eingefügt haben, müssen Sie Firebase so einrichten, dass die Anmeldedaten des Google-Kontos verwendet werden, die Sie erhalten, wenn sich ein Spieler erfolgreich über Google Play Spiele anmeldet.

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

Kotlin

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

Java

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

Kotlin

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 mit Play Spiele entweder im Hintergrund oder interaktiv angemeldet hat, rufen Sie den Autorisierungscode aus dem GoogleSignInAccount-Objekt ab, tauschen Sie ihn gegen eine Firebase-Anmeldedaten ein und authentifizieren Sie sich mit Firebase über die Firebase-Anmeldedaten:

Kotlin

// 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 mit der Methode getCurrentUser die Kontodaten des Nutzers abrufen.

Nächste Schritte

Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit seiner Play Spiele-ID verknüpft. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren.

In Ihrem Spiel können Sie die Firebase-UID des Nutzers über das FirebaseUser-Objekt abrufen:

Kotlin

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 Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.

Wenn Sie die Spielerinformationen eines Nutzers in Google Play Spiele abrufen oder auf die Google Play-Spieldienste zugreifen möchten, verwenden Sie die APIs, die vom Google Play Games SDK bereitgestellt werden.

Rufen Sie FirebaseAuth.signOut() auf, um einen Nutzer abzumelden:

Kotlin

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();