Check out what’s new from Firebase at Google I/O 2022. Learn more

Uwierzytelnij się za pomocą Apple i Unity

Możesz zezwolić użytkownikom na uwierzytelnianie w Firebase przy użyciu ich Apple ID, używając pakietu Firebase SDK do przeprowadzania kompleksowego procesu logowania OAuth 2.0.

Zanim zaczniesz

Aby logować użytkowników za pomocą Apple, najpierw skonfiguruj Zaloguj się za pomocą Apple w witrynie programisty Apple, a następnie włącz Apple jako dostawcę logowania do projektu Firebase.

Dołącz do programu Apple Developer

Funkcja logowania za pomocą Apple może być konfigurowana tylko przez członków programu Apple Developer Program .

Skonfiguruj Zaloguj się za pomocą Apple

Logowanie Apple musi być włączone i poprawnie skonfigurowane w projekcie Firebase. Konfiguracja Apple Developer różni się w zależności od platform Android i Apple. Przed kontynuowaniem postępuj zgodnie z sekcją „Konfiguruj logowanie za pomocą Apple” w przewodnikach iOS+ i/lub Android .

Włącz Apple jako dostawcę logowania

  1. W konsoli Firebase otwórz sekcję Auth . Na karcie Metoda logowania włącz dostawcę Apple .
  2. Skonfiguruj ustawienia dostawcy Apple Sign In:
    1. Jeśli wdrażasz aplikację tylko na platformach Apple, możesz pozostawić pola Identyfikator usługi, Identyfikator zespołu Apple, klucz prywatny i Identyfikator klucza puste.
    2. Wsparcie na urządzeniach z Androidem:
      1. Dodaj Firebase do swojego projektu na Androida . Pamiętaj, aby zarejestrować podpis SHA-1 swojej aplikacji podczas konfigurowania aplikacji w konsoli Firebase.
      2. W konsoli Firebase otwórz sekcję Auth . Na karcie Metoda logowania włącz dostawcę Apple . Podaj identyfikator usługi utworzony w poprzedniej sekcji. Ponadto w sekcji konfiguracji przepływu kodu OAuth określ identyfikator zespołu Apple oraz klucz prywatny i identyfikator klucza utworzony w poprzedniej sekcji.

Przestrzegaj wymagań Apple dotyczących anonimowych danych

Zaloguj się za pomocą Apple daje użytkownikom możliwość anonimizacji swoich danych, w tym adresu e-mail, podczas logowania. Użytkownicy, którzy wybiorą tę opcję, mają adresy e-mail z domeną privaterelay.appleid.com . Korzystając z funkcji Zaloguj się przez Apple w swojej aplikacji, musisz przestrzegać wszelkich obowiązujących zasad lub warunków dla programistów Apple dotyczących tych anonimowych identyfikatorów Apple ID.

Obejmuje to uzyskanie wymaganej zgody użytkownika przed powiązaniem jakichkolwiek bezpośrednio identyfikujących danych osobowych z anonimowym identyfikatorem Apple ID. Podczas korzystania z Uwierzytelniania Firebase może to obejmować następujące czynności:

  • Połącz adres e-mail z anonimowym identyfikatorem Apple ID lub odwrotnie.
  • Połącz numer telefonu z anonimowym identyfikatorem Apple ID lub odwrotnie
  • Połącz nieanonimowe dane logowania społecznościowego (Facebook, Google itp.) z anonimowym identyfikatorem Apple ID lub odwrotnie.

Powyższa lista nie jest wyczerpująca. Zapoznaj się z Umową licencyjną programu Apple Developer w sekcji Członkostwo swojego konta programisty, aby upewnić się, że Twoja aplikacja spełnia wymagania Apple.

Uzyskaj dostęp do klasy Firebase.Auth.FirebaseAuth

Klasa FirebaseAuth jest bramą dla wszystkich wywołań interfejsu API. Jest dostępny za pośrednictwem FirebaseAuth.DefaultInstance .
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Obsługuj proces logowania za pomocą pakietu Firebase SDK

Proces logowania się za pomocą Apple różni się w zależności od platform Apple i Android.

