处理多个请求时出现 ASAuthorizationController 问题
ASAuthorizationController issue when working with multiple requests
那么,问题来了:
如果我的应用程序钥匙串中同时有电子邮件密码和苹果 ID 记录,
并希望请求该数据进行自动登录,
我可以很好地获取基于电子邮件密码的帐户信息。
Apple ID 无法按预期工作。
我收到 ASAuthorizationAppleIDCredential
对象 authorizationCode == nil
。
我确实收到 credential.identityToken
并且可以解码令牌。这是一个有效的,但问题是我需要 authorizationCode
.
如果我使用 AppleAuthenticator
的独立 login
函数,它可以正常工作。 ASAuthorizationController
完美执行 performRequests
,我可以从 ASAuthorizationAppleIDCredential
得到 authorizationCode
。
问题出在 AggregatedAuthenticator
。 ASAuthorizationController
似乎有点损坏,如果传递给它的请求不止一个,则无法获取所有数据。
AggregatedAuthenticator(anchor: view.window!).startAutoLogin() // does not work with apple id
但是
AppleAuthenticator(anchor: view.window!).login() // works
唯一的区别是 AppleAuthenticator
在 ASAuthorizationController
中只使用一个请求。
我能想出的唯一解决方法是,如果我转到 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 回归。之前一切正常。
那么,问题来了:
如果我的应用程序钥匙串中同时有电子邮件密码和苹果 ID 记录, 并希望请求该数据进行自动登录, 我可以很好地获取基于电子邮件密码的帐户信息。
Apple ID 无法按预期工作。
我收到 ASAuthorizationAppleIDCredential
对象 authorizationCode == nil
。
我确实收到 credential.identityToken
并且可以解码令牌。这是一个有效的,但问题是我需要 authorizationCode
.
如果我使用 AppleAuthenticator
的独立 login
函数,它可以正常工作。 ASAuthorizationController
完美执行 performRequests
,我可以从 ASAuthorizationAppleIDCredential
得到 authorizationCode
。
问题出在 AggregatedAuthenticator
。 ASAuthorizationController
似乎有点损坏,如果传递给它的请求不止一个,则无法获取所有数据。
AggregatedAuthenticator(anchor: view.window!).startAutoLogin() // does not work with apple id
但是
AppleAuthenticator(anchor: view.window!).login() // works
唯一的区别是 AppleAuthenticator
在 ASAuthorizationController
中只使用一个请求。
我能想出的唯一解决方法是,如果我转到 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 回归。之前一切正常。