无法在多平台应用程序上保留 Firebase 身份验证

问题描述 投票:0回答:1

设置

  • iOS 和 macOS 目标具有相同捆绑 ID 的 Swift 应用程序:
    com.teamName.appName
  • 应用组:
    group.com.teamName.appName
  • 钥匙扣分享群:
    com.teamName.appName
  • 身份验证设置:
    try Auth.auth().useUserAccessGroup("group.com.teamName.appName")
  • 此设置对于维护应用扩展(通知、共享扩展)中的登录状态是必要的

问题

  • iOS:身份验证状态保持正确
  • macOS:每次都需要重新验证
  • macOS 上的错误:
    Error Domain=FIRAuthErrorDomain Code=17995 "An error occurred when accessing the keychain."

尝试修复

  • 将应用程序组从
    group.com.teamName.appName
    更改为
    teamId.group.com.teamName.appName
  • 这种方法模仿钥匙串组的自动行为
  • 修复背后的原因: 一个。钥匙串组会自动在权利文件中添加团队 ID。例如,在目标中将钥匙串组设置为
    com.teamName.AppName
    实际上将其在权利中设置为
    $(AppIdentifierPrefix)com.teamName.AppName
    b.假设应用程序组可能需要针对 macOS 进行类似的处理
  • 实施: 一个。 修改了项目设置中的应用组标识符 b. 更新了身份验证设置中的
    useUserAccessGroup
    调用:
    try Auth.auth().useUserAccessGroup("teamId.group.com.teamName.appName")
    c. 调整了整个代码库中对应用程序组的任何其他引用

结果

  • macOS:编译、运行并保留身份验证
  • iOS:无法在物理设备上编译并出现错误: 应用程序组标识符应以“group”开头。
  • (注意:在模拟器中编译良好)

问题

如何解决此问题以使 iOS 和 macOS 应用程序都编译、运行并保留其身份验证状态?有没有办法在同一目标中为 iOS 和 macOS 使用不同的应用程序组标识符,或者我应该考虑分离目标?

swift firebase firebase-authentication
1个回答
0
投票

您在 macOS 上遇到的错误“Error Domain=FIRAuthErrorDomain Code=17995 '访问钥匙串时发生错误'”与访问钥匙串的问题有关。查看这个 github 问题

在 iOS 中,应用程序组 ID 必须以前缀“group”开头。这是由 Apple 的配置门户强制执行的,任何偏离此格式的行为都将导致物理设备上的编译错误。 虽然 macOS 没有对配置文件中的应用程序组 ID 强制执行同样严格的要求,但建议使用您的团队 ID 来启动应用程序组 ID,以确保唯一性。但是,macOS 在权利文件中构建应用程序组 ID 方面提供了更大的灵活性。

尝试以下步骤:

  1. 对于 iOS,请确保您的应用程序组标识符以“group”开头。按照苹果公司的要求。
  2. 对于 macOS,如果没有问题,您可以继续使用 teamId.group.com.teamName.appName 格式。
  3. 确保您的钥匙串共享权利在 Xcode 的“签名和功能”下正确设置。钥匙串组的格式应为
    <TEAM_ID>.<APP_NAME>.<GROUP_NAME>
  4. 确保您的 Firebase 配置(例如 GoogleService-Info.plist)与您的捆绑包 ID 和其他项目设置匹配
  5. 如果这不能解决问题,请查找 NSError.userInfo 字典以获取更详细的错误
© www.soinside.com 2019 - 2024. All rights reserved.