Authentifizieren Sie sich in Unity mithilfe der Google Play Games Services

Sie können die Dienste von Google Play Games nutzen, um Spieler bei einem Android-Spiel anzumelden, das auf Firebase und Unity basiert. Um die Anmeldung bei den Google Play Games-Diensten mit Firebase zu nutzen, melden Sie den Player zunächst 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, die Sie zur Authentifizierung bei Firebase verwenden können.

Bevor Sie beginnen

Richten Sie Ihr Unity-Projekt ein

  1. 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.

    Stellen Sie sicher, dass Sie FirebaseAuth.unitypackage importieren.

  2. Legen Sie im Unity-Editor unter Build-Einstellungen > Player-Einstellungen > Andere Einstellungen den Android-Paketnamen Ihres Spiels fest.

  3. Wählen Sie dann unter Build-Einstellungen > Player-Einstellungen > Veröffentlichungseinstellungen einen Keystore und einen Schlüssel aus oder erstellen Sie einen, der zum Signieren Ihres Android-Pakets verwendet wird. Damit die Anmeldung bei Play Games funktioniert, muss Ihr APK signiert sein. Diese Anforderung gilt nicht nur für die Veröffentlichung, sondern auch während der Entwicklung Ihres Spiels.

Richten Sie Ihr Firebase-Projekt ein

  1. Gehen Sie in der Firebase-Konsole zu dem Firebase-Projekt, in dem Sie Ihr Unity-Projekt registriert haben.

  2. 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 erhalten:

    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.

  3. Aktivieren Sie Google Play Games als Anmeldeanbieter:

    1. Öffnen Sie in der Firebase-Konsole den Abschnitt „Authentifizierung“ .

    2. Generieren und erhalten Sie die Webserver-Client-ID und das Client-Geheimnis Ihres Projekts:

      1. Aktivieren Sie auf der Registerkarte „Anmeldemethode“ den Google -Anmeldeanbieter.

      2. Kopieren Sie die Client-ID und das Geheimnis des Webservers vom Google -Anmeldeanbieter.

    3. Aktivieren Sie auf der Registerkarte „Anmeldemethode“ den Anmeldeanbieter „Play Games“ und geben Sie die Webserver-Client-ID und das Client-Geheimnis Ihres Projekts an, die Sie im letzten Schritt erhalten haben.

Konfigurieren Sie Play Games-Dienste mit Ihren Firebase-App-Informationen

  1. Öffnen Sie in der Google Play Console Ihre Google Play-App oder erstellen Sie eine.

  2. Klicken Sie im Abschnitt „Erweitern“ auf Play Games-Dienste > Einrichtung und Verwaltung > Konfiguration .

  3. 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 .

  4. Klicken Sie auf der Konfigurationsseite der Play Games-Dienste auf Anmeldeinformationen hinzufügen .

    1. Wählen Sie den Gameservertyp aus.
    2. Wählen Sie im Feld „OAuth-Client“ die Web-Client-ID Ihres Projekts aus. Stellen Sie sicher, dass es sich um dieselbe Client-ID handelt, die Sie angegeben haben, als Sie die Play Games-Anmeldung aktiviert haben.
    3. Speichern Sie Ihre Änderungen.
  5. Klicken Sie immer noch auf der Konfigurationsseite der Play Games-Dienste erneut auf Anmeldeinformationen hinzufügen .

    1. Wählen Sie den Android- Typ aus.
    2. Wählen Sie im Feld „OAuth-Client“ die Android-Client-ID Ihres Projekts aus. (Wenn Sie Ihre Android-Client-ID nicht sehen, stellen Sie sicher, dass Sie den SHA-1-Fingerabdruck Ihres Spiels in der Firebase-Konsole festgelegt haben.)
    3. Speichern Sie Ihre Änderungen.
  6. Erstellen Sie auf den Seiten „Ereignisse “, „Erfolge “ und „Bestenlisten“ alle Play Games-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 „ Ereignisse “, „Erfolge “ oder „Bestenlisten“ auf „ Ressourcen abrufen“ und kopieren Sie das Android-Ressourcen-Snippet an eine geeignete Stelle. Sie benötigen das Snippet, um das Google Play Games-Dienste-Plugin 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>
    
  7. Fügen Sie auf der Seite „Tester“ die E-Mail-Adressen aller Benutzer hinzu, die sich bei Ihrem Spiel anmelden müssen müssen, bevor Sie es im Play Store veröffentlichen.

Integrieren Sie die Play Games-Anmeldung in Ihr Spiel

  1. Laden Sie die neueste Version des Play Games-Plugins für Unity herunter und extrahieren Sie es.

  2. Importieren Sie das Unity-Paket des Plugins in Ihr Unity-Projekt. Sie finden das Unity-Paket im current-build Verzeichnis des Release-Archivs.

  3. Richten Sie das Play Games-Plugin ein:

    1. Klicken Sie auf Fenster > Google Play-Spiele > Setup > Android-Setup , um den Android-Konfigurationsbildschirm zu öffnen.
    2. Fügen Sie das Android-Ressourcen-Snippet, das Sie von der Play-Konsole erhalten haben, in das Feld „Ressourcendefinition“ ein.
    3. 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.
    4. Klicken Sie auf „Einrichten“ .
  4. Konfigurieren Sie in Ihrem Spiel einen Play Games-Client mit aktivierter Einstellung RequestServerAuthCode :

    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();
    
  5. 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 zur Authentifizierung bei Firebase verwenden.

  1. 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();
      }
    });
    
  2. Tauschen Sie dann den Authentifizierungscode von den Play Games-Diensten gegen Firebase-Anmeldeinformationen aus und verwenden Sie die Firebase-Anmeldeinformationen, 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 zur Identifizierung eines Benutzers in jeder App in Ihrem Projekt verwendet werden.

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 Cloud-Speicher-Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

Um die Play Games-Spielerinformationen eines Benutzers abzurufen oder auf Play Games-Dienste zuzugreifen, verwenden Sie die vom Play Games-Plugin bereitgestellten APIs.

Um einen Benutzer abzumelden, rufen Sie SignOut() auf:

auth.SignOut();