Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Uwierzytelnij się za pomocą Apple i Unity

Możesz pozwolić swoim użytkownikom na uwierzytelnianie w Firebase przy użyciu ich identyfikatora Apple ID, używając pakietu SDK Firebase, aby przeprowadzić pełny proces logowania OAuth 2.0.

Zanim zaczniesz

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

Dołącz do programu Apple Developer

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

Skonfiguruj logowanie za pomocą Apple

Apple Sign In musi być włączone i poprawnie skonfigurowane w projekcie Firebase. Konfiguracja Apple Developer różni się na platformach Android i iOS. Przed kontynuowaniem postępuj zgodnie z sekcją „Konfiguruj logowanie za pomocą Apple” w przewodnikach dotyczących systemu 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 swoją aplikację tylko w systemie iOS, możesz pozostawić pola Service ID, Apple Team ID, klucz prywatny i identyfikator klucza puste.
    2. Aby uzyskać pomoc na urządzeniach z systemem Android:
      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 . Określ identyfikator usługi utworzony w poprzedniej sekcji. Ponadto w sekcji konfiguracji przepływu kodu OAuth określ swój identyfikator zespołu Apple oraz klucz prywatny i identyfikator klucza utworzony w poprzedniej sekcji.

Przestrzegaj wymagań Apple dotyczących anonimowych danych

Sign In with Apple daje użytkownikom możliwość anonimizacji ich 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 danych osobowych umożliwiających bezpośrednią identyfikację z anonimowym identyfikatorem Apple ID. W przypadku korzystania z uwierzytelniania Firebase może to obejmować następujące działania:

  • 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 na koncie programisty, aby upewnić się, że 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ę do Apple różni się na różnych platformach iOS i Android.

Na iOS

  1. Zainstaluj wtyczkę innej firmy, aby obsługiwać jednorazowe logowanie Apple i generowanie tokenów, na przykład Unity's Sign In With Apple Asset Storage Package . Może zajść potrzeba zmiany kodu, aby wygenerować losowy ciąg znaków jednorazowych w stanie nieprzetworzonym, aby można go było używać w operacjach Firebase (tj. Przechowywać jego kopię przed utworzeniem skrótu SHA256 postaci jednorazowej).

  2. Użyj powstałego ciągu tokena i nieprzetworzonej wartości jednorazowej, aby utworzyć dane logowania 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ą ostatniego logowania. Aby uzyskać więcej informacji, zobacz Zarządzanie użytkownikami .

  4. Podczas łączenia z Apple Sign In na iOS możesz napotkać 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 poprawna, może służyć do logowania użytkownika połączonego z Apple za pośrednictwem FirebaseAuth.SignInWithCredential . Zaktualizowane poświadczenie pozwala obejść potrzebę generowania nowego tokenu Apple Sign-In z wartością jednorazową dla operacji logowania.

    Zauważ, że LinkWithCredentialAsync nadal będzie rzucać standardowego Firebase.FirebaseException na awarie łącza, a więc jest niezdolny do powrotu zaktualizowaną 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
            }
          }
        });
    

W systemie Android

W systemie Android uwierzytelniaj użytkowników w Firebase, integrując internetowe ogólne logowanie OAuth z aplikacją przy użyciu pakietu Firebase SDK, aby przeprowadzić proces logowania od początku do końca.

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 domyślne, których 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 . Zobacz dokumentację Logowanie za pomocą Apple, aby poznać obsługiwane języki.

    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 przejmie to kontrolę nad interfejsem użytkownika, wyświetlając widok sieciowy, w którym użytkownik może wprowadzić swoje poświadczenia.

    Aby rozpocząć przepływ 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órego można użyć do pobrania ś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ć funkcji linkWithCredential() aby połączyć różnych dostawców tożsamości z istniejącymi kontami.

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

    Na przykład, aby połączyć konto na Facebooku z bieżącym kontem Firebase, użyj tokena dostępu, który otrzymałeś podczas logowania użytkownika na Facebooku:

    // 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 zapewnia mu unikatowy adres e-mail (w postaci xyz@privaterelay.appleid.com ), który udostępnia Twojej aplikacji. Jeśli skonfigurowałeś prywatną usługę przekazywania poczty e-mail, Apple przekazuje wiadomości e-mail wysłane na anonimowy adres na rzeczywisty adres e-mail użytkownika.

Apple udostępnia aplikacjom informacje o użytkowniku, takie jak nazwa wyświetlana, tylko przy pierwszym logowaniu użytkownika. Zwykle Firebase przechowuje nazwę wyświetlaną przy pierwszym getCurrentUser().getDisplayName() użytkownika w Apple, którą można uzyskać za pomocą funkcji getCurrentUser().getDisplayName() . Jeśli jednak wcześniej używałeś Apple do logowania użytkownika do aplikacji bez korzystania z Firebase, Apple nie udostępni Firebase wyświetlanej nazwy użytkownika.

Następne kroki

Gdy użytkownik loguje się po raz pierwszy, tworzone jest nowe konto użytkownika i jest ono łączone z poświadczeniami - czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami dostawcy uwierzytelniania - zalogowanym użytkownikiem. To nowe konto jest przechowywane jako część projektu Firebase i może służyć do identyfikacji użytkownika we wszystkich aplikacjach w Twoim projekcie, niezależnie od tego, w jaki sposób 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 Firebase Realtime Database i Cloud Storage Rules możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.