用户未在Share App Extension中登录Firebase

Ces*_*are 8 ios firebase swift

我正在我的应用程序共享扩展程序中进行一些API Firebase调用(下载一些用户特定数据)但用户未登录到Firebase(也currentUser就是nil),所以我没有得到任何数据,因为我需要uid.换句话说,数据库仅允许经过身份验证的用户访问数据.我怎样才能解决这个问题?

tor*_*tte 6

为了扩展KutakMir的答案,这些步骤对我们有效:

步骤1.为共享扩展设置Firebase

这个Stackoverflow答案的步骤:

  1. 将包含应用程序的GoogleService-Info.plist复制到Xcode的扩展程序中
  2. 将复制的GoogleService-Info.plist拖到Xcode到您的共享扩展名中,然后
  3. 将BUNDLE_ID更改为共享扩展目标的名称
  4. 将新目标添加到您的Podfile
  5. 安装依赖项(pod install
  6. 在扩展程序中配置Firebase应用程序对象

步骤2.在包含(即,主)应用程序和共享扩展名之间设置共享容器

App Extension编程指南:处理常见场景中进行了介绍。基本上,在两个目标的“ 功能”选项卡上都打开“ 应用程序组 ” (即,包含应用程序和共享扩展名),并在两个位置提供相同的名称。

步骤3.设置钥匙串共享

基本步骤与步骤2相似:在“ 功能”选项卡上为两个目标都启用“ 钥匙串共享 ” ,并在两个位置都提供名称。(在官方文档中有更多详细信息。)

使用文档中的查询时,请确保将您的APP_ID附加到“钥匙串”访问组中!上面的链接指出了这一点,但是 这个Github问题注释更有用

步骤4.使用钥匙串和共享容器同步用户访问

我们的工作流程:

  • 登录时(在共享扩展程序或主应用程序中),将用户ID保存到共享容器中,并使用用户ID作为密钥将用户名和密码保存到钥匙串中

  • 在启动时(共享扩展名或主应用程序),检查共享容器中的用户ID。如果存在,则意味着用户已经登录了主应用程序或共享扩展名,因此应同时登录这两个应用程序。因此,请从“钥匙串”中检索凭证,然后使用signIn(withEmail:password:completion:)

我们的项目在一切就绪的时候。重复很多,很麻烦,但是可以。相关文件是

  • 访问新闻/LoginViewController.swift
  • 访问News / SessionStartViewController.swift
  • 访问新闻/NVC.swift
  • 访问新闻-Uploader / UploaderNavigationViewController.swift

追踪钥匙串错误代码

这是最令人沮丧的部分。错误代码的类型为OSStatus,并在“ 安全框架结果代码”中列出,但有时在测试时只会看到带符号的整数。我找不到官方列表,但是OSStatus.com可以省去很多麻烦。例如,这是所有安全框架代码查询


官方钥匙串文档的其他有用链接: