将 FirebaseUI 与 Twitter 登录一起使用(iOS 应用)

Posted

技术标签:

【中文标题】将 FirebaseUI 与 Twitter 登录一起使用(iOS 应用)【英文标题】:Using FirebaseUI with Twitter Login (iOS App) 【发布时间】:2021-08-09 19:55:39 【问题描述】:

在我的 ios 应用程序中,我使用 FirebaseUI 进行所有登录身份验证。我刚刚安装了 Twitter 身份验证提供程序,它可以正常登录,但我无法找到 Twitter 用户名或从当前用户对象获取电子邮件地址。有趣的是,Twitter 用户名确实出现在 Firebase 控制台 > 身份验证列下的表格中。这是一个由两部分组成的问题,专门针对 FirebaseUI 登录方法。

    我可以在 Auth.auth().currentUser 的什么位置获取 twitter 用户名?如果不存在,如何检索。 如何获取 Twitter 电子邮件地址?这不会填充到 Auth.auth().currentUser 对象中。

这是 twitter 登录功能的设置代码。

authUI!.delegate = self

let emailProvider = FUIEmailAuth(...)
let twitterProvider = FUIOAuth.twitterAuthProvider()
authUI!.providers = [emailProvider, twitterProvider]

let authVC = authUI!.authViewController()
present(authVC, animated: true, completion: nil)

这是 didSignInWith 生成的代码。

func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) 

    if let auth = Auth.auth().currentUser 
        // do something now that user is logged in...
    

上面的 auth 变量由 twitter 用户填充,我确实看到了 auth.displayName 值。 auth.email 为空。

【问题讨论】:

【参考方案1】:

我终于明白了。直到深入研究文档,我才意识到响应中有一个附加信息。所以代码看起来像......

func authUI(_ authUI: FUIAuth, didSignInWith authDataResult: AuthDataResult?, error: Error?) 
    guard error == nil else  return 
    if let auth = authDataResult?.user 
        if authDataResult?.additionalUserInfo?.isNewUser 
            let username = authDataResult!.additionalUserInfo?.username ?? ""
            let screenName = authDataResult!.additionalUserInfo?.profile?[screen_name] as? String ?? ""
        
    

对于 Twitter,用户名为空,但 screenName 包含用户的 Twitter 名称。

【讨论】:

以上是关于将 FirebaseUI 与 Twitter 登录一起使用(iOS 应用)的主要内容,如果未能解决你的问题,请参考以下文章

将 FirebaseUI 与 AngularFire2 一起使用

Firebase Auth 与 firebaseui-web 在身份验证后不会重定向

Apple 在 iOS (Swift) 上使用 FirebaseUI 登录不起作用

Facebook 的 FirebaseUI 身份验证不起作用

Android FirebaseUI 登录时使用 Google 错误获取发布密钥

无法将FirebaseUI与片段一起使用