我正在我的应用分享扩展程序中进行一些API Firebase调用(下载一些用户特定数据),但用户未登录Firebase(又名currentUser
为零),因此我无法获取任何数据因为我需要uid。换句话说,数据库仅允许经过身份验证的用户访问数据。我该如何解决这个问题?
答案 0 :(得分:6)
要在KutakMir's answer上进行扩展,请执行以下步骤:
此Stackoverflow answer的步骤:
pod install
)在App Extension Programming Guide: Handling Common Scenarios中描述。基本上,在两个目标(即包含应用程序和共享扩展名)的功能选项卡上打开“ 应用程序组”,并在两个位置提供相同的名称。>
基本步骤类似于步骤2:在两个目标的功能标签上打开“ 钥匙串共享”,并在两个位置都提供名称。 (在the official docs中有更详细的说明。)
在使用文档中的查询时,请确保将您的APP_ID附加到“钥匙串”访问组中!上面的链接指出了这一点,但是 this Github issue comment is more useful。
我们的工作流程:
在登录时(在共享扩展程序或主应用程序中),将用户ID保存到共享容器,并使用用户ID作为密钥将用户名和密码保存到钥匙串中
在启动时(共享扩展名或主应用程序),检查共享容器中的用户ID。如果存在,则意味着用户已经登录了主应用程序或共享扩展名,因此应同时登录这两个应用程序。因此,从“钥匙串”中检索凭据,然后使用signIn(withEmail:password:completion:)
Our project at the point when everything was set up。重复很多,很麻烦,但是可以。相关文件是
这是最令人沮丧的部分。错误代码的类型为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