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

Du kannst Google Play-Spieldienste verwenden, um Spieler in einem Android-Spiel anzumelden die auf Firebase basieren. Wenn Sie die Google Play-Spieldienste für die Anmeldung in Firebase verwenden möchten, den Spieler zuerst mit Google Play Spiele anmelden und eine OAuth 2.0-Authentifizierung anfordern wenn Sie dies tun. Übergeben Sie dann den Autorisierungscode an PlayGamesAuthProvider, Firebase-Anmeldedaten 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. In der Gradle-Datei des Moduls (auf App-Ebene) (normalerweise <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle) Fügen Sie die Abhängigkeit für die Firebase Authentication-Bibliothek für Android hinzu. Wir empfehlen, die Firebase Android BoM-Taste zu verwenden, um die Versionierung der Bibliothek zu steuern.

    Beim Einrichten von Firebase Authentication müssen Sie außerdem die Google Play Services SDK hinzufügen.

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

    Mit dem Firebase Android BoM Ihre App verwendet immer kompatible Versionen der Firebase Android Libraries.

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

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

    Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir Ihnen dringend, die Bibliotheksversionen mithilfe der BoM zu verwalten. So wird sichergestellt, 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:23.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.2.0")
    }
    Suchen Sie nach einem Kotlin-spezifischen Bibliotheksmodul? Beginnt in Oktober 2023 (Firebase BoM 32.5.0) können sowohl Kotlin- als auch Java-Entwickler sind vom Modul der Hauptbibliothek abhängig (Details finden Sie in der FAQs zu dieser Initiative).

Das Firebase-Projekt einrichten

  1. Legen Sie den SHA-1-Fingerabdruck Ihres Spiels über das Seite Einstellungen der Firebase-Konsole.

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

    ./gradlew signingReport

  2. Google Play Spiele als Anmeldeanbieter aktivieren:

    1. Suchen Sie die Webserver-Client-ID und den Clientschlüssel Ihres Projekts. Die Webserver-Client-ID identifiziert Ihr Firebase-Projekt für die Google Play-Authentifizierungsserver.

      So ermitteln Sie diese Werte:

      1. Öffnen Sie in der Google APIs Console Ihr Firebase-Projekt.
      2. Öffnen Sie im Abschnitt OAuth 2.0-Client-IDs den Abschnitt Webclient (automatisch) vom Google-Dienst erstellt). Auf dieser Seite wird Ihr Server-Client-ID und Secret.
    2. Öffnen Sie dann in der Firebase Console den Bereich Authentifizierung.

    3. Aktivieren Sie auf dem Tab Anmeldemethode die Anmeldung in Play Spiele. Dienstanbieter. Sie müssen den Webserver Ihres Projekts angeben Client-ID und Clientschlüssel, die Sie über die APIs-Konsole abgerufen haben.

Play Games services mit Ihren Firebase-App-Informationen konfigurieren

  1. Im Google Play-Konsole, öffnen Sie die Google Play App oder erstellen Sie eine.

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

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

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

    1. Wählen Sie den Typ Game Server (Spieleserver) aus.
    2. Wählen Sie im Feld OAuth-Client die Webclient-ID Ihres Projekts aus. Seien Dies ist dieselbe Client-ID, die Sie bei der Aktivierung Play Games-Anmeldung.
    3. Speichern Sie die Änderungen.
  5. Klicken Sie auf der Konfigurationsseite 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 Ihre Android-Client-ID nicht angezeigt wird, achten Sie darauf, die SHA-1-Fingerabdruck in der Firebase-Konsole.)
    3. Speichern Sie die Änderungen.
  6. Fügen Sie auf der Seite Tester die E-Mail-Adressen aller Nutzer hinzu, die in Ihrem Spiel anmelden können, bevor Sie es Play Store

Play Spiele-Anmeldung in dein Spiel integrieren

Integrieren Sie zuerst die Play Spiele-Anmeldung in Ihre App. Weitere Informationen finden Sie unter In Android-Spielen anmelden .

Verwenden Sie in Ihrer Integration beim Erstellen des GoogleSignInOptions-Objekts die Methode DEFAULT_GAMES_SIGN_IN-Konfiguration 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();

Du musst die Client-ID deines Webservers an die Methode requestServerAuthCode übergeben. Das ist die ID, die Sie angegeben haben, als Sie die Anmeldung in Play Spiele in der Firebase-Konsole aktiviert haben.

Mit Firebase authentifizieren

Nachdem Sie Ihrer App eine Play Spiele-Anmeldung hinzugefügt haben, müssen Sie Firebase einrichten, um die App verwenden zu können Die Anmeldedaten für das Google-Konto, die Sie erhalten, wenn sich ein Spieler erfolgreich anmeldet mit Play Spiele.

  1. Rufen Sie zuerst in der onCreate-Methode Ihrer Anmeldeaktivität den gemeinsame Instanz des FirebaseAuth-Objekts:

Kotlin+KTX

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 angemeldet ist. mit Firebase verwenden:

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 automatisch oder interaktiv bei Play Spiele angemeldet hat, rufe den Authentifizierungscode aus dem GoogleSignInAccount-Objekt ab, tausche ihn gegen ein Firebase-Anmeldedaten ein und authentifiziere dich mit Firebase anhand der 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 war, kannst du die Kontodaten des Nutzers mit der Methode getCurrentUser abrufen.

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit seiner Play Spiele-ID verknüpft. Dieses neue Konto wird als Teil deiner Firebase-Projekt erstellen und zur Identifizierung von Nutzern in jeder App in Ihrem Projekt arbeiten.

In deinem Spiel kannst du die Firebase-UID des Nutzers aus der FirebaseUser abrufen. -Objekt enthält:

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

Die Firebase Realtime Database und die Cloud Storage-Sicherheitsregeln enthalten folgende Informationen: Eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth und für folgende Aktionen verwenden: festlegen, auf welche Daten ein Nutzer zugreifen kann.

Um die Play Spiele-Spielerinformationen eines Nutzers zu erhalten oder auf die Play-Spieldienste zuzugreifen, Die über das Google Play Spiele SDK bereitgestellten APIs verwenden

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

Kotlin+KTX

Firebase.auth.signOut()

Java

FirebaseAuth.getInstance().signOut();