Na platformach Apple

  1. Zainstaluj wtyczkę innej firmy, aby obsłużyć jednorazową obsługę logowania Apple i generowanie tokenów, na przykład pakiet Unity's Sign In With Apple Asset Storage Package . Może być konieczne zmodyfikowanie kodu, aby umieścić wygenerowany losowy ciąg jednorazowy w stanie nieprzetworzonym do użycia w operacjach Firebase (to znaczy przechowywać jego kopię przed utworzeniem skrótu SHA256 ciągu jednorazowego).

  2. Użyj otrzymanego ciągu tokena i nieprzetworzonego ciągu znaków jednorazowych, aby utworzyć poświadczenia Firebase i zalogować się do Firebase.

    Firebase.Auth.Credential credential =
        Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

  3. Ten sam wzorzec może być używany z ReauthenticateAsync , który może służyć do pobierania świeżych poświadczeń dla poufnych operacji, które wymagają niedawnego logowania. Aby uzyskać więcej informacji, zobacz Zarządzanie użytkownikami .

  4. Podczas łączenia z Apple Sign In na platformach Apple może wystąpić błąd, że istniejące konto Firebase zostało już połączone z kontem Apple. W takim przypadku zostanie Firebase.Auth.FirebaseAccountLinkException zamiast standardowego Firebase.FirebsaeException . Wyjątek obejmuje właściwość UserInfo.UpdatedCredential , która, jeśli jest prawidłowa, może służyć do logowania użytkownika połączonego z Apple za pośrednictwem FirebaseAuth.SignInWithCredential . Zaktualizowane poświadczenia omijają potrzebę generowania nowego tokenu Apple Sign-In bez wartości jednorazowej dla operacji logowania.

    Należy pamiętać, że LinkWithCredentialAsync będzie nadal zgłaszać standardowe Firebase.FirebaseException w przypadku awarii łącza i dlatego nie będzie w stanie zwrócić zaktualizowanych poświadczeń.

    auth.CurrentUser.LinkAndRetrieveDataWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompleted) {
            // Link Success
          } else {
            if (task.Exception != null) {
              foreach (Exception exception in task.Exception.Flatten().InnerExceptions) {
                Firebase.Auth.FirebaseAccountLinkException firebaseEx =
                  exception as Firebase.Auth.FirebaseAccountLinkException;
                if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( signInTask => {
                      // Handle Sign in result.
                    });
                } else {
                  DebugLog("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });
    

Na Androidzie

W systemie Android uwierzytelniaj użytkowników za pomocą Firebase, integrując w swojej aplikacji ogólne internetowe logowanie OAuth przy użyciu pakietu SDK Firebase, aby przeprowadzić pełny proces logowania.

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

  1. Utwórz wystąpienie FederatedOAuthProviderData skonfigurowane z identyfikatorem dostawcy odpowiednim dla Apple.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. Opcjonalnie: określ dodatkowe zakresy OAuth 2,0 poza zakresem domyślnym, którego chcesz zażądać od dostawcy uwierzytelniania.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("email");
    providerData.Scopes.Add("name");
    
  3. Opcjonalnie: jeśli chcesz wyświetlić ekran logowania Apple w języku innym niż angielski, ustaw parametr locale . Obsługiwane języki można znaleźć w dokumencie Zaloguj się za pomocą Apple .

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  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 funkcja przejmie kontrolę nad 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 signInWithProvider :

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  6. Ten sam wzorzec może być używany z ReauthenticateWithProvider , który może służyć do pobierania świeżych poświadczeń dla poufnych operacji, które wymagają 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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. Możesz też użyć linkWithCredential() , aby połączyć różnych dostawców tożsamości z istniejącymi kontami.

    Pamiętaj, że Apple wymaga uzyskania wyraźnej zgody użytkowników przed połączeniem ich kont Apple z innymi danymi.

    Na przykład, aby połączyć konto Facebook z bieżącym kontem Firebase, użyj tokena dostępu, który otrzymałeś po zalogowaniu użytkownika do Facebooka:

    // Initialize a Facebook credential with a Facebook access token.
    
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    user.LinkAndRetrieveDataWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkAndRetrieveDataWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkAndRetrieveDataWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.SignInResult signInResult = task.Result;
          Firebase.Auth.FirebaseUser user = signInResult.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

Zaloguj się za pomocą Apple Notes

W przeciwieństwie do innych dostawców obsługiwanych przez Firebase Auth, Apple nie udostępnia adresu URL zdjęcia.

Ponadto, gdy użytkownik zdecyduje się nie udostępniać swojego adresu e-mail aplikacji, Apple przydziela mu unikalny adres e-mail (w postaci xyz@privaterelay.appleid.com ), który udostępnia Twojej aplikacji. Jeśli skonfigurowałeś usługę przekazywania prywatnych wiadomości e-mail, Apple przekazuje wiadomości e-mail wysyłane na anonimowy adres na prawdziwy adres e-mail użytkownika.

Firma Apple udostępnia aplikacjom informacje o użytkowniku, takie jak nazwa wyświetlana, tylko przy pierwszym logowaniu użytkownika. Zazwyczaj Firebase przechowuje nazwę wyświetlaną, gdy użytkownik loguje się do Apple po raz pierwszy, co można uzyskać za pomocą getCurrentUser().getDisplayName() . Jeśli jednak wcześniej logowałeś użytkownika do aplikacji za pomocą Apple bez użycia Firebase, Apple nie udostępni Firebase nazwy wyświetlanej użytkownika.

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone 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ęść projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się on loguje.

W swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu firebase::auth::user. Zobacz Zarządzanie użytkownikami .

W regułach bezpieczeństwa bazy danych czasu rzeczywistego i usługi Cloud Storage Firebase możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i używać go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.