In Unity mit Google Play-Spieldiensten authentifizieren

Mit den Google Play-Spieldiensten können Sie Spieler in einem Android-Spiel anmelden, das auf Firebase und Unity basiert. Wenn Sie die Anmeldung über die Google Play-Spieldienste mit Firebase verwenden möchten, melden Sie den Spieler zuerst bei Google Play-Spielen 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

Unity-Projekt einrichten

  1. Fügen Sie Ihrem Unity-Projekt die Firebase-Konfigurationsdatei und das Firebase Unity SDK hinzu, wie unter Firebase zu Ihrem Unity-Projekt hinzufügen beschrieben. Folgen Sie der Anleitung für Android.

    Achten Sie darauf, FirebaseAuth.unitypackage zu importieren.

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

  3. Wählen Sie dann unter Build-Einstellungen > Player-Einstellungen > Veröffentlichungseinstellungen einen Schlüsselspeicher und einen Schlüssel aus oder erstellen Sie diese, mit denen Ihr Android-Paket signiert wird. Ihr APK muss signiert sein, damit die Anmeldung in Google Play Spiele funktioniert. Diese Anforderung gilt nicht nur für die Veröffentlichung, sondern auch während der Entwicklung Ihres Spiels.

Das Firebase-Projekt einrichten

  1. Rufen Sie in der Firebase Console das Firebase-Projekt auf, in dem Sie Ihr Unity-Projekt registriert haben.

  2. Legen Sie den SHA-1-Fingerabdruck Ihres Spiels auf der Seite Einstellungen der Firebase-Konsole mit dem in Unity festgelegten Schlüssel fest.

    Sie können den SHA-1-Fingerabdruck Ihres Schlüssels mit dem Befehl keytool abrufen:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    Alternativ können Sie den SHA-Hash Ihres Signaturzertifikats mit dem gradle-Befehl signingReport abrufen:

    gradlew signingReport

    Ihr APK muss mit diesem Schlüssel signiert sein, auch während der Entwicklung.

  3. Aktivieren Sie Google Play Games als Anmeldeanbieter:

    1. Öffnen Sie in der Firebase-Konsole den Bereich Authentication.

    2. Generieren und abrufen Sie die Webserver-Client-ID und das Client-Secret Ihres Projekts:

      1. Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Google.

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

    3. Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Play Games und geben Sie die Webserver-Client-ID und den Clientschlüssel Ihres Projekts an, die Sie im letzten Schritt erhalten haben.

Play Games services mit den Informationen Ihrer Firebase-App konfigurieren

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

  2. Klicken Sie im Bereich Wachstum auf Play Games services > Einrichtung und Verwaltung > Konfiguration.

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

  4. Klicken Sie auf der Konfigurationsseite für Play Games services auf Anmeldedaten hinzufügen.

    1. Wählen Sie den Typ Game server aus.
    2. 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.
    3. Speichern Sie die Änderungen.
  5. Klicken Sie auf der Konfigurationsseite Play Games services noch einmal auf Anmeldedaten hinzufügen.

    1. Wählen Sie den Typ Android aus.
    2. Wählen Sie im Feld OAuth-Client die Android-Client-ID Ihres Projekts aus. Wenn Sie Ihre Android-Client-ID nicht sehen, müssen Sie den SHA-1-Fingerabdruck Ihres Spiels in der Firebase-Konsole festlegen.
    3. Speichern Sie die Änderungen.
  6. Erstellen Sie auf den Seiten Ereignisse, Erfolge und Bestenlisten alle Play Games Ressourcen, die Sie in Ihrem Spiel verwenden möchten. Wenn Sie sie nicht 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 beliebige Stelle. Sie benötigen das Snippet, um das Google Play Games services-Plug-in einzurichten.

    Das Ressourcen-Snippet sieht so 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 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

  1. Laden Sie die neueste Version des Play Spiele-Plug-ins für Unity herunter und entpacken Sie es.

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

  3. Richten Sie das Play Spiele-Plug-in ein:

    1. Klicken Sie auf Fenster > Google Play Spiele > Einrichtung > Android-Einrichtung, um den Bildschirm Android-Konfiguration zu öffnen.
    2. Fügen Sie das Android-Ressourcen-Snippet, das Sie aus der Play Console erhalten haben, in das Feld Resources Definition (Ressourcendefinition) ein.
    3. Fügen Sie die Client-ID Ihres Webservers, die Sie bei der Aktivierung der Play Spiele-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 Spiele-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();
    
  5. Wenn sich ein Spieler dann mit Play Spiele anmeldet, rufe Social.localUser.Authenticate()auf:

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

Mit Firebase authentifizieren

Nachdem Sie die Play Spiele-Anmeldung zu Ihrem Spiel hinzugefügt haben, können Sie den Authentifizierungscode aus den Play Spiele-Diensten verwenden, um sich bei Firebase zu authentifizieren.

  1. Nachdem sich der Spieler mit Play Spiele erfolgreich angemeldet hat, rufst du im Handler für die Fortsetzung der Anmeldung 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 aus den Play-Spieldiensten gegen Firebase-Anmeldedaten aus und authentifizieren Sie den Spieler mit den Firebase-Anmeldedaten:

    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 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 über das 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 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.

Wenn Sie die Play Spiele-Spielerinformationen eines Nutzers abrufen oder auf Play Spiele-Dienste zugreifen möchten, verwenden Sie die APIs des Play Spiele-Plug-ins.

So melden Sie einen Nutzer ab:SignOut()

auth.SignOut();