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

Łatwo dodaj logowanie do aplikacji na iOS za pomocą FirebaseUI

FirebaseUI to biblioteka zbudowana na podstawie pakietu SDK Firebase Authentication, która udostępnia przepływy interfejsu użytkownika do użycia w Twojej aplikacji. FirebaseUI zapewnia następujące korzyści:

  • Wielu dostawców : przepływy logowania dla adresu e-mail / hasła, łącza e-mail, uwierzytelniania telefonicznego, logowania Google, logowania na Facebooku i logowania na Twitterze.
  • Zarządzanie kontami : przepływy do obsługi zadań związanych z zarządzaniem kontem, takich jak tworzenie konta i resetowanie haseł.
  • Anonimowe łączenie kont : przepływy do automatycznego łączenia anonimowych kont z dostawcami tożsamości.
  • Możliwość dostosowania: dostosuj wygląd FirebaseUI, aby pasował do Twojej aplikacji. Ponadto, ponieważ FirebaseUI jest oprogramowaniem typu open source, możesz rozwidlić projekt i dostosować go dokładnie do swoich potrzeb.

Zanim zaczniesz

  1. Dodaj Firebase do swojego projektu na iOS .

  2. Dodaj FirebaseUI do swojego pliku Podfile:

    pod 'FirebaseUI'
    

    Jeśli wolisz, możesz dodać tylko składnik uwierzytelniania i dostawców, których chcesz używać:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. Jeśli nie połączyłeś jeszcze swojej aplikacji z projektem Firebase, zrób to z konsoli Firebase .

Skonfiguruj metody logowania

Zanim będziesz mógł używać Firebase do logowania użytkowników, musisz włączyć i skonfigurować metody logowania, które chcesz obsługiwać.

Adres e-mail i hasło

W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz uwierzytelnianie poczty e-mail i hasła.

  1. W konsoli Firebase otwórz sekcję Uwierzytelnianie . Na karcie Metoda logowania włącz dostawcę adresu e-mail / hasła . Należy pamiętać, że logowanie za pomocą adresu e-mail / hasła musi być włączone, aby można było używać logowania za pomocą łącza e-mail.

  2. W tej samej sekcji włącz metodę logowania Łącze e-mail (logowanie bez hasła) i kliknij Zapisz .

  3. Można włączyć odnośnik email wejść przez Inicjowanie FUIEmailAuth wystąpienie z FIREmailLinkAuthSignInMethod . Potrzebny będzie również zapewnienie prawidłowego FIRActionCodeSettings obiekt z handleCodeInApp wartość true.

Szybki

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

Cel C

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. Dodatkowo musisz dodać do białej listy adres URL, który przekazujesz do inicjatora. Możesz to zrobić w konsoli Firebase , otwórz sekcję Uwierzytelnianie . Na karcie Metoda logowania dodaj adres URL w obszarze Autoryzowane domeny .

  2. Po przechwyceniu precyzyjnego linku musisz przekazać go do interfejsu użytkownika uwierzytelniania, aby można było go obsługiwać.

Szybki

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

Cel C

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. Logowanie za pomocą linku e-mail w FirebaseUI-iOS jest zgodne z FirebaseUI-Android i FirebaseUI-web, gdzie jeden użytkownik uruchamiający przepływ z FirebaseUI-Android może otworzyć link i dokończyć logowanie w FirebaseUI-web. To samo dotyczy przepływu przeciwnego.

jabłko

  1. Postępuj zgodnie z sekcjami Przed rozpoczęciem i Przestrzegaj wymagań dotyczących anonimowych danych firmy Apple w przewodniku Firebase Sign in with Apple .

  2. Dodaj opcję Zaloguj się przez Apple do pliku uprawnień.

  3. Zainicjuj wystąpienie dostawcy OAuth skonfigurowane do logowania się przez Apple:

    Szybki

    provider = FUIOAuth.appleAuthProvider()
    

    Cel C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

Google

  1. W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz Logowanie przez Google.

  2. Dodaj odwrócony identyfikator klienta jako schemat adresu URL w projekcie Xcode. Wartość tę można znaleźć w pliku GoogleService-Info.plist .

Facebook

  1. Skonfiguruj pakiet Facebook Login SDK, postępując zgodnie ze stroną wprowadzającą na Facebooku .

  2. W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz Facebook. Aby włączyć logowanie na Facebooku, musisz podać swój identyfikator aplikacji Facebook i klucz tajny aplikacji, które można uzyskać w konsoli programistów Facebooka.

  3. Włącz udostępnianie pęku kluczy w projekcie Xcode na ekranie Ustawienia projektu> Możliwości .

  4. Dodaj fb FACEBOOK_APP_ID jako schemat adresu URL w projekcie Xcode.

  5. Dodaj swój identyfikator aplikacji Facebook i nazwę wyświetlaną do pliku Info.plist :

    Klucz Wartość
    FacebookAppID FACEBOOK_APP_ID (na przykład 1234567890 )
    FacebookDisplayName Nazwa Twojej aplikacji

Świergot

  1. W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz Twittera. Aby włączyć logowanie na Twitterze, musisz podać swój klucz klienta i tajny klucz interfejsu API Twittera, które można uzyskać w konsoli zarządzania aplikacjami Twittera.

  2. Zainicjuj wystąpienie dostawcy OAuth skonfigurowane do logowania na Twitterze:

    Szybki

    provider = FUIOAuth.twitterAuthProvider()
    

    Cel C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

