同一应用程序下的多个应用程序 使用 Apple 登录

Nic*_*lio 5 ios ios-app-signing app-store-connect apple-sign-in sign-in-with-apple

我有多个应用程序(~20 个),并且我希望能够在每个应用程序中使用相同的帐户登录;这些应用程序属于同一个 Apple 开发者帐户。

当用户在其中一个应用程序中创建帐户时,这将允许访问应用程序并在它们之间同步内容(它会创建某种组织帐户)。然后可以在他们之间共享该帐户。

此流程已适用于自定义实现的电子邮件+密码身份验证和 Facebook 登录方法,但现在我需要引入“使用 Apple 登录”,并且遇到了一些问题。

当尝试在 App Store Connect 中的同一应用程序下添加多个应用程序时,出现以下错误:

已与此主应用程序关联的应用程序数量达到上限。最大限制:“5”

如何将所有约 20 个应用程序分组在一起,以便我可以识别从不同应用程序登录的同一用户?

Nic*_*lio 8

我在 WWDC21 期间联系了 Apple 工程师 - 通过 Apple 专用实验室登录,他们向我解释了如何解决此问题。

将多个应用程序添加到同一应用程序 ID 意味着同一目标但在不同平台上运行的应用程序(例如 iOS 应用程序、macOS 应用程序、watchOS 应用程序等)。

解决方案是启用每个应用程序作为 Sign in with Apple 的主 ID。

当从应用程序内触发“使用 Apple 登录”请求时,在成功响应后,authorizationController(controller:didCompleteWithAuthorization:)将调用回调。ASAuthorization成功转换后提供的对象可ASAuthorizationAppleIDCredential用于检索 JWT 令牌(具体来说,该令牌identityToken将用于在后端继续进行身份验证创建/识别。

func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
    switch authorization.credential {
    case let appleIDCredential as ASAuthorizationAppleIDCredential:
        guard let accessToken = appleIDCredential.identityToken else {
            // Handle your error here: access token not found
            return
        }
        let stringToken = String(decoding: accessToken, as: UTF8.self)
        // From here you can use the decoded access token or use the raw Data directly
    default:
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

该令牌包含一个唯一的用户 ID,可在sub密钥下找到,该 ID 是根据您的团队/开发者帐户 ID 和用户的 Apple ID 的组合创建的;

该值在您的开发者帐户中是唯一的,这意味着与您的应用程序关联的用户 Apple ID 和团队 ID 的组合将始终为该字段生成相同的值sub。这将跨应用程序识别用户,以便您的后端可以避免生成新帐户,而是返回现有的关联帐户。


Zic*_*eng 0

从你的问题来看,我认为苹果对链接应用程序设置的限制是无法改变的。但我建议您向 Apple 开发者支持团队发送电子邮件,询问他们是否允许 20 个应用程序共享相同的帐户信息,而不是目前最多 5 个。

除此之外,这就是我的想法:我不确定您的应用程序。我知道有些应用程序允许用户更改用户名。如果您遇到这种情况,您可以将用户名更改为昵称,并分配一个新用户名(可以是老用户的旧昵称或其电子邮件地址)。并使用户名不变。据我所知,当用户使用Sign-in with Apple时,你可以要求他们输入一些信息。在这种情况下,您可以要求他们输入一个用户名,该用户名稍后将成为其他应用程序中的通用用户名。这是我目前想到的解决方案。