处理多个请求时出现 ASAuthorizationController 问题

ASAuthorizationController issue when working with multiple requests

那么,问题来了:

如果我的应用程序钥匙串中同时有电子邮件密码和苹果 ID 记录, 并希望请求该数据进行自动登录, 我可以很好地获取基于电子邮件密码的帐户信息。

Apple ID 无法按预期工作。 我收到 ASAuthorizationAppleIDCredential 对象 authorizationCode == nil。 我确实收到 credential.identityToken 并且可以解码令牌。这是一个有效的,但问题是我需要 authorizationCode.

如果我使用 AppleAuthenticator 的独立 login 函数,它可以正常工作。 ASAuthorizationController 完美执行 performRequests,我可以从 ASAuthorizationAppleIDCredential 得到 authorizationCode。 问题出在 AggregatedAuthenticatorASAuthorizationController 似乎有点损坏,如果传递给它的请求不止一个,则无法获取所有数据。

AggregatedAuthenticator(anchor: view.window!).startAutoLogin() // does not work with apple id

但是

AppleAuthenticator(anchor: view.window!).login() // works

唯一的区别是 AppleAuthenticatorASAuthorizationController 中只使用一个请求。

我能想出的唯一解决方法是,如果我转到 AggregatedAuthenticator 并在那里再次登录,请参阅代码中的注释:

public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
    switch authorization.credential {
    case let appleIDCredential as ASAuthorizationAppleIDCredential:
        // Question: here we receive the credential without authorizationCode, but why?
        appleAuthenticator.login(with: appleIDCredential)
        // BUT if I do:
        // appleAuthenticator.login()
        // it works fine, but it shows that bottom sheet again asking for your face/touch-id again, but only for apple id this time
    case let emailPasswordPair as ASPasswordCredential:
        emailAuthenticator.login(with: emailPasswordPair)
    default:
        print("Irrelevant stuff")
    }
}

伙计们,有什么想法吗?

看看下面的示例代码:

https://github.com/SergeyPetrachkov/ASAuthControllerIssueSample

好的,伙计们,这是 iOS 15 回归。之前一切正常。