Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
Эта страница переведена с помощью Cloud Translation API.
Switch to English

Легко добавьте вход в свое приложение iOS с помощью FirebaseUI

FirebaseUI - это библиотека, построенная на основе Firebase Authentication SDK, которая обеспечивает добавление потоков пользовательского интерфейса для использования в вашем приложении. FirebaseUI предоставляет следующие преимущества:

  • Несколько поставщиков : потоки входа для электронной почты / пароля, ссылки электронной почты, аутентификации по телефону, входа в Google, входа в Facebook и входа в Twitter.
  • Управление учетной записью : потоки для обработки задач управления учетной записью, таких как создание учетной записи и сброс пароля.
  • Связывание анонимных учетных записей: потоки для автоматической привязки анонимных учетных записей к поставщикам удостоверений.
  • Настраиваемый : настройте внешний вид FirebaseUI в соответствии с вашим приложением. Кроме того, поскольку FirebaseUI имеет открытый исходный код, вы можете выполнить форк проекта и настроить его в точном соответствии со своими потребностями.

Прежде чем вы начнете

  1. Добавьте Firebase в свой проект iOS .

  2. Добавьте FirebaseUI в свой подфайл:

    pod 'FirebaseUI'
    

    При желании вы можете добавить только компонент Auth и поставщиков, которых хотите использовать:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .

Настроить методы входа

Прежде чем вы сможете использовать Firebase для входа пользователей, вы должны включить и настроить методы входа, которые вы хотите поддерживать.

Адрес электронной почты и пароль

В консоли Firebase откройте раздел « Аутентификация » и включите аутентификацию по электронной почте и паролю.

  1. В консоли Firebase откройте раздел Аутентификация . На вкладке Метод входа включите поставщика электронной почты / пароля . Обратите внимание, что вход по электронной почте / паролю должен быть включен, чтобы использовать ссылку для входа по электронной почте.

  2. В том же разделе включите метод входа по электронной почте (вход без пароля) и нажмите Сохранить .

  3. Вы можете включить электронную ссылку в знак при инициализации FUIEmailAuth экземпляра с FIREmailLinkAuthSignInMethod . Вам также необходимо предоставить действительный FIRActionCodeSettings объект с handleCodeInApp значение ИСТИНА.

Быстрый

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)

Цель-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. Кроме того, вам необходимо внести в белый список URL-адрес, который вы передаете инициализатору. Вы можете сделать это в консоли Firebase , откройте раздел « Аутентификация ». На вкладке " Метод входа" добавьте URL-адрес в разделе " Авторизованные домены" .

  2. Как только вы поймаете глубокую ссылку, вам нужно будет передать ее в пользовательский интерфейс аутентификации, чтобы ее можно было обработать.

Быстрый

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

Цель-C

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. Вход по электронной почте по ссылке в FirebaseUI-iOS совместим с FirebaseUI-Android и FirebaseUI-web, где один пользователь, запускающий поток из FirebaseUI-Android, может открыть ссылку и выполнить вход с помощью FirebaseUI-web. То же верно и для обратного потока.

яблоко

  1. Следуйте разделам « Прежде чем начать» и « Соблюдайте требования Apple к анонимным данным» в руководстве Firebase « Войти с помощью Apple» .

  2. Добавьте возможность входа с помощью Apple в свой файл прав.

  3. Инициализируйте экземпляр поставщика OAuth, настроенный для входа с помощью Apple:

    Быстрый

    provider = FUIOAuth.appleAuthProvider()
    

    Цель-C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

Google

  1. В консоли Firebase откройте раздел « Аутентификация » и включите Google Sign-in.

  2. Добавьте обратный идентификатор клиента в качестве схемы URL-адреса в свой проект Xcode. Вы можете найти это значение в GoogleService-Info.plist .

Facebook

  1. Настройте SDK для входа в Facebook, подписавшись на начальную страницу Facebook .

  2. В консоли Firebase откройте раздел « Аутентификация » и включите Facebook. Чтобы включить вход в Facebook, вы должны предоставить свой идентификатор приложения Facebook и секрет приложения, которые вы можете получить в консоли разработчиков Facebook.

  3. Включите совместное использование связки ключей в своем проекте Xcode на экране « Параметры проекта»> «Возможности» .

  4. Добавьте fb FACEBOOK_APP_ID в качестве схемы URL в ваш проект Xcode.

  5. Добавьте свой идентификатор приложения Facebook и отображаемое имя в файл Info.plist :

    Ключ Значение
    FacebookAppID FACEBOOK_APP_ID (например, 1234567890 )
    FacebookDisplayName Название вашего приложения

