Apple登录始终返回.notFound

时间:2020-10-02 08:36:35

标签: ios swift xcode apple-sign-in

我创建了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 我会忘记什么?

1 个答案:

答案 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
        }
    }
}