我创建了here之类的Apple登录
我以苹果为例,一切正常。
在我的项目中,我在“签名和功能”中添加了“使用Apple登录”。我在开发人员门户(证书,标识符和个人资料)中选中了“使用Apple登录”。
我获得了用户凭据。没问题。
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
switch authorization.credential {
case let appleIDCredential as ASAuthorizationAppleIDCredential:
let user = User(credentials: appleIDCredential)
self.saveUserInKeychain(user.id)
let txt = "\(user.id)\n\(user.first_name) \(user.last_name)\n\(user.email)"
let alert = UIAlertController(title: "OK", message: txt, preferredStyle: UIAlertController.Style.alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler: { alertAction in
alert.dismiss(animated: true, completion: nil)
}))
self.present(alert, animated: true, completion: nil)
default:
break
}
}
此处的用户状态为1。
但是在AppDelegate中,当我再次构建时,状态为.notFound和错误:
Error Domain=com.apple.AuthenticationServices.AuthorizationError Code=1000 "(null)"
对于AppDelegate,我使用苹果示例中的相同代码:
if #available(iOS 13.0, *) {
let appleIDProvider = ASAuthorizationAppleIDProvider()
appleIDProvider.getCredentialState(forUserID: KeychainItem.currentUserIdentifier) { (credentialState, error) in
print(error)
switch credentialState {
case .authorized:
DispatchQueue.main.async {
self.window?.rootViewController?.showMainViewControllerAuth()
}
case .revoked, .notFound:
DispatchQueue.main.async {
self.window?.rootViewController?.showMainViewControllerNoAuth()
}
default:
break
}
}
}
这里的用户状态为2!
我正在将构建提交给TestFlight,并且也出现错误.notFound(用户状态为2)。 苹果示例可以在iOS模拟器中正常运行。但是不是我的。
我认为问题在这里
Error Domain=com.apple.AuthenticationServices.AuthorizationError Code=1000 "(null)"
Xcode 11.3。目标iOS 11.0 我会忘记什么?
答案 0 :(得分:0)
我解决了!
在我的AppDelegate的didFinishLaunchingWithOptions中,检查推送通知,结构和Firebase中的注册等。 我不知道为什么,但是您需要先检查苹果认证是否存在,然后再进行检查。
这部分应该是didFinishLaunchingWithOptions中的第一部分:
if #available(iOS 13.0, *) {
let appleIDProvider = ASAuthorizationAppleIDProvider()
appleIDProvider.getCredentialState(forUserID: KeychainItem.currentUserIdentifier) { (credentialState, error) in
print(error)
switch credentialState {
case .authorized:
DispatchQueue.main.async {
self.window?.rootViewController?.showMainViewControllerAuth()
}
case .revoked, .notFound:
DispatchQueue.main.async {
self.window?.rootViewController?.showMainViewControllerNoAuth()
}
default:
break
}
}
}