Mit den Google Play Games-Diensten können sich Spieler in einem Android-Spiel anmelden, das auf Firebase basiert. Wenn du die Anmeldung über die Google Play Games-Dienste mit Firebase verwenden möchtest, melde den Spieler zuerst bei Google Play Games an und fordere dabei einen OAuth 2.0-Autorisierungscode an. Übergebe den Autorisierungscode dann an PlayGamesAuthProvider, um Anmeldedaten für Firebase zu generieren, mit denen du dich bei Firebase authentifizieren kannst.
Hinweis
Android-Projekt einrichten
Falls noch nicht geschehen, füge deinem Android-Projekt Firebase hinzu.
Füge in der Gradle-Datei des Moduls (auf Anwendungsebene) (in der Regel
<project>/<app-module>/build.gradle.ktsoder<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 Bibliotheksversionierung zu steuern.Außerdem musst du im Rahmen der Einrichtung von Firebase Authentication das Google Play-Dienste SDK zu deiner App hinzufügen.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.15.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.6.0") }Mit der Firebase Android BoM, hast du immer eine kompatible Version der Firebase Android-Bibliotheken in deiner App.
(Alternative) Firebase-Bibliotheksabhängigkeiten ohne Verwendung der BoM
Wenn du die Firebase BoM nicht verwenden möchtest, musst du die Version jeder Firebase-Bibliothek in der entsprechenden Abhängigkeitszeile angeben.
Wenn du in deiner App mehrere Firebase-Bibliotheken verwendest, empfehlen wir dringend, die BoM zu verwenden, um die Bibliotheksversionen 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:24.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.6.0") }
Das Firebase-Projekt einrichten
Rufe in der Firebase Console Security > Authentication auf.
Lege auf dem Tab Einstellungen den SHA-1-Fingerabdruck deines Spiels fest.
Du kannst den SHA-Hash deines Signaturzertifikats mit dem Gradle-Befehl
signingReportabrufen:./gradlew signingReport
Aktiviere Google Play Games als Anmeldeanbieter:
Suche die Webserver-Client-ID und den Clientschlüssel deines Projekts. Die Webserver-Client-ID identifiziert dein Firebase-Projekt auf den Google Play-Authentifizierungsservern.
So ermittelst du diese Werte:
- Öffne dein Firebase-Projekt auf der Seite Anmeldedaten der Google APIs Console.
- Öffne im Bereich OAuth 2.0-Client-IDs die Detailseite Webclient (von Google-Dienst automatisch erstellt). Auf dieser Seite sind die Webserver-Client-ID und der Clientschlüssel aufgeführt.
Kehre zur Firebase Console zurück und rufe Security > Authentication auf.
Aktiviere auf dem Tab Anmeldemethode den Anmeldeanbieter Play Games. Du musst die Webserver-Client-ID und den Clientschlüssel deines Projekts angeben, die du in der APIs Console abgerufen hast.
Play Games services mit den Informationen deiner Firebase-App konfigurieren
Öffne in der Google Play Console, deine Google Play App oder erstelle eine.
Klicke im Bereich Wachstum auf Play Games services > Einrichtung und Verwaltung > Konfiguration.
Klicke auf Ja, in meinem Spiel kommen bereits Google-APIs zum Einsatz, wähle dein Firebase Projekt aus der Liste aus und klicke dann auf Verwenden.
Klicke auf der Play Games services Konfigurationsseite auf Anmeldedaten hinzufügen.
- Wähle den Typ Game-Server aus.
- Wähle im Feld OAuth-Client die Webclient-ID deines Projekts aus. Achte darauf, dass dies dieselbe Client-ID ist, die du beim Aktivieren der Play Games Anmeldung angegeben hast.
- Speichere die Änderungen.
Klicke noch einmal auf der Play Games services Konfigurationsseite auf Anmeldedaten hinzufügen.
- Wähle den Typ Android aus.
- Wähle im Feld OAuth-Client die Android-Client-ID deines Projekts aus. Wenn du deine Android-Client-ID nicht siehst, musst du den SHA-1-Fingerabdruck deines Spiels in der Firebase Console festlegen.
- Speichere die Änderungen.
Füge auf der Seite Tester die E-Mail-Adressen aller Nutzer hinzu, die sich in deinem Spiel anmelden können müssen, bevor du es im Play Store veröffentlichst.
Anmeldung über Play Games in dein Spiel einbinden
Binde zuerst die Anmeldung über Play Games in deine App ein. Eine vollständige Anleitung findest du unter In Android-Spielen anmelden.
Verwende bei der Erstellung des GoogleSignInOptions-Objekts in deiner Integration die Konfiguration DEFAULT_GAMES_SIGN_IN und rufe 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();
Du musst die Webserver-Client-ID an die Methode requestServerAuthCode übergeben.
Das ist die ID, die du beim Aktivieren der Anmeldung über Play Games in der
Firebase Console angegeben hast.
Mit Firebase authentifizieren
Nachdem du die Anmeldung über Play Games zu deiner App hinzugefügt hast, musst du Firebase so einrichten, dass die Google-Kontodaten verwendet werden, die du erhältst, wenn sich ein Spieler erfolgreich über Play Games anmeldet.
Rufe zuerst in der Methode
onCreatedeiner Anmeldeaktivität die freigegebene Instanz des ObjektsFirebaseAuthab:Kotlin
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 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); }
Wenn der Spieler nicht angemeldet ist, zeige ihm die Abmeldungsoberfläche deines Spiels an, einschließlich der Option zur Anmeldung.
Nachdem sich ein Spieler entweder im Hintergrund oder interaktiv über Play Games angemeldet hat, rufe den Autorisierungscode aus dem Objekt
GoogleSignInAccountab, tausche ihn gegen Anmeldedaten für Firebase ein und authentifiziere dich mit den Firebase-Anmeldedaten bei Firebase: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
signInWithCredentialerfolgreich ist, kannst du mit der MethodegetCurrentUserdie Kontodaten des Nutzers abrufen.
Nächste Schritte
Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit seiner Play Games-ID verknüpft. Dieses neue Konto wird als Teil deines Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps deines Projekts zu identifizieren.
In deinem Spiel kannst du die Firebase-UID des Nutzers aus dem Objekt FirebaseUser 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 den Sicherheitsregeln für die Firebase Realtime Database und Cloud Storage kannst du die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Wenn du die Play Games-Spielerinformationen eines Nutzers abrufen oder auf die Play Games-Dienste zugreifen möchtest, verwende die APIs, die vom Google Play Games SDK bereitgestellt werden.
Rufe FirebaseAuth.signOut() auf, um einen Nutzer abzumelden:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();