Твиттер

  1. В консоли Firebase откройте раздел « Аутентификация » и включите Twitter. Чтобы включить вход в Twitter, вы должны предоставить свой ключ и секрет API Twitter API, которые вы можете получить в консоли управления приложениями Twitter.

  2. Инициализируйте экземпляр поставщика OAuth, настроенный для входа в Twitter:

    Быстрый

    provider = FUIOAuth.twitterAuthProvider()
    

    Цель-C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

Телефонный номер

  1. В консоли Firebase откройте раздел « Аутентификация » и включите вход по номеру телефона.

  2. Firebase должна иметь возможность проверять, поступают ли запросы на вход по номеру телефона из вашего приложения. Один из способов сделать это - через уведомления APN. Дополнительные сведения см. В разделе « Включение проверки приложений» .

    Чтобы включить уведомления APN для использования с аутентификацией Firebase:

    1. В Xcode включите push-уведомления для своего проекта.

    2. Загрузите ключ аутентификации APN в Firebase. Если у вас еще нет ключа аутентификации APN, см. Раздел Настройка APN с помощью FCM .

      1. Внутри вашего проекта в консоли Firebase щелкните значок шестеренки, выберите « Настройки проекта» , а затем выберите вкладку « Облачные сообщения ».

      2. В ключе аутентификации APN в конфигурации приложения iOS нажмите кнопку « Загрузить» .

      3. Перейдите в папку, в которой вы сохранили ключ, выберите его и нажмите « Открыть» . Добавьте идентификатор ключа (доступен в разделе « Сертификаты, идентификаторы и профили» Центра разработчиков Apple ) и нажмите « Загрузить» .

      Если у вас уже есть сертификат APNs, вы можете загрузить его вместо этого.

  3. Когда уведомления APN не могут быть получены на устройстве, Firebase использует reCAPTCHA для проверки запросов.

    Чтобы включить проверку reCAPTCHA, если вы еще не добавили обратный идентификатор клиента в качестве схемы URL (например, для включения входа в Google), сделайте это в своем проекте Xcode. Вы можете найти это значение в GoogleService-Info.plist .

  4. Необязательно : Firebase использует swizzling для автоматического получения токена APN вашего приложения, для обработки тихих push-уведомлений, которые Firebase отправляет вашему приложению, и для автоматического перехвата перенаправления настраиваемой схемы со страницы проверки reCAPTCHA во время проверки.

    Если вы предпочитаете не использовать swizzling, см. Приложение: Использование входа по телефону без swizzling в документах аутентификации Firebase SDK.

Войти

Чтобы запустить процесс входа в FirebaseUI, сначала инициализируйте FirebaseUI:

Быстрый

import FirebaseUI

/* ... */

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

Цель-C

@import FirebaseUI;

...

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

Затем настройте FirebaseUI для использования тех методов входа, которые вы хотите поддерживать:

Быстрый

import FirebaseUI

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

Цель-C

@import FirebaseUI;

...

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

Если вы включили вход в Google или Facebook, реализуйте обработчик результатов потоков регистрации в Google и Facebook:

Быстрый

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
}

Цель-C

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

Наконец, получите экземпляр AuthViewController из FUIAuth . Затем вы можете либо представить его как первый контроллер представления вашего приложения, либо представить его из другого контроллера представления в вашем приложении.

Быстрый

Чтобы получить селектор метода входа:

let authViewController = authUI.authViewController()

Если вы используете только вход по номеру телефона, вы можете напрямую отобразить представление входа по номеру телефона:

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

Цель-C

Чтобы получить селектор метода входа:

UINavigationController *authViewController = [authUI authViewController];

Если вы используете только вход по номеру телефона, вы можете напрямую отобразить представление входа по номеру телефона:

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

После того, как вы представите представление аутентификации и пользователь войдет в систему, результат возвращается делегату FirebaseUI Auth в didSignInWithUser:error: ::

Быстрый

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

Цель-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.
}

Выход

FirebaseUI предоставляет удобные методы для выхода из Firebase Authentication, а также всех провайдеров социальной идентификации:

Быстрый

authUI.signOut()

Цель-C

[authUI signOut];

Настройка

Вы можете настроить экраны FUIAuth подклассы контроллеров представления FirebaseUI и указав их в FUIAuth делегата FUIAuth :

Быстрый

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

Цель-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];
}

Вы можете настроить URL-адрес в соответствии с условиями обслуживания вашего приложения, ссылка на которые находится на экране создания учетной записи:

Быстрый

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

Цель-C

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

Наконец, вы можете настроить сообщения и подсказки, отображаемые для ваших пользователей, указав настраиваемый пакет:

Быстрый

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

Цель-C

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

Следующие шаги

  • Дополнительные сведения об использовании и настройке FirebaseUI см. В файле README на GitHub.
  • Если вы обнаружите проблему в FirebaseUI и хотите сообщить об этом, используйте трекер проблем GitHub .