Mit den Google Play Games-Diensten können Sie Spieler in einem Android-Spiel anmelden, das auf Firebase basiert. Wenn Sie die Google Play Games-Dienste für die Anmeldung mit Firebase verwenden möchten, melden Sie den Spieler zuerst mit Google Play Games an und fordern Sie dabei einen OAuth 2.0-Authentifizierungscode an. Übergeben Sie den Authentifizierungscode dann an PlayGamesAuthProvider, um Anmeldedaten für Firebase zu generieren, mit denen Sie sich bei Firebase authentifizieren können.
Hinweis
Android-Projekt einrichten
Falls noch nicht geschehen, fügen Sie Ihrem Android-Projekt Firebase hinzu.
Fügen Sie in der Gradle-Datei Ihres 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 müssen Sie im Rahmen der Einrichtung von Firebase Authentication 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:34.11.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.5.1") }Mit der Firebase Android BoM, haben Sie immer eine kompatible Version der Firebase Android-Bibliotheken in Ihrer App.
(Alternative) Firebase-Bibliotheksabhängigkeiten ohne BoM hinzufügen
Wenn Sie die Firebase BoM nicht verwenden möchten, müssen Sie die Version jeder Firebase-Bibliothek in der entsprechenden Abhängigkeitszeile angeben.
Wenn Sie in Ihrer App mehrere Firebase-Bibliotheken verwenden, empfehlen wir dringend, die BoM zur Verwaltung 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:24.0.1")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.5.1") }
Das Firebase-Projekt einrichten
Legen Sie auf der Seite „Einstellungen“ der Firebase Console den SHA-1-Fingerabdruck Ihres Spiels fest.
Sie können den SHA-Hash Ihres Signaturzertifikats mit dem Gradle-Befehl
signingReportabrufen:./gradlew signingReport
Aktivieren Sie Google Play Games als Anmeldeanbieter:
Suchen Sie die Webserver-Client-ID und den Clientschlüssel Ihres Projekts. Die Webserver-Client-ID identifiziert Ihr Firebase-Projekt auf den Google Play-Authentifizierungsservern.
So ermitteln Sie diese Werte:
- Öffnen Sie Ihr Firebase-Projekt auf der Seite „Anmeldedaten“ der Google APIs Console.
- Öffnen Sie 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.
Öffnen Sie dann in der Firebase Konsole den Bereich Authentifizierung.
Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Play Games. Sie müssen die Webserver-Client-ID und den Clientschlüssel Ihres Projekts angeben, die Sie in der APIs Console abgerufen haben.
Play Games services mit den Informationen Ihrer Firebase-App konfigurieren
Öffnen Sie in der Google Play Console, Ihre Google Play App oder erstellen Sie eine.
Klicken Sie im Bereich Wachstum auf Play Games services > Einrichtung und Verwaltung > Konfiguration.
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.
Klicken Sie auf der Play Games services Konfigurationsseite auf Anmeldedaten hinzufügen.
- Wählen Sie den Typ Gameserver aus.
- Wählen Sie im Feld OAuth-Client die Webclient-ID Ihres Projekts aus. Achten Sie darauf, dass dies dieselbe Client-ID ist, die Sie beim Aktivieren der Play Games Anmeldung angegeben haben.
- Speichern Sie die Änderungen.
Klicken Sie auf der Play Games services Konfigurationsseite 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 Sie Ihre Android-Client-ID nicht sehen, prüfen Sie, ob Sie den SHA-1-Fingerabdruck Ihres Spiels in der Firebase Console festgelegt haben.
- Speichern Sie die Änderungen.
Fügen Sie auf der Seite Tester die E-Mail-Adressen aller Nutzer hinzu, die sich in Ihrem Spiel anmelden können müssen, bevor Sie es auf dem Play Store veröffentlichen.
Play Games-Anmeldung in Ihr Spiel einbinden
Binden Sie zuerst die Play Games-Anmeldung in Ihre App ein. Eine vollständige Anleitung finden Sie unter Anmeldung bei Android-Spielen.
Verwenden Sie bei der Erstellung des GoogleSignInOptions-Objekts in Ihrer Integration die Konfiguration DEFAULT_GAMES_SIGN_IN 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 die Webserver-Client-ID an die Methode requestServerAuthCode übergeben.
Das ist die ID, die Sie beim Aktivieren der Play Games-Anmeldung in der
Firebase Console angegeben haben.
Mit Firebase authentifizieren
Nachdem Sie die Play Games-Anmeldung zu Ihrer App hinzugefügt haben, müssen Sie Firebase so einrichten, dass die Google-Kontodaten verwendet werden, die Sie erhalten, wenn sich ein Spieler erfolgreich mit Play Games anmeldet.
- Rufen Sie zuerst in der Methode
onCreateIhrer 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ü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.
- Nachdem sich ein Spieler entweder im Hintergrund oder interaktiv mit Play Games angemeldet hat, rufen Sie den Authentifizierungscode aus dem Objekt
GoogleSignInAccountab, tauschen Sie ihn gegen Anmeldedaten für Firebase ein und authentifizieren Sie sich 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 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 Games-ID verknüpft. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps Ihres Projekts zu identifizieren.
In Ihrem Spiel können Sie 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 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 Play Games abrufen oder auf die Play Games-Dienste 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();