Uwierzytelnij za pomocą Logowania przez Google i Unity

Możesz zezwolić użytkownikom na uwierzytelnianie w Firebase za pomocą kont Google, integrując Logowanie przez Google z aplikacją.

Zanim zaczniesz

Konfigurowanie projektu Unity

Zanim zaczniesz korzystać z Firebase Authentication, musisz:

  • Zarejestruj projekt Unity i skonfiguruj go tak, aby korzystał z Firebase.

    • Jeśli Twój projekt Unity korzysta już z Firebase, jest już zarejestrowany i skonfigurowany pod kątem Firebase.

    • Jeśli nie masz projektu Unity, możesz pobrać przykładową aplikację.

  • Dodaj do projektu Unity pakiet SDK Firebase Unity (a konkretnie FirebaseAuth.unitypackage).

Pamiętaj, że dodanie Firebase do projektu Unity wymaga wykonania zadań zarówno w konsoli Firebase, jak i w otwartym projekcie Unity (np. musisz pobrać pliki konfiguracji Firebase z konsoli, a następnie przenieść je do projektu Unity).

Konfigurowanie projektu w Firebase i danych logowania

  1. Android: podaj odcisk cyfrowy SHA-1 aplikacji w konsoli Firebase:

    1. W konsoli Firebase otwórz Ustawienia > karta Ogólne.
    2. Otwórz kartę Twoje aplikacje, wybierz aplikację na Androida i dodaj odcisk cyfrowy SHA-1 w polu Odciski cyfrowe certyfikatu SHA.

      Odcisk cyfrowy SHA-1 magazynu kluczy możesz pobrać za pomocą keytool:

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

      Więcej informacji o pobieraniu odcisku cyfrowego SHA aplikacji znajdziesz w artykule Uwierzytelnianie klienta.

  2. Włącz Logowanie przez Google i skopiuj identyfikator klienta internetowego:

    1. W konsoli Firebase otwórz Zabezpieczenia > Uwierzytelnianie.
    2. Na karcie Sign-in method (Metoda logowania) włącz dostawcę logowania Google.
    3. Rozwiń sekcję Konfiguracja pakietu Web SDK i skopiuj identyfikator klienta internetowego (np. 123456-abc.apps.googleusercontent.com). Reprezentuje on oświadczenie o odbiorcach (aud) Twoich tokenów identyfikacji i jest wymagany zarówno w przypadku Androida, jak i iOS.
    4. Kliknij Zapisz.
  3. Zaktualizuj pliki konfiguracji Firebase i skopiuj odwrócony identyfikator klienta iOS:

    1. Pobierz najnowsze pliki konfiguracji Firebase z konsoli Firebase (google-services.json na Androida i GoogleService-Info.plist na iOS) i zastąp nimi starsze kopie w projekcie Unity. (patrz Dodawanie Firebase do projektu Unity).
    2. iOS: otwórz plik GoogleService-Info.plist i skopiuj wartość klucza REVERSED_CLIENT_ID (np. com.googleusercontent.apps.12345-abc). Ta wartość jest wymagana do skonfigurowania schematu URI adresu URL przekierowania na iOS.

Integracja wtyczki Logowanie przez Google z projektem Unity

  1. Zaimportuj wtyczkę:

    1. Jeśli przeprowadzasz integrację z istniejącym projektem, utwórz kopię zapasową projektu i usuń starsze wtyczki logowania przez Google, zanim przejdziesz dalej.
    2. Pobierz GoogleSignInNative.unitypackage z GitHub i zaimportuj do projektu Unity (Zasoby > Importuj pakiet > Pakiet niestandardowy). Upewnij się, że wszystkie pliki są zaznaczone, i kliknij Importuj.
  2. Skonfiguruj ustawienia wtyczki:

    1. W edytorze Unity kliknij Window > Google Sign-In Native > Settings (Okno > Logowanie przez Google > Ustawienia).
    2. Wklej identyfikator klienta sieci Web w pierwszym polu.
    3. Wklej odwrócony identyfikator klienta iOS w drugim polu.
    4. Kliknij Save Settings (Zapisz ustawienia).
  3. Rozwiązywanie zależności natywnych:

    1. Kliknij Assets > External Dependency Manager > Android Resolver > Force Resolve (Zasoby > Menedżer zależności zewnętrznych > Narzędzie do rozwiązywania problemów z Androidem > Wymuś rozwiązanie).
    2. Poczekaj na komunikat o powodzeniu. Spowoduje to pobranie natywnych bibliotek googleid i androidx Credential Manager.

Dostęp do zajęć Firebase.Auth.FirebaseAuth

Klasa FirebaseAuth jest bramą dla wszystkich wywołań interfejsu API. Można go uzyskać za pomocą FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Uwierzytelnianie za pomocą Firebase

  1. Skonfiguruj GoogleSignInManager w scenie:

    1. Utwórz pusty obiekt GameObject w scenie początkowej o nazwie GoogleSignInManager.
    2. Dołącz do niego skrypt GoogleSignInManager.cs.
    3. Przeciągnij zasób GoogleSignInNativeSettings (znajdujący się w Assets/GoogleSignInNative/Resources) do pola Sign In Settings (Ustawienia logowania) w skrypcie.
  2. Uruchom Logowanie przez Google i wymień token identyfikacji na dane logowania Firebase:

    Utwórz skrypt kontrolera, który subskrybuje GoogleSignInManager.OnSignInCompleted i GoogleSignInManager.OnSignInFailed, aktywuje logowanie za pomocą GoogleSignInManager.Instance.StartSignIn() i wymienia wynikowy token identyfikatora Google na dane logowania Firebase za pomocą GoogleAuthProvider.GetCredential:

    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}");
        }
    }
    

Tworzenie aplikacji

Android

  • Upewnij się, że nazwa pakietu w ustawieniach odtwarzacza dokładnie odpowiada danym logowania OAuth Firebase i Google Cloud.
  • Upewnij się, że minimalny poziom API jest ustawiony na 34 lub wyższy.
  • Kliknij Build and Run (Skompiluj i uruchom).

iOS

  • Skompiluj projekt w Unity, aby wygenerować projekt Xcode, a następnie otwórz wygenerowany plik .xcworkspace.
  • W Xcode otwórz kartę Signing & Capabilities (Podpisywanie i funkcje) i wybierz Development Team (Zespół programistów).
  • Wtyczka automatycznie dodaje niestandardowy schemat URI adresu URL (REVERSED_CLIENT_ID) do projektu Xcode. Skompiluj i uruchom na urządzeniu fizycznym.

Dalsze kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z danymi logowania, czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania, których użytkownik użył do zalogowania się. To nowe konto jest przechowywane w projekcie w Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie, niezależnie od tego, jak się loguje.

  • W aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu Firebase.Auth.FirebaseUser:

    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;
    }
  • W Firebase Realtime Database i Cloud Storage regułach zabezpieczeń możesz pobrać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj SignOut():

auth.SignOut();