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 über die Google Play-Spieldienste an und fordern Sie dabei einen OAuth 2.0-Autorisierungscode an. Übergeben Sie den Autorisierungscode dann an PlayGamesAuthProvider, um Anmeldedaten für Firebase 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 einem Unity-Projekt hinzufügen beschrieben. Folgen Sie der Anleitung für Android.

    Achten Sie darauf, dass Sie FirebaseAuth.unitypackage importieren.

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

  3. Wählen Sie dann unter Build Settings > Player Settings > Publishing Settings (Build-Einstellungen > Player-Einstellungen > Veröffentlichungseinstellungen) einen Schlüsselspeicher und einen Schlüssel aus oder erstellen Sie einen, der zum Signieren Ihres Android-Pakets verwendet wird. Ihr APK muss signiert sein, damit die Play Games-Anmeldung 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. Geben Sie den SHA-1-Fingerabdruck Ihres Spiels an.

    1. Rufen Sie in der Firebase Console die Einstellungen > Allgemein auf.

    2. Scrollen Sie nach unten zur Karte Meine Apps, wählen Sie Ihre Android-App aus und fügen Sie Ihren SHA-1-Fingerabdruck in das Feld Fingerabdrücke für SHA-Zertifikat ein.

    Mit dem Befehl keytool können Sie den SHA-1-Fingerabdruck Ihres Schlüssels 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

    Weitere Informationen zum Abrufen des SHA-Fingerabdrucks Ihrer App finden Sie unter Client authentifizieren.

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

  3. Google Play Games als Anmeldeanbieter aktivieren:

    1. Wechseln Sie in der Firebase-Konsole zu Sicherheit > Authentifizierung.

    2. Generieren 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 Play Games-Anmeldeanbieter 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 zu 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 Spieleserver aus.
    2. Wählen Sie im Feld OAuth-Client die Webclient-ID Ihres Projekts aus. Achten Sie darauf, dass es sich um dieselbe Client-ID handelt, die Sie beim Aktivieren der Play Games-Anmeldung angegeben haben.
    3. Speichern Sie die Änderungen.
  5. Klicken Sie auf der Konfigurationsseite für 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 Events, Erfolge und Bestenlisten alle Play Games-Ressourcen, die Sie für Ihr Spiel verwenden möchten. Wenn Sie keine sofort verwenden möchten, können Sie einen Platzhalter erstellen. Klicken Sie dann auf einer der Seiten Events, Erfolge oder Bestenlisten auf Ressourcen abrufen und kopieren Sie das Android-Ressourcen-Snippet an einen geeigneten Ort. 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 Play Store veröffentlichen.

Anmeldung über Play Games in Ihr Spiel einbinden

  1. Laden Sie die aktuelle Version des Play Games-Plug-ins für Unity herunter und entpacken Sie sie.

  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. Play Games-Plug-in einrichten:

    1. Klicken Sie auf Fenster > Google Play Games > Einrichtung > Android-Einrichtung, um den Bildschirm Android-Konfiguration zu öffnen.
    2. Fügen Sie den Android-Ressourcenausschnitt, den 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 beim Aktivieren 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 mit Play Spiele anmeldet, rufen Sie Social.localUser.Authenticate() auf:

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

Mit Firebase authentifizieren

Nachdem Sie die Anmeldung über Google Play-Spiele in Ihr Spiel eingebunden haben, können Sie den Autorisierungscode aus den Play Games-Diensten verwenden, um sich bei Firebase zu authentifizieren.

  1. Nachdem sich der Spieler erfolgreich über Play Spiele angemeldet hat, rufen Sie im Handler für die Fortsetzung der Anmeldung einen Autorisierungscode für das Konto des Spielers ab:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Tauschen Sie dann den Autorisierungscode von den Play Games-Diensten gegen Anmeldedaten für Firebase ein 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 Games-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 Spielerinformationen eines Nutzers in Play Games abrufen oder auf Play Games-Dienste zugreifen möchten, verwenden Sie die APIs, die vom Play Games-Plug-in bereitgestellt werden.

Rufen Sie SignOut() auf, um einen Nutzer abzumelden:

auth.SignOut();