Mit Google Log-in und Unity authentifizieren

Sie können Ihren Nutzern die Möglichkeit geben, sich mit ihren Google-Konten bei Firebase zu authentifizieren, indem Sie Google Log-in in Ihre App einbinden.

Hinweis

Unity-Projekt einrichten

Bevor Sie Firebase Authentication verwenden können, müssen Sie Folgendes tun:

  • Registrieren Sie Ihr Unity-Projekt und konfigurieren Sie es für die Verwendung von Firebase.

    • Wenn Ihr Unity-Projekt bereits Firebase verwendet, ist es schon für Firebase registriert und konfiguriert.

    • Wenn Sie kein Unity-Projekt haben, können Sie eine Beispiel-App herunterladen.

  • Fügen Sie Ihrem Unity-Projekt das Firebase Unity SDK (insbesondere FirebaseAuth.unitypackage) hinzu.

Wenn Sie Firebase zu Ihrem Unity-Projekt hinzufügen, müssen Sie sowohl in der Firebase Console als auch in Ihrem offenen Unity-Projekt Aufgaben ausführen. Sie laden beispielsweise Firebase-Konfigurationsdateien aus der Console herunter und verschieben sie dann in Ihr Unity-Projekt.

Firebase-Projekt und Anmeldedaten einrichten

  1. Android: Geben Sie den SHA-1-Fingerabdruck Ihrer App in der Firebase Console an:

    1. Rufen Sie in der Firebase-Konsole die Einstellungen > Tab Allgemein auf.
    2. Rufen Sie die Karte Meine Apps auf, wählen Sie Ihre Android-App aus und fügen Sie Ihren SHA-1-Fingerabdruck im Feld SHA-Zertifikat-Fingerabdrücke hinzu.

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

      keytool -keystore path-to-keystore.keystore -list -v
      

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

  2. Aktivieren Sie „Google Log-in“ und kopieren Sie Ihre Web-Client-ID:

    1. Rufen Sie in der Firebase-Konsole Sicherheit > Authentifizierung auf.
    2. Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Google.
    3. Maximieren Sie den Bereich Web SDK-Konfiguration und kopieren Sie Ihre Webclient-ID (z. B. 123456-abc.apps.googleusercontent.com). Diese stellt die Zielgruppenforderung (aud) Ihrer ID-Tokens dar und ist sowohl für Android als auch für iOS erforderlich.
    4. Klicken Sie auf Speichern.
  3. Firebase-Konfigurationsdateien aktualisieren und umgekehrte iOS-Client-ID kopieren:

    1. Laden Sie die neuesten Firebase-Konfigurationsdateien aus der Firebase-Konsole herunter (google-services.json für Android und GoogleService-Info.plist für iOS) und ersetzen Sie alle älteren Kopien in Ihrem Unity-Projekt. (Siehe Firebase zu einem Unity-Projekt hinzufügen.)
    2. iOS: Öffnen Sie die Datei GoogleService-Info.plist und kopieren Sie den Wert des Schlüssels REVERSED_CLIENT_ID (z. B. com.googleusercontent.apps.12345-abc). Dieser Wert ist erforderlich, um das iOS-Weiterleitungs-URL-Schema zu konfigurieren.

Binden Sie das Google Log-in-Plug-in in Ihr Unity-Projekt ein.

  1. Plug-in importieren:

    1. Wenn Sie die Integration in ein bestehendes Projekt vornehmen, sichern Sie Ihr Projekt und entfernen Sie alle älteren Google Log-in-Plug-ins, bevor Sie fortfahren.
    2. Laden Sie GoogleSignInNative.unitypackage von GitHub herunter und importieren Sie es in Ihr Unity-Projekt (Assets > Import Package > Custom Package). Achten Sie darauf, dass alle Dateien ausgewählt sind, und klicken Sie auf Importieren.
  2. Plug-in-Einstellungen konfigurieren:

    1. Gehen Sie im Unity-Editor zu Window > Google Log-in Native > Settings.
    2. Fügen Sie Ihre Webclient-ID in das erste Feld ein.
    3. Fügen Sie die umgekehrte iOS-Client-ID in das zweite Feld ein.
    4. Klicken Sie auf Save Settings (Einstellungen speichern).
  3. Native Abhängigkeiten auflösen:

    1. Gehen Sie zu Assets > External Dependency Manager > Android Resolver > Force Resolve.
    2. Warten Sie auf die Bestätigungsmeldung. Dadurch werden die nativen Credential Manager-Bibliotheken googleid und androidx heruntergeladen.

