Authentifizieren Sie sich mit den Google Play Games Services auf Android

Sie können die Dienste von Google Play Games verwenden, um Spieler bei einem auf Firebase erstellten Android-Spiel anzumelden. Um die Anmeldung bei Google Play Games-Diensten mit Firebase zu nutzen, melden Sie den Spieler zunächst 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, die Sie zur Authentifizierung bei Firebase verwenden können.

Bevor Sie beginnen

Richten Sie Ihr Android-Projekt ein

  1. Falls noch nicht geschehen, fügen Sie Firebase zu Ihrem Android-Projekt hinzu .

  2. Fügen Sie in Ihrer Modul-Gradle-Datei (auf App-Ebene) (normalerweise <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle ) die Abhängigkeit für die Firebase-Authentifizierung hinzu Bibliothek für Android. 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 Google Play Services SDK zu Ihrer App hinzufügen.

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

    Durch die Verwendung der Firebase Android BoM verwendet Ihre App immer kompatible Versionen der 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: Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir dringend, die BoM zum Verwalten der 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:22.3.1")
    // Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.0.0")
    }
    Suchen Sie nach einem Kotlin-spezifischen Bibliotheksmodul? Ab Oktober 2023 (Firebase BoM 32.5.0) können sich sowohl Kotlin- als auch Java-Entwickler auf das Hauptbibliotheksmodul verlassen (Einzelheiten finden Sie in den FAQ zu dieser Initiative ).

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

    ./gradlew signingReport

  2. Aktivieren Sie Google Play Games als Anmeldeanbieter:

    1. Ermitteln Sie die Client-ID und den geheimen Clientschlüssel 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 Seite mit den Anmeldeinformationen der Google APIs-Konsole .
      2. Öffnen Sie im Abschnitt „OAuth 2.0-Client-IDs“ die Detailseite des Web-Clients (automatisch vom Google-Dienst erstellt) . Auf dieser Seite werden die Client-ID und das Geheimnis Ihres Webservers aufgeführt.
    2. Öffnen Sie dann in der Firebase-Konsole den Abschnitt „Authentifizierung“ .

    3. Aktivieren Sie auf der Registerkarte „Anmeldemethode“ den Anmeldeanbieter „Play Games“ . Sie müssen die Webserver-Client-ID und das Client-Geheimnis 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 Anmeldeinformationen hinzufügen .

    1. Wählen Sie den Gameservertyp aus.
    2. Wählen Sie im Feld „OAuth-Client“ die Web-Client-ID Ihres Projekts aus. Stellen Sie sicher, dass es sich um dieselbe Client-ID handelt, die Sie angegeben haben, als Sie die Play Games-Anmeldung aktiviert haben.
    3. Speichern Sie Ihre Änderungen.
  5. Klicken Sie immer noch auf der Konfigurationsseite der Play Games-Dienste erneut auf Anmeldeinformationen 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, stellen Sie sicher, dass Sie den SHA-1-Fingerabdruck Ihres Spiels in der Firebase-Konsole festgelegt haben.)
    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 müssen 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“ .

Wenn Sie in Ihrer Integration das GoogleSignInOptions Objekt erstellen, verwenden Sie 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 für die Verwendung der Google-Kontoanmeldeinformationen einrichten, 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 gemeinsame 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 Spieler 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 still oder interaktiv bei Play Games angemeldet hat, rufen Sie den Authentifizierungscode vom GoogleSignInAccount Objekt ab, tauschen Sie ihn gegen Firebase-Anmeldeinformationen ein und authentifizieren Sie sich bei Firebase mithilfe der Firebase-Anmeldeinformationen:

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 Methode getCurrentUser 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 zur Identifizierung eines Benutzers in jeder App in Ihrem Projekt verwendet werden.

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 Cloud-Speicher-Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

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

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();