FirebaseUI — это библиотека, созданная на основе Firebase Authentication SDK, которая предоставляет встраиваемые потоки пользовательского интерфейса для использования в вашем приложении. FirebaseUI предоставляет следующие преимущества:
- Несколько поставщиков : процессы входа в систему для электронной почты/пароля, ссылки на электронную почту, аутентификации по телефону, входа в Google, входа в Facebook и входа в Twitter.
- Управление учетными записями : потоки для выполнения задач управления учетными записями, таких как создание учетной записи и сброс пароля.
- Привязка анонимных учетных записей : потоки автоматического связывания анонимных учетных записей с поставщиками удостоверений.
- Настраиваемый : настройте внешний вид FirebaseUI в соответствии с вашим приложением. Кроме того, поскольку FirebaseUI имеет открытый исходный код, вы можете разветвить проект и настроить его в соответствии со своими потребностями.
Прежде чем начать
Добавьте 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'
Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
Настройка способов входа
Прежде чем вы сможете использовать Firebase для входа пользователей, вы должны включить и настроить методы входа, которые вы хотите поддерживать.
Адрес электронной почты и пароль
В консоли Firebase откройте раздел «Аутентификация» и включите аутентификацию по электронной почте и паролю.
Аутентификация по ссылке электронной почты
В консоли Firebase откройте раздел Аутентификация . На вкладке «Метод входа» включите поставщика электронной почты и пароля . Обратите внимание, что для использования входа по ссылке электронной почты необходимо включить вход по электронной почте или паролю.
В том же разделе включите метод входа по ссылке электронной почты (вход без пароля) и нажмите «Сохранить» .
Вы можете включить вход по ссылке электронной почты, инициализировав экземпляр
FUIEmailAuth
с помощьюFIREmailLinkAuthSignInMethod
. Вам также потребуется предоставить действительный объектFIRActionCodeSettings
сhandleCodeInApp
, установленным в значение true.
Быстрый
var actionCodeSettings = ActionCodeSettings() actionCodeSettings.url = URL(string: "https://example.firebasestorage.app") 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.firebasestorage.app"]; 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];
Кроме того, вам необходимо внести в белый список URL-адрес, который вы передаете инициализатору. Вы можете сделать это в консоли Firebase , откройте раздел «Аутентификация» . На вкладке «Метод входа» добавьте URL-адрес в разделе «Авторизованные домены» .
Как только вы поймаете глубокую ссылку, вам нужно будет передать ее в пользовательский интерфейс аутентификации, чтобы ее можно было обработать.
Быстрый
FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)
Цель-C
[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
- Вход по ссылке электронной почты в FirebaseUI-iOS совместим с FirebaseUI-Android и FirebaseUI-web, где один пользователь, запускающий поток из FirebaseUI-Android, может открыть ссылку и завершить вход в систему с помощью FirebaseUI-web. То же самое справедливо и для противоположного потока.
Яблоко
Следуйте разделам «Перед началом работы» и «Соблюдение требований Apple к анонимным данным» в руководстве Firebase «Вход через Apple» .
Добавьте возможность входа с помощью Apple в свой файл прав.
Инициализируйте экземпляр поставщика OAuth, настроенный для входа с помощью Apple:
Быстрый
provider = FUIOAuth.appleAuthProvider()
Цель-C
FUIOAuth *provider = [FUIOAuth appleAuthProvider];
- Настройте вход в Google, используя это руководство.
Фейсбук
Настройте SDK входа в Facebook, перейдя на страницу начала работы Facebook .
В консоли Firebase откройте раздел «Аутентификация» и включите Facebook. Чтобы включить вход в Facebook, вы должны предоставить свой идентификатор приложения Facebook и секрет приложения, которые вы можете получить в консоли разработчиков Facebook.
Включите совместное использование связки ключей в своем проекте Xcode на экране «Настройки проекта» > «Возможности» .
Добавьте
fb FACEBOOK_APP_ID
в качестве схемы URL-адресов в свой проект Xcode.Добавьте свой идентификатор приложения Facebook и отображаемое имя в файл
Info.plist
:Ключ Ценить FacebookAppID FACEBOOK_APP_ID
(например,1234567890
)FacebookDisplayName Название вашего приложения Инициализируйте экземпляр провайдера Facebook:
Быстрый
provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
Цель-C
FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
Если вы хотите использовать Facebook Limited Login , установите свойство
useLimitedLogin
в экземпляреFUIFacebookAuth
.Быстрый
provider.useLimitedLogin = true
Цель-C
provider.useLimitedLogin = YES;
Твиттер
В консоли Firebase откройте раздел «Аутентификация» и включите Twitter. Чтобы включить вход в Twitter, вы должны предоставить свой потребительский ключ и секрет API Twitter, которые вы можете получить в консоли управления приложениями Twitter.
Инициализируйте экземпляр провайдера OAuth, настроенный для входа в Twitter:
Быстрый
provider = FUIOAuth.twitterAuthProvider()
Цель-C
FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
Номер телефона
В консоли Firebase откройте раздел «Аутентификация» и включите вход по номеру телефона.
Firebase должна иметь возможность проверять, что запросы на вход в систему по номеру телефона поступают из вашего приложения. Один из способов достижения этой цели — уведомления APN. Подробности см. в разделе Включение проверки приложений .
Чтобы включить уведомления APN для использования с Firebase Authentication :
В Xcode включите push-уведомления для вашего проекта.
Загрузите ключ аутентификации APN в Firebase. Если у вас еще нет ключа аутентификации APN, обязательно создайте его в Центре участников Apple Developer .
Внутри вашего проекта в консоли Firebase выберите значок шестеренки, выберите «Настройки проекта» , а затем выберите вкладку «Облачные сообщения» .
В разделе «Ключ аутентификации APN» в разделе «Конфигурация приложения iOS» нажмите кнопку «Загрузить» .
Перейдите в папку, в которой вы сохранили ключ, выберите его и нажмите «Открыть» . Добавьте идентификатор ключа (доступен в Центре участников Apple Developer ) и нажмите «Загрузить» .
Если у вас уже есть сертификат APNs, вы можете загрузить его.
Когда уведомления APN не могут быть получены на устройстве, Firebase использует reCAPTCHA для проверки запросов.
Чтобы включить проверку reCAPTCHA, выполните в Xcode следующее:
- Откройте конфигурацию проекта: дважды щелкните имя проекта в левом дереве. Выберите свое приложение в разделе «ЦЕЛИ» , затем выберите вкладку «Информация» и разверните раздел «Типы URL-адресов» .
- Нажмите кнопку + и добавьте свой идентификатор закодированного приложения в качестве схемы URL-адреса. Вы можете найти свой идентификатор закодированного приложения на странице «Общие настройки» консоли Firebase в разделе вашего приложения для iOS. Остальные поля оставьте пустыми.
По завершении ваша конфигурация должна выглядеть примерно так (но со значениями, специфичными для вашего приложения):
Необязательно : Firebase использует метод swizzling для автоматического получения токена APN вашего приложения, для обработки автоматических push-уведомлений, которые Firebase отправляет в ваше приложение, и для автоматического перехвата перенаправления пользовательской схемы со страницы проверки reCAPTCHA во время проверки.
Если вы предпочитаете не использовать swizzling, см. Приложение: Использование входа в систему с помощью телефона без swizzling в документации по аутентификации Firebase SDK.
Войти
Чтобы начать процесс входа в FirebaseUI, сначала инициализируйте FirebaseUI:
Быстрый
import FirebaseAuthUI /* ... */ FirebaseApp.configure() let authUI = FUIAuth.defaultAuthUI() // You need to adopt a FUIAuthDelegate protocol to receive callback authUI.delegate = self
Цель-C
@import FirebaseAuthUI; ... [FIRApp configure]; FUIAuth *authUI = [FUIAuth defaultAuthUI]; // You need to adopt a FUIAuthDelegate protocol to receive callback authUI.delegate = self;
Затем настройте FirebaseUI для использования методов входа, которые вы хотите поддерживать:
Быстрый
import FirebaseAuthUI import FirebaseFacebookAuthUI import FirebaseGoogleAuthUI import FirebaseOAuthUI import FirebasePhoneAuthUI let providers: [FUIAuthProvider] = [ FUIGoogleAuth(), FUIFacebookAuth(), FUITwitterAuth(), FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()), ] self.authUI.providers = providers
Цель-C
@import FirebaseAuthUI; @import FirebaseFacebookAuthUI; @import FirebaseGoogleAuthUI; @import FirebaseOAuthUI; @import FirebasePhoneAuthUI; ... 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, а также из всех поставщиков социальных удостоверений:
Быстрый
authUI.signOut()
Цель-C
[authUI signOut];
Кастомизация
Вы можете настроить экраны входа, создав подкласс контроллеров представления FirebaseUI и указав их в методах делегата 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 .