Auf die Klasse Firebase.Auth.FirebaseAuth zugreifen

Die Klasse FirebaseAuth ist das Gateway für alle API-Aufrufe. Der Zugriff erfolgt über FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Mit Firebase authentifizieren

  1. GoogleSignInManager in deiner Szene einrichten:

    1. Erstellen Sie in Ihrer ersten Szene ein leeres GameObject mit dem Namen GoogleSignInManager.
    2. Hängen Sie das Skript GoogleSignInManager.cs an.
    3. Ziehen Sie das Asset GoogleSignInNativeSettings (in Assets/GoogleSignInNative/Resources) in den Slot Sign In Settings des Skripts.
  2. Google Log-in auslösen und das ID-Token gegen Firebase-Anmeldedaten eintauschen:

    Erstellen Sie ein Controller-Script, das GoogleSignInManager.OnSignInCompleted und GoogleSignInManager.OnSignInFailed abonniert, die Anmeldung mit GoogleSignInManager.Instance.StartSignIn() auslöst und das resultierende Google-ID-Token mithilfe von GoogleAuthProvider.GetCredential gegen Firebase-Anmeldedaten austauscht:

    using Firebase.Auth;
    using Firebase.Extensions;
    using UnityEngine;
    
    public class MyAuthController : MonoBehaviour
    {
        private FirebaseAuth auth;
    
        private void Awake()
        {
            auth = FirebaseAuth.DefaultInstance;
        }
    
        private void OnEnable()
        {
            GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed += HandleSignInFailure;
        }
    
        private void OnDisable()
        {
            GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed -= HandleSignInFailure;
        }
    
        public void OnSignInButtonClick()
        {
            GoogleSignInManager.Instance.StartSignIn();
        }
    
        private void HandleSignInSuccess(string idToken)
        {
            Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase...");
    
            Credential credential = GoogleAuthProvider.GetCredential(idToken, null);
            auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => {
                if (task.IsCanceled)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
                    return;
                }
                if (task.IsFaulted)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
                    return;
                }
    
                AuthResult result = task.Result;
                Debug.LogFormat("User signed in successfully: {0} ({1})",
                    result.User.DisplayName, result.User.UserId);
            });
        }
    
        private void HandleSignInFailure(string error)
        {
            Debug.LogError($"[Auth] Google Sign-In failed: {error}");
        }
    }
    

App erstellen

Android

  • Achten Sie darauf, dass der Paketname in den Playereinstellungen genau mit Ihren Firebase- und Google Cloud-OAuth-Anmeldedaten übereinstimmt.
  • Achten Sie darauf, dass das Mindest-API-Level auf 34 oder höher festgelegt ist.
  • Klicken Sie auf Build and Run (Erstellen und ausführen).

iOS

  • Erstellen Sie Ihr Projekt in Unity, um ein Xcode-Projekt zu generieren, und öffnen Sie dann die generierte .xcworkspace-Datei.
  • Gehen Sie in Xcode zum Tab Signing & Capabilities und wählen Sie Ihr Development Team aus.
  • Das Plug-in fügt Ihrem Xcode-Projekt automatisch das benutzerdefinierte URL-Schema (REVERSED_CLIENT_ID) hinzu. Erstellen Sie die App und führen Sie sie auf einem physischen Gerät aus.

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und dem Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.

  • In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers über das Objekt Firebase.Auth.FirebaseUser abrufen:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // 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 Sicherheitsregeln für 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.

Sie können Nutzern erlauben, sich mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.

Wenn Sie einen Nutzer abmelden möchten, rufen Sie SignOut() auf:

auth.SignOut();