Mit den Google Play-Spieldiensten können Sie Spieler in einem auf Firebase basierenden Android-Spiel anmelden. Wenn Sie die Anmeldung über die Google Play-Spieldienste mit Firebase verwenden möchten, melden Sie den Spieler zuerst über Google Play-Spiele an und fordern Sie dabei einen OAuth 2.0-Authentifizierungscode an. Übergeben Sie den Authentifizierungscode dann an PlayGamesAuthProvider
, um Firebase-Anmeldedaten zu generieren, mit denen Sie sich bei Firebase authentifizieren können.
Hinweis
Android-Projekt einrichten
Fügen Sie Ihrem Android-Projekt Firebase hinzu, falls noch nicht geschehen.
Fügen Sie in der Gradle-Datei des Moduls (auf Anwendungsebene) (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 Versionierung der Bibliothek zu steuern.Außerdem müssen Sie bei der Einrichtung von Firebase Authentication das Google Play Services SDK in Ihre App einfügen.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.5.1")) // 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") }Wenn Sie Firebase Android BoM verwenden, verwendet Ihre App immer kompatible Versionen von Firebase Android-Bibliotheken.
Alternative: Firebase-Bibliotheksabhängigkeiten ohne BoM hinzufügen
Wenn Sie die Firebase BoM nicht verwenden, müssen Sie jede Firebase-Bibliotheksversion in der entsprechenden Abhängigkeitszeile angeben.
Wenn du in deiner App mehrere Firebase-Bibliotheken verwendest, empfehlen wir dringend, die BoM zum Verwalten von Bibliotheksversionen zu verwenden. So ist gewährleistet, 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.1.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") }
Das Firebase-Projekt einrichten
Legen Sie den SHA-1-Fingerabdruck Ihres Spiels auf der Seite Einstellungen der Firebase fest.
Sie können den SHA-Hash Ihres Signaturzertifikats mit dem Befehl gradle
signingReport
abrufen:./gradlew signingReport
Aktivieren Sie Google Play Spiele als Anmeldeanbieter:
Suchen Sie die Webserver-Client-ID und den Clientschlüssel Ihres Projekts. Die Webserver-Client-ID identifiziert Ihr Firebase-Projekt gegenüber den Google Play-Authentifizierungsservern.
So ermitteln Sie diese Werte:
- Öffnen Sie in der Google APIs Console Ihr Firebase-Projekt.
- Öffnen Sie im Abschnitt 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.
Öffnen Sie dann in der Firebase Console den Bereich Authentifizierung.
Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter für Play Spiele. Sie müssen die Webserver-Client-ID und das Client-Secret Ihres Projekts angeben, die Sie in der APIs Console erhalten haben.
Play Games services mit Ihren Firebase-App-Informationen konfigurieren
Öffnen Sie in der Google Play-Konsole Ihre Google Play-Anwendung oder erstellen Sie eine.
Klicken Sie im Bereich Wachstum auf Play Games services > Einrichtung und Verwaltung > Konfiguration.
Klicken Sie auf Ja, in meinem Spiel werden bereits Google APIs verwendet, wählen Sie Ihr Firebase-Projekt aus der Liste aus und klicken Sie auf Verwenden.
Klicken Sie auf der Konfigurationsseite für Play Games services auf Anmeldedaten hinzufügen.
- Wählen Sie den Typ Game server aus.
- Wählen Sie im Feld OAuth-Client die Webclient-ID Ihres Projekts aus. Achte darauf, dass dies dieselbe Client-ID ist, die du beim Aktivieren der Play Games-Anmeldung angegeben hast.
- Speichern Sie die Änderungen.
Klicken Sie auf der Konfigurationsseite Play Games services noch einmal auf Anmeldedaten hinzufügen.
- Wählen Sie den Typ Android aus.
- Wählen Sie im Feld OAuth-Client die Android-Client-ID Ihres Projekts aus. Wenn Ihre Android-Client-ID nicht angezeigt wird, legen Sie den SHA-1-Fingerabdruck Ihres Spiels in der Firebase-Konsole fest.
- Speichern Sie die Änderungen.
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 in Play Spiele in Ihr Spiel einbinden
Integrieren Sie zuerst die Play Spiele-Anmeldung in Ihre App. Eine vollständige Anleitung finden Sie unter In Android-Spielen anmelden.
Verwenden Sie in Ihrer Integration beim Erstellen des GoogleSignInOptions
-Objekts die 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 so einrichten, dass die Anmeldedaten für das Google-Konto verwendet werden, die Sie erhalten, wenn sich ein Spieler erfolgreich mit Play Spiele anmeldet.
- Rufen Sie zuerst in der
onCreate
-Methode Ihrer Anmeldeaktivität die freigegebene Instanz desFirebaseAuth
-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();
- Prüfe beim Initialisieren deiner Aktivität, ob der Spieler bereits mit 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.
- 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 über die 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 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 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 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.
Verwenden Sie die vom Google Play Spiele SDK bereitgestellten APIs, um die Play Spiele-Spielerinformationen eines Nutzers abzurufen oder auf Play-Spieldienste zuzugreifen.
So melden Sie einen Nutzer ab:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();