首页 > 解决方案 > Swift:在应用程序之间共享身份验证状态

问题描述

在我的应用程序中,用户可以使用 Apple、Google、Facebook 和电子邮件登录Firebase。我也有一个Share Extension,我想auth-state从 Main-App 共享,所以我也可以Auth.auth.currentUser在我ShareExtension的内部调用,以便用户可以访问Cloud-Firestore

现在我知道Firebase提供了这个文档。但是我不确定第 2 步

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

我到底要在哪里称呼这个?

编辑:

主应用:

在此处输入图像描述

分享扩展: 在此处输入图像描述

更新:

error之前调用上面的代码时会抛出这个signIn

更改用户访问组时出错:%@ Error Domain=FIRAuthErrorDomain Code=17995 “访问钥匙串时发生错误。@c NSError.userInfo 字典中的 @c NSLocalizedFailureReasonErrorKey 字段将包含有关遇到的错误的更多信息” UserInfo={FIRAuthErrorUserInfoNameKey =ERROR_KEYCHAIN_ERROR, NSLocalizedFailureReason=SecItemCopyMatching (-34018), NSLocalizedDescription=访问钥匙串时出错。@c NSError.userInfo 字典中的 @c NSLocalizedFailureReasonErrorKey 字段将包含有关遇到的错误的更多信息}

标签: iosswiftfirebasefirebase-authentication

解决方案


在文档中,您可以看到必须遵循的流程。首先,在应用程序中任何有登录过程的地方,您都必须添加以下代码行:

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

您可以在委托的 didFinishLaunchingWithOptions 函数中添加它们,但您可以在任何需要的地方使用它。

在另一个应用程序中,您必须添加相同的代码。这两个应用程序必须具有相同的访问组,对吗?

然后在其中一个应用程序中,您必须执行这句话:

Auth.auth().signInAnonymously { result, error in
  // User signed in
}

您可以将它放在上面的第一个代码之后。然后,您将能够像这样在两个应用程序中访问用户:

var user = Auth.auth().currentUser

推荐阅读