用户登录时,Firebase currentUser 在 iOS Today Extension 中返回 nil

Posted

技术标签:

【中文标题】用户登录时,Firebase currentUser 在 iOS Today Extension 中返回 nil【英文标题】:Firebase currentUser returns nil in iOS Today Extension while user is logged in 【发布时间】:2018-03-10 05:05:42 【问题描述】:

用户在主应用中获得授权,Firebase 在 Today Extension 中初始化:

// We check if FIRApp has already been configured with a static var, else it will crash...
    if !TodayViewController.isAlreadyLaunchedOnce 
        FirebaseApp.configure()
        TodayViewController.isAlreadyLaunchedOnce = true
    

我也启用了钥匙串共享,并且两次 currentUser 属性返回了正确的用户,但之后它总是返回“nil”

if let user = Auth.auth().currentUser

是否需要做一些额外的工作才能使其正常工作?

附:它与来宾用户无关,这里没有答案: How to access current firebase user from ios Today Extension? 这就是它不重复的原因。 我无法通过创建重复用户来解决问题。

谢谢!

【问题讨论】:

【参考方案1】:

我也面临同样的问题。目前我通过复制钥匙串中包含的数据来处理它。这可行,但我不能说这是一个有效的解决方案。

https://gist.github.com/hhyyg/c1481853bcac27a678f707c0d1afd0f4

【讨论】:

感谢您的回答!试图让它在此刻工作。您能否建议应该从哪些字段替换占位符? firebase_auth_hosted app firebase application id, firebase_auth_app extension firebase application id, firebase_auth_1___FIRAPP_DEFAULT_firebase_user - 我几乎尝试了 GoogleService-Info.plist 中的所有内容,但没有成功。示例将不胜感激。谢谢! 好了,终于成功了! hosted app firebase application id = GoogleService-Info.plist 中的 GOOGLE_APP_ID,__FIRAPP_DEFAULT 默认工作。需要具有相同组名的共享钥匙串。 这个解决方案对我有用。使用它作为 SiriKit 扩展【参考方案2】:

要使其正常工作,应该做两件事:

    在 2 个项目之间共享相同的 GoogleService-Info.plist(只是不要按照建议单独创建,请在原始项目中的 Target Membership 中检查您的应用扩展) 启用钥匙串共享

Firebase 显示如下警告:

4.9.0 - [Firebase/Core][I-COR000008] 项目的 Bundle ID 与“GoogleService-Info.plist”中的 Bundle ID 不一致, 或选项中的捆绑 ID(如果您使用自定义选项)。 为确保一切都可以正确配置,您可能需要 使 Bundle ID 保持一致。要继续使用此 plist 文件,您 可能会将您应用的捆绑包标识符更改为“net.mybundle.mybundle”。或者 您可以下载与您的捆绑包匹配的新配置文件 来自https://console.firebase.google.com/ 的标识符并替换 当前的。

但到目前为止效果很好..

附:有时 XCode 无法识别更改 GoogleService-Info.plist 并且它使用旧的。确保您有类似“项目的捆绑包 ID 与捆绑包 ID 不一致”之类的警告......如果没有 - 尝试禁用所有 GoogleService-Info.plist 中的应用扩展成员资格并运行项目(它应该在 Firebase 初始化中失败应用扩展)之后,只需重新启用应用扩展成员资格并再运行一次。

【讨论】:

这个解决方案有一个问题:在主应用重新登录后,今天扩展仍然使用旧用户登录。

以上是关于用户登录时,Firebase currentUser 在 iOS Today Extension 中返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

试图让 firebase.auth().currentUser 成为一个承诺

如何在不请求的情况下在firebase-auth中首次加载时获取currentUser

检查用户是否已登录Flutter&firebase auth |

每次页面重新启动时,Firebase.auth().currentUser 都会变为 null

Firebase AuthInstance.currentUser 成功重新加载后为空

firebase.auth().currentUser 为空