FirebaseUI是一个构建在 Firebase Authentication SDK 之上的库,它提供了在您的应用中使用的嵌入式 UI 流程。 FirebaseUI 提供以下优势:
- 多个提供商:电子邮件/密码、电子邮件链接、电话身份验证、Google 登录、Facebook 登录和 Twitter 登录的登录流程。
- 帐户管理:处理帐户管理任务的流程,例如帐户创建和密码重置。
- 匿名帐户链接:自动将匿名帐户链接到身份提供者的流程。
- 可定制:定制 FirebaseUI 的外观以匹配您的应用。此外,由于 FirebaseUI 是开源的,您可以分叉该项目并完全根据您的需要对其进行自定义。
在你开始之前
将 FirebaseUI 添加到您的 Podfile:
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 控制台中,打开身份验证部分。在登录方法选项卡上,启用电子邮件/密码提供程序。请注意,必须启用电子邮件/密码登录才能使用电子邮件链接登录。
在同一部分中,启用电子邮件链接(无密码登录)登录方法并单击保存。
您可以通过使用
FIREmailLinkAuthSignInMethod
初始化FUIEmailAuth
实例来启用电子邮件链接登录。您还需要提供一个有效的FIRActionCodeSettings
对象,并将handleCodeInApp
设置为 true。
迅速
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];
此外,您需要将传递给初始化器的 URL 列入白名单。您可以在Firebase 控制台中执行此操作,打开身份验证部分。在Sign in method选项卡上,在Authorized domains下添加 URL。
一旦捕获到深层链接,就需要将其传递给 auth UI,以便对其进行处理。
迅速
FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)
目标-C
[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
- FirebaseUI-iOS 中的电子邮件链接登录与FirebaseUI-Android和FirebaseUI-web兼容,其中一位从 FirebaseUI-Android 启动流程的用户可以打开链接并使用 FirebaseUI-web 完成登录。相反的流程也是如此。
苹果
请遵循 Firebase使用 Apple 登录指南中的开始之前和遵守 Apple 匿名数据要求部分。
将 Sign in with Apple 功能添加到您的权利文件中。
初始化为使用 Apple 登录配置的 OAuth 提供程序实例:
迅速
provider = FUIOAuth.appleAuthProvider()
目标-C
FUIOAuth *provider = [FUIOAuth appleAuthProvider];
谷歌
在Firebase 控制台中,打开身份验证部分并启用 Google 登录。
在 Xcode 项目中将反向客户端 ID 添加为 URL 方案。您可以在
GoogleService-Info.plist
文件中找到该值。
按照Facebook 的入门页面设置 Facebook 登录 SDK。
在Firebase 控制台中,打开身份验证部分并启用 Facebook。要启用 Facebook 登录,您必须提供您的 Facebook App ID 和 App Secret,您可以在 Facebook Developers 控制台中获取它们。
从Project Settings > Capabilities屏幕在 Xcode 项目中启用钥匙串共享。
在您的 Xcode 项目中添加
fb FACEBOOK_APP_ID
作为 URL 方案。将您的 Facebook App ID 和显示名称添加到
Info.plist
文件:钥匙 价值 脸书AppID FACEBOOK_APP_ID
(例如,1234567890
)脸书显示名称 您的应用名称 初始化一个 Facebook 提供者实例:
迅速
provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
目标-C
FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
如果您想使用Facebook Limited Login ,请在
FUIFacebookAuth
实例上设置useLimitedLogin
属性。迅速
provider.useLimitedLogin = true
目标-C
provider.useLimitedLogin = YES;
推特
在Firebase 控制台中,打开身份验证部分并启用 Twitter。要启用 Twitter 登录,您必须提供您的 Twitter API 使用者密钥和机密,您可以在 Twitter 应用程序管理控制台中获取这些密钥和机密。
初始化为 Twitter 登录配置的 OAuth 提供程序实例:
迅速
provider = FUIOAuth.twitterAuthProvider()
目标-C
FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
电话号码
在Firebase 控制台中,打开身份验证部分并启用电话号码登录。
Firebase 必须能够验证电话号码登录请求是否来自您的应用。实现这一点的方法之一是通过 APNs 通知。有关详细信息,请参阅启用应用程序验证。
要启用 APNs 通知以用于 Firebase 身份验证:
在 Xcode 中,为您的项目启用推送通知。
将您的 APNs 身份验证密钥上传到 Firebase。如果您还没有 APNs 身份验证密钥,请确保在Apple Developer Member Center中创建一个。
在 Firebase 控制台的项目内,选择齿轮图标,选择Project Settings ,然后选择Cloud Messaging选项卡。
在iOS app configuration下的APNs authentication key中,点击Upload按钮。
浏览到您保存密钥的位置,选择它,然后单击打开。添加密钥的密钥 ID(可在Apple Developer Member Center中获得)并单击Upload 。
如果您已经拥有 APNs 证书,则可以改为上传证书。
当无法在设备上接收到 APNs 通知时,Firebase 会使用 reCAPTCHA 来验证请求。
要启用 reCAPTCHA 验证,如果您尚未将反向客户端 ID 添加为 URL 方案(例如,启用 Google 登录),请在您的 Xcode 项目中执行此操作。您可以在
GoogleService-Info.plist
文件中找到该值。可选:Firebase 使用 method swizzling 自动获取您应用的 APNs 令牌,处理 Firebase 发送到您应用的静默推送通知,并在验证期间自动拦截来自 reCAPTCHA 验证页面的自定义方案重定向。
如果您不想使用 swizzling,请参阅附录:在 Firebase SDK 身份验证文档中使用电话登录而不使用 swizzling 。
登入
要启动 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];
}
最后,从FUIAuth
获取AuthViewController
的实例。然后,您可以将其呈现为您应用的第一个视图控制器,或者从您应用中的另一个视图控制器呈现它。
迅速
要获取登录方法选择器:
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];
在您呈现身份验证视图并且用户登录后,结果将返回到didSignInWithUser:error:
方法中的 FirebaseUI Auth 委托:
迅速
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 的更多信息,请参阅 GitHub 上的README文件。
- 如果您在 FirebaseUI 中发现问题并想报告它,请使用GitHub 问题跟踪器。
FirebaseUI是一个构建在 Firebase Authentication SDK 之上的库,它提供了在您的应用中使用的嵌入式 UI 流程。 FirebaseUI 提供以下优势:
- 多个提供商:电子邮件/密码、电子邮件链接、电话身份验证、Google 登录、Facebook 登录和 Twitter 登录的登录流程。
- 帐户管理:处理帐户管理任务的流程,例如帐户创建和密码重置。
- 匿名帐户链接:自动将匿名帐户链接到身份提供者的流程。
- 可定制:定制 FirebaseUI 的外观以匹配您的应用。此外,由于 FirebaseUI 是开源的,您可以分叉该项目并完全根据您的需要对其进行自定义。
在你开始之前
将 FirebaseUI 添加到您的 Podfile:
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 控制台中,打开身份验证部分。在登录方法选项卡上,启用电子邮件/密码提供程序。请注意,必须启用电子邮件/密码登录才能使用电子邮件链接登录。
在同一部分中,启用电子邮件链接(无密码登录)登录方法并单击保存。
您可以通过使用
FIREmailLinkAuthSignInMethod
初始化FUIEmailAuth
实例来启用电子邮件链接登录。您还需要提供一个有效的FIRActionCodeSettings
对象,并将handleCodeInApp
设置为 true。
迅速
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];
此外,您需要将传递给初始化器的 URL 列入白名单。您可以在Firebase 控制台中执行此操作,打开身份验证部分。在Sign in method选项卡上,在Authorized domains下添加 URL。
一旦捕获到深层链接,就需要将其传递给 auth UI,以便对其进行处理。
迅速
FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)
目标-C
[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
- FirebaseUI-iOS 中的电子邮件链接登录与FirebaseUI-Android和FirebaseUI-web兼容,其中一位从 FirebaseUI-Android 启动流程的用户可以打开链接并使用 FirebaseUI-web 完成登录。相反的流程也是如此。
苹果
请遵循 Firebase使用 Apple 登录指南中的开始之前和遵守 Apple 匿名数据要求部分。
将 Sign in with Apple 功能添加到您的权利文件中。
初始化为使用 Apple 登录配置的 OAuth 提供程序实例:
迅速
provider = FUIOAuth.appleAuthProvider()
目标-C
FUIOAuth *provider = [FUIOAuth appleAuthProvider];
谷歌
在Firebase 控制台中,打开身份验证部分并启用 Google 登录。
在 Xcode 项目中将反向客户端 ID 添加为 URL 方案。您可以在
GoogleService-Info.plist
文件中找到该值。
按照Facebook 的入门页面设置 Facebook 登录 SDK。
在Firebase 控制台中,打开身份验证部分并启用 Facebook。要启用 Facebook 登录,您必须提供您的 Facebook App ID 和 App Secret,您可以在 Facebook Developers 控制台中获取它们。
从Project Settings > Capabilities屏幕在 Xcode 项目中启用钥匙串共享。
在您的 Xcode 项目中添加
fb FACEBOOK_APP_ID
作为 URL 方案。将您的 Facebook App ID 和显示名称添加到
Info.plist
文件:钥匙 价值 脸书AppID FACEBOOK_APP_ID
(例如,1234567890
)脸书显示名称 您的应用名称 初始化一个 Facebook 提供者实例:
迅速
provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
目标-C
FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
如果您想使用Facebook Limited Login ,请在
FUIFacebookAuth
实例上设置useLimitedLogin
属性。迅速
provider.useLimitedLogin = true
目标-C
provider.useLimitedLogin = YES;
推特
在Firebase 控制台中,打开身份验证部分并启用 Twitter。要启用 Twitter 登录,您必须提供您的 Twitter API 使用者密钥和机密,您可以在 Twitter 应用程序管理控制台中获取这些密钥和机密。
初始化为 Twitter 登录配置的 OAuth 提供程序实例:
迅速
provider = FUIOAuth.twitterAuthProvider()
目标-C
FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
电话号码
在Firebase 控制台中,打开身份验证部分并启用电话号码登录。
Firebase 必须能够验证电话号码登录请求是否来自您的应用。实现这一点的方法之一是通过 APNs 通知。有关详细信息,请参阅启用应用程序验证。
要启用 APNs 通知以用于 Firebase 身份验证:
在 Xcode 中,为您的项目启用推送通知。
将您的 APNs 身份验证密钥上传到 Firebase。如果您还没有 APNs 身份验证密钥,请确保在Apple Developer Member Center中创建一个。
在 Firebase 控制台的项目内,选择齿轮图标,选择Project Settings ,然后选择Cloud Messaging选项卡。
在iOS app configuration下的APNs authentication key中,点击Upload按钮。
浏览到您保存密钥的位置,选择它,然后单击打开。添加密钥的密钥 ID(可在Apple Developer Member Center中获得)并单击Upload 。
如果您已经拥有 APNs 证书,则可以改为上传证书。
当无法在设备上接收到 APNs 通知时,Firebase 会使用 reCAPTCHA 来验证请求。
要启用 reCAPTCHA 验证,如果您尚未将反向客户端 ID 添加为 URL 方案(例如,启用 Google 登录),请在您的 Xcode 项目中执行此操作。您可以在
GoogleService-Info.plist
文件中找到该值。可选:Firebase 使用 method swizzling 自动获取您应用的 APNs 令牌,处理 Firebase 发送到您应用的静默推送通知,并在验证期间自动拦截来自 reCAPTCHA 验证页面的自定义方案重定向。
如果您不想使用 swizzling,请参阅附录:在 Firebase SDK 身份验证文档中使用电话登录而不使用 swizzling 。
登入
要启动 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];
}
最后,从FUIAuth
获取AuthViewController
的实例。然后,您可以将其呈现为您应用的第一个视图控制器,或者从您应用中的另一个视图控制器呈现它。
迅速
要获取登录方法选择器:
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];
在您呈现身份验证视图并且用户登录后,结果将返回到didSignInWithUser:error:
方法中的 FirebaseUI Auth 委托:
迅速
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 的更多信息,请参阅 GitHub 上的README文件。
- 如果您在 FirebaseUI 中发现问题并想报告它,请使用GitHub 问题跟踪器。