Uwierzytelnij się za pomocą Yahoo i Unity

Możesz pozwolić swoim użytkownikom na uwierzytelnianie w Firebase przy użyciu dostawców OAuth, takich jak Yahoo, integrując internetowe ogólne logowanie OAuth ze swoją aplikacją za pomocą pakietu SDK Firebase w celu przeprowadzenia kompleksowego procesu logowania. Ponieważ ten przepływ wymaga użycia zestawów SDK Firebase na telefon, jest obsługiwany tylko na platformach Android i Apple.

Zanim zaczniesz

Zanim będziesz mógł skorzystać z uwierzytelniania Firebase , musisz:

  • Zarejestruj swój projekt Unity i skonfiguruj go do korzystania z Firebase.

    • Jeśli Twój projekt Unity korzysta już z Firebase, oznacza to, że jest już zarejestrowany i skonfigurowany dla Firebase.

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

  • Dodaj pakiet SDK Firebase Unity (w szczególności FirebaseAuth.unitypackage ) do swojego projektu Unity.

Pamiętaj, że dodanie Firebase do projektu Unity obejmuje zadania zarówno w konsoli Firebase , jak i w otwartym projekcie Unity (na przykład pobierasz pliki konfiguracyjne Firebase z konsoli, a następnie przenosisz je do projektu Unity).

Uzyskaj dostęp do klasy Firebase.Auth.FirebaseAuth

Klasa FirebaseAuth jest bramą dla wszystkich wywołań API. Jest dostępny poprzez FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Obsługuj proces logowania za pomocą pakietu SDK Firebase

Aby obsłużyć proces logowania za pomocą pakietu SDK Firebase, wykonaj następujące kroki:

  1. Utwórz instancję FederatedOAuthProviderData skonfigurowaną z identyfikatorem dostawcy odpowiednim dla Yahoo.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    providerData.ProviderId = Firebase.Auth.YahooAuthProvider.ProviderId;
    
  2. Opcjonalnie : określ dodatkowe niestandardowe parametry OAuth, które chcesz wysłać z żądaniem OAuth.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Prompt user to re-authenticate to Yahoo.
    providerData.CustomParameters.Add("prompt", "login");
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    

    Informacje na temat parametrów obsługiwanych przez Yahoo można znaleźć w dokumentacji Yahoo OAuth . Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą custom_parameters() . Te parametry to id_klienta , redirect_uri , typ_odpowiedzi , zakres i stan .

  3. Opcjonalnie : określ dodatkowe zakresy protokołu OAuth 2.0 poza profile i email , o które chcesz poprosić dostawcę uwierzytelniania. Jeśli Twoja aplikacja wymaga dostępu do prywatnych danych użytkownika z interfejsów API Yahoo, musisz poprosić o uprawnienia do interfejsów API Yahoo w obszarze Uprawnienia API w konsoli programisty Yahoo. Żądane zakresy OAuth muszą dokładnie odpowiadać zakresom wstępnie skonfigurowanym w uprawnieniach interfejsu API aplikacji. Na przykład, jeśli do kontaktów użytkownika zażądano dostępu do odczytu/zapisu i wstępnie skonfigurowano go w uprawnieniach API aplikacji, należy przekazać sdct-w zamiast zakresu OAuth tylko do odczytu sdct-r . W przeciwnym razie przepływ nie powiedzie się, a użytkownikowi końcowemu zostanie wyświetlony komunikat o błędzie.

    providerData.Scopes = new List<string>();
    
    // Request access to Yahoo Mail API.
    providerData.Scopes.Add("mail-r");
    // This must be preconfigured in the app's API permissions.
    providerData.Scopes.Add("sdct-w");
    

    Aby dowiedzieć się więcej, zapoznaj się z dokumentacją zakresów Yahoo .

  4. Po skonfigurowaniu danych dostawcy użyj ich do utworzenia FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
        new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Uwierzytelnij się w Firebase przy użyciu obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth, ta przejmie kontrolę nad Twoim interfejsem użytkownika, wyświetlając widok internetowy, w którym użytkownik może wprowadzić swoje dane uwierzytelniające.

    Aby rozpocząć proces logowania, wywołaj SignInAndRetrieveDataWithCredentialAsync :

<<../_includes/_sign_in_with_provider_unity.md>>>

  1. Chociaż powyższe przykłady skupiają się na przepływach logowania, możesz także połączyć dostawcę Yahoo z istniejącym użytkownikiem za pomocą LinkWithProviderAsync . Na przykład możesz powiązać wielu dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą dowolnego z nich.

    user.LinkWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("LinkWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("LinkWithProviderAsync encountered an error: "
              + task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User linked successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  2. Tego samego wzorca można użyć w przypadku ReauthenticateWithProviderAsync , którego można użyć do pobrania nowych poświadczeń dla poufnych operacji wymagających niedawnego logowania.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane z poświadczeniami — czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania — za pomocą których użytkownik się zalogował. To nowe konto jest przechowywane jako część Twojego projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w Twoim projekcie, niezależnie od tego, w jaki sposób użytkownik się loguje.

  • W Twoich 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 regułach bezpieczeństwa bazy danych Firebase Realtime i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.

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

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

auth.SignOut();