用户登录时,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