Numer telefonu

  1. W konsoli Firebase otwórz sekcję Uwierzytelnianie i włącz logowanie za pomocą numeru telefonu.

  2. Firebase musi mieć możliwość zweryfikowania, czy żądania logowania na numer telefonu pochodzą z Twojej aplikacji. Jednym ze sposobów osiągnięcia tego celu są powiadomienia APN. Aby uzyskać szczegółowe informacje, zobacz Włącz weryfikację aplikacji .

    Aby włączyć powiadomienia APN do użytku z uwierzytelnianiem Firebase:

    1. W Xcode włącz powiadomienia push dla swojego projektu.

    2. Prześlij swój klucz uwierzytelniania APN do Firebase. Jeśli nie masz jeszcze klucza uwierzytelniania APNs, zobacz Konfigurowanie APN za pomocą FCM .

      1. W projekcie w konsoli Firebase wybierz ikonę koła zębatego, wybierz Ustawienia projektu , a następnie wybierz kartę Komunikacja w chmurze .

      2. W kluczu uwierzytelniania APN w konfiguracji aplikacji na iOS kliknij przycisk Prześlij .

      3. Przejdź do lokalizacji, w której zapisałeś klucz, wybierz go i kliknij Otwórz . Dodaj identyfikator klucza dla klucza (dostępny w sekcji Certyfikaty, identyfikatory i profile w Apple Developer Member Center ) i kliknij Prześlij .

      Jeśli masz już certyfikat APNs, możesz zamiast tego przesłać certyfikat.

  3. Gdy nie można odebrać powiadomień APN na urządzeniu, Firebase używa reCAPTCHA do weryfikacji żądań.

    Aby włączyć weryfikację reCAPTCHA, jeśli jeszcze nie dodałeś odwróconego identyfikatora klienta jako schematu adresu URL (na przykład, aby włączyć logowanie Google), zrób to w swoim projekcie Xcode. Możesz znaleźć tę wartość w pliku GoogleService-Info.plist .

  4. Opcjonalnie : Firebase używa przełączania metod, aby automatycznie uzyskiwać token APN aplikacji, obsługiwać ciche powiadomienia push wysyłane przez Firebase do Twojej aplikacji oraz automatycznie przechwytywać przekierowanie schematu niestandardowego ze strony weryfikacji reCAPTCHA podczas weryfikacji.

    Jeśli wolisz nie używać swizzlingu, zobacz Dodatek: Logowanie przez telefon bez przełączania w dokumentach uwierzytelniania Firebase SDK.

Zaloguj się

Aby rozpocząć proces logowania do FirebaseUI, najpierw zainicjuj FirebaseUI:

Szybki

import FirebaseUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

Cel C

@import FirebaseUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

Następnie skonfiguruj FirebaseUI tak, aby używał metod logowania, które chcesz obsługiwać:

Szybki

import FirebaseUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

Cel C

@import FirebaseUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

Jeśli włączyłeś logowanie przez Google lub Facebooka, zaimplementuj moduł obsługi dla wyniku przepływu rejestracji w Google i Facebooku:

Szybki

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Cel C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

Na koniec pobierz wystąpienie AuthViewController z FUIAuth . Następnie możesz przedstawić go jako pierwszy kontroler widoku w aplikacji lub z innego kontrolera widoku w aplikacji.

Szybki

Aby uzyskać selektor metody logowania:

let authViewController = authUI.authViewController()

Jeśli korzystasz tylko z logowania za pomocą numeru telefonu, możesz bezpośrednio wyświetlić widok logowania za pomocą numeru telefonu:

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

Cel C

Aby uzyskać selektor metody logowania:

UINavigationController *authViewController = [authUI authViewController];

Jeśli korzystasz tylko z logowania za pomocą numeru telefonu, możesz bezpośrednio wyświetlić widok logowania za pomocą numeru telefonu:

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

Po przedstawieniu widoku uwierzytelniania i zalogowaniu się użytkownika wynik jest zwracany do delegata uwierzytelniania didSignInWithUser:error: w didSignInWithUser:error: metoda:

Szybki

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

Cel C

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

Wyloguj się

FirebaseUI zapewnia wygodne metody wylogowania się z Firebase Authentication oraz wszystkich dostawców tożsamości społecznościowych:

Szybki

authUI.signOut()

Cel C

[authUI signOut];

Dostosowywanie

Możesz dostosować ekrany logowania, FUIAuth podklasy kontrolerów widoku FUIAuth i określając je w FUIAuth delegowania FUIAuth :

Szybki

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

Cel C

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

Możesz dostosować adres URL do warunków korzystania z aplikacji, które są połączone na ekranie tworzenia konta:

Szybki

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

Cel C

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

Na koniec możesz dostosować komunikaty i monity wyświetlane użytkownikom, określając niestandardowy pakiet:

Szybki

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

Cel C

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

Następne kroki

  • Więcej informacji o używaniu i dostosowywaniu FirebaseUI znajdziesz w pliku README w GitHub.
  • Jeśli znajdziesz i problem w FirebaseUI i chcesz to zgłosić, użyj narzędzia do śledzenia problemów GitHub .