用户未在Share App Extension中登录Firebase

时间:2017-09-27 07:51:24

标签: ios swift firebase

我正在我的应用分享扩展程序中进行一些API Firebase调用(下载一些用户特定数据),但用户未登录Firebase(又名currentUser为零),因此我无法获取任何数据因为我需要uid。换句话说,数据库仅允许经过身份验证的用户访问数据。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

要在KutakMir's answer上进行扩展,请执行以下步骤:

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

Stackoverflow answer的步骤:

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

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

App Extension Programming Guide: Handling Common Scenarios中描述。基本上,在两个目标(即包含应用程序和共享扩展名)的功能选项卡上打开“ 应用程序组”,并在两个位置提供相同的名称。

第3步。设置钥匙串共享

基本步骤类似于步骤2:在两个目标的功能标签上打开“ 钥匙串共享”,并在两个位置都提供名称。 (在the official docs中有更详细的说明。)

  

在使用文档中的查询时,请确保将您的APP_ID附加到“钥匙串”访问组中!上面的链接指出了这一点,但是   this Github issue comment is more useful

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

我们的工作流程:

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

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

  • 登录用户

Our project at the point when everything was set up。重复很多,很麻烦,但是可以。相关文件是

  • 访问News / LoginViewController.swift
  • 访问News / SessionStartViewController.swift
  • 访问新闻/NVC.swift
  • 访问-新闻-上传器/UploaderNavigationViewController.swift

跟踪钥匙串错误代码

这是最令人沮丧的部分。错误代码的类型为OSStatus,并在Security Framework Result Codes中列出,但是有时在测试时只会看到带符号的整数。我找不到正式的名单,但是OSStatus.com可以省去很多麻烦。例如,这是一个query of all the Security Framework codes


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

答案 1 :(得分:2)

转到主目标和扩展程序目标并设置钥匙串共享。 Firebase Auth将访问令牌保存到钥匙串。

答案 2 :(得分:0)

现有答案并不能解决我的问题,但我确实找到了这个official FireBase documentation

总而言之,此修复程序使用的是应用组功能,该功能在应用和扩展程序中具有相同的标识符。

然后包含代码:

do {
  try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1")
} catch let error as NSError {
  print("Error changing user access group: %@", error)
}

在我的测试中,通过身份验证的用户在主应用程序和共享扩展名中具有相同的uid

HTH