Sie können Google Play Games-Dienste verwenden, um Spieler bei einem Android-Spiel anzumelden, das auf Firebase und Unity basiert. Um die Google Play Games-Dienste zu verwenden, melden Sie sich mit Firebase an, melden Sie sich zuerst mit dem Player 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, mit denen Sie sich bei Firebase authentifizieren können.
Bevor Sie beginnen
Richten Sie Ihr Unity-Projekt ein
Fügen Sie die Firebase-Konfigurationsdatei und das Firebase Unity SDK zu Ihrem Unity-Projekt hinzu, wie unter Hinzufügen von Firebase zu Ihrem Unity-Projekt beschrieben. Befolgen Sie die Anweisungen für Android.
Achten Sie darauf,
FirebaseAuth.unitypackage
zu importieren.Legen Sie im Unity-Editor unter Build-Einstellungen > Player-Einstellungen > Andere Einstellungen den Android-Paketnamen Ihres Spiels fest.
Wählen oder erstellen Sie dann unter Build-Einstellungen > Player-Einstellungen > Veröffentlichungseinstellungen einen Schlüsselspeicher und Schlüssel, die zum Signieren Ihres Android-Pakets verwendet werden. Ihr APK muss signiert sein, damit die Anmeldung bei Play Games funktioniert. Diese Anforderung gilt nicht nur für die Veröffentlichung, sondern auch während der Entwicklung Ihres Spiels.
Richten Sie Ihr Firebase-Projekt ein
Wechseln Sie in der Firebase-Konsole zu dem Firebase-Projekt, in dem Sie Ihr Unity-Projekt registriert haben.
Legen Sie den SHA-1-Fingerabdruck Ihres Spiels auf der Seite „Einstellungen“ der Firebase-Konsole fest, indem Sie den Schlüssel verwenden, den Sie in Unity festgelegt haben.
Sie können den SHA-1-Fingerabdruck Ihres Schlüssels mit dem
keytool
Befehl abrufen:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
Alternativ können Sie den SHA-Hash Ihres Signaturzertifikats mit dem Befehl gradle
signingReport
abrufen:gradlew signingReport
Ihr APK muss mit diesem Schlüssel signiert werden, auch während der Entwicklung.
Aktivieren Sie Google Play Games als Anmeldeanbieter:
Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung .
Generieren und erhalten Sie die Webserver-Client-ID und das Client-Secret Ihres Projekts:
Aktivieren Sie auf der Registerkarte Anmeldemethode den Google -Anmeldeanbieter.
Kopieren Sie die Client-ID und das Geheimnis des Webservers vom Google -Anmeldeanbieter.
Aktivieren Sie auf der Registerkarte Anmeldemethode den Play Games -Anmeldeanbieter und geben Sie die Webserver-Client-ID und den geheimen Clientschlüssel Ihres Projekts an, die Sie im letzten Schritt erhalten haben.
Konfigurieren Sie Play Games-Dienste mit Ihren Firebase-App-Informationen
Öffnen Sie in der Google Play Console Ihre Google Play App oder erstellen Sie eine.
Klicken Sie im Abschnitt Erweitern auf Play Games-Dienste > Einrichtung und Verwaltung > Konfiguration .
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 .
Klicken Sie auf der Konfigurationsseite der Play Games-Dienste auf Anmeldedaten hinzufügen .
- Wählen Sie den Spielservertyp aus.
- Wählen Sie im Feld OAuth-Client die Web-Client-ID Ihres Projekts aus. Stellen Sie sicher, dass dies die gleiche Client-ID ist, die Sie bei der Aktivierung der Play Games-Anmeldung angegeben haben.
- Speichern Sie Ihre Änderungen.
Klicken Sie auf der Konfigurationsseite der Play Games-Dienste erneut auf Anmeldedaten hinzufügen .
- Wählen Sie den Android- Typ aus.
- Wählen Sie im Feld OAuth-Client die Android-Client-ID Ihres Projekts aus. (Wenn Sie Ihre Android-Client-ID nicht sehen, achten Sie darauf, den SHA-1-Fingerabdruck Ihres Spiels in der Firebase-Konsole festzulegen.)
- Speichern Sie Ihre Änderungen.
Erstellen Sie auf den Seiten „Events“ , „Erfolge “ und „Bestenlisten“ alle Play Spiele-Ressourcen, die Sie mit Ihrem Spiel verwenden möchten (wenn Sie keine sofort verwenden möchten, können Sie einen Platzhaltereintrag erstellen). Klicken Sie dann auf einer der Seiten Events , Achievements oder Leaderboards auf Ressourcen abrufen und kopieren Sie das Android-Ressourcen-Snippet an einen geeigneten Ort. Sie benötigen das Snippet, um das Plug-in für die Google Play Games-Dienste einzurichten.
Das Ressourcen-Snippet sieht wie im folgenden Beispiel aus:
<?xml version="1.0" encoding="utf-8"?> <!-- Google Play game services IDs. Save this file as res/values/games-ids.xml in your project. --> <resources> <!-- app_id --> <string name="app_id" translatable="false">123456789000</string> <!-- package_name --> <string name="package_name" translatable="false">com.example.game</string> <!-- event Wiped Raid --> <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string> </resources>
Fügen Sie auf der Seite Tester die E-Mail-Adressen aller Benutzer hinzu, die sich bei Ihrem Spiel anmelden können müssen, bevor Sie es im Play Store veröffentlichen.
Integrieren Sie die Play Games-Anmeldung in Ihr Spiel
Laden Sie die neueste Version des Play Games-Plug-ins für Unity herunter und extrahieren Sie sie.
Importieren Sie das Unity-Paket des Plugins in Ihr Unity-Projekt. Sie finden das Unity-Paket im
current-build
Verzeichnis des Release-Archivs.Richten Sie das Play Games-Plug-in ein:
- Klicken Sie auf Windows > Google Play Games > Setup > Android Setup , um den Android-Konfigurationsbildschirm zu öffnen.
- Fügen Sie das Android-Ressourcen-Snippet, das Sie von der Play-Konsole erhalten haben, in das Feld Ressourcendefinition ein.
- Fügen Sie Ihre Webserver-Client-ID, die Sie bei der Aktivierung der Play Games-Anmeldung in der Firebase-Konsole angegeben haben, in das Feld „Client-ID“ ein.
- Klicken Sie auf Einrichten .
Konfigurieren Sie in Ihrem Spiel einen Play Games-Client mit aktivierter
RequestServerAuthCode
-Einstellung:using GooglePlayGames; using GooglePlayGames.BasicApi; using UnityEngine.SocialPlatforms; using System.Threading.Tasks; PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder() .RequestServerAuthCode(false /* Don't force refresh */) .Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.Activate();
Wenn sich ein Spieler dann bei Play Games anmeldet, rufen Sie
Social.localUser.Authenticate()
auf:Social.localUser.Authenticate((bool success) => { // handle success or failure });
Authentifizieren Sie sich mit Firebase
Nachdem Sie die Play Games-Anmeldung zu Ihrem Spiel hinzugefügt haben, können Sie den Authentifizierungscode der Play Games-Dienste verwenden, um sich bei Firebase zu authentifizieren.
Nachdem sich der Spieler erfolgreich über Play Games angemeldet hat, rufen Sie im Anmeldefortsetzungs-Handler einen Authentifizierungscode für das Konto des Spielers ab:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
Tauschen Sie dann den Authentifizierungscode von Play Games-Diensten gegen Firebase-Anmeldedaten aus und verwenden Sie die Firebase-Anmeldedaten, um den Spieler zu authentifizieren:
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance; Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
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 verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren.
In Ihrem Spiel können Sie die Firebase-UID des Benutzers aus dem Firebase.Auth.FirebaseUser
Objekt abrufen:
Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
string playerName = user.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 User.TokenAsync() instead.
string uid = user.UserId;
}
In Ihren Firebase-Echtzeitdatenbank- und Cloudspeicher-Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth
Variable 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 Play Games-Plug-in bereitgestellten APIs.
Um einen Benutzer abzumelden, rufen Sie SignOut()
auf:
auth.SignOut();