部署到TestFlight后,Apple登录无法正常工作

问题描述

我的应用程序中启用了“使用Apple登录”功能。实施它之后,当我从Xcode运行该应用程序时,它运行良好。但是,当我将应用程序部署到TestFlight时,单击按钮似乎没有任何反应。在发布到TestFlight之前,有什么我应该从开发更改为生产的更改。其他所有社交登录都可以正常运行,例如Google和Facebook。

谢谢

解决方法

之所以发生这种情况,是因为您已经可以使用Apple登录。 请转到设置>单击您的Apple ID [第一个选项]>密码和安全性>使用Apple ID的应用程序。 您会在那找到您的应用程序。删除它,然后再试一次。会的。

每当用户使用Apple登录时,您都需要将其信息保存在任一钥匙串中。当用户第二次通过身份验证时,您将不会获得所有用户信息。 您需要从钥匙串中检索此信息。 还有一件事,请确保当用户的数据不可用时,用户会看到警报,否则Apple将由于无法登录而拒绝该应用程序。 使用此代码,根据您的要求进行更改。

// MARK: - Apple Sign In Delegate
@available(iOS 13.0,*)
extension SignupVC: ASAuthorizationControllerDelegate {
    func setupAppleButton() {
        var btnAuthorization = ASAuthorizationAppleIDButton(type: .signIn,style: .black)
        if #available(iOS 13.2,*) {
            btnAuthorization = ASAuthorizationAppleIDButton(type: .signUp,style: .black)
        }
        btnAuthorization.frame = CGRect(x: 16,y: 14,width: view.frame.size.width - 32,height: 44)
        btnAuthorization.addTarget(self,action: #selector(appleLogin),for: .touchUpInside)
        viewApple.addSubview(btnAuthorization)
    }
    @objc func appleLogin() {
        let appleIDProvider = ASAuthorizationAppleIDProvider()
        let request = appleIDProvider.createRequest()
        request.requestedScopes = [.fullName,.email]

        let authorizationController = ASAuthorizationController(authorizationRequests: [request])
        authorizationController.delegate = self
        authorizationController.presentationContextProvider = self
        authorizationController.performRequests()
    }
    /// Prepare requests for both Apple ID and password providers.
    private func performExistingAccountSetupFlows() {
        let requests = [ASAuthorizationAppleIDProvider().createRequest(),ASAuthorizationPasswordProvider().createRequest()]
        
        // Create an authorization controller with the given requests.
        let authorizationController = ASAuthorizationController(authorizationRequests: requests)
        authorizationController.delegate = self
        authorizationController.presentationContextProvider = self
        authorizationController.performRequests()
    }

    /// ASAuthorizationControllerDelegate function for authorization failed
    func authorizationController(controller: ASAuthorizationController,didCompleteWithError error: Error) {
        print(error.localizedDescription)
    }

    /// ASAuthorizationControllerDelegate function for successful authorization
    func authorizationController(controller: ASAuthorizationController,didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            // Create an account as per your requirement
            let appleUserFirstName = appleIDCredential.fullName?.givenName
            let appleUserLastName = appleIDCredential.fullName?.familyName
            let appleUserEmail = appleIDCredential.email
            
            guard [appleUserFirstName,appleUserLastName,appleUserEmail].contains(nil) else {
                keyChainHelper.appleUserID = appleIDCredential.user
                keyChainHelper.appleUserFname = appleUserFirstName
                keyChainHelper.appleUserLname = appleUserLastName
                keyChainHelper.appleUserEmail = appleUserEmail
                // Continue to your work
                return
            }
            let appleIDProvider = ASAuthorizationAppleIDProvider()
            appleIDProvider.getCredentialState(forUserID: appleIDCredential.user) { (credentialState,_) in
                switch credentialState {
                case .authorized:
                    guard let userID = self.keyChainHelper.appleUserID else {
                        print("data is not available.")
                        DispatchQueue.main.async {
                            self.showAlertToReset()
                        }
                        return }
                    if userID == appleIDCredential.user {
                        // Credential is valid
                        // Continiue to show 'User's Profile' Screen
                        
                        //Get saved info from Keychain
                        // Continue to your work
                        //self.keyChainHelper.appleUserFname,lName: self.keyChainHelper.appleUserLname,email: self.keyChainHelper.appleUserEmail)
                    }
                case .revoked:
                    // Credential is revoked.
                    // Show 'Sign In' Screen
                    break
                case .notFound:
                    // Credential not found.
                    // Show 'Sign In' Screen
                    break
                default:
                    break
                }
            }
            
        }
    }
    func showAlertToReset() {
        let alert = ADDAlertController(title: "",message:"Please reset account permission from Password & Security to Sign up with Apple.\nTap Settings > [your name] > Password & Security > Apple ID logins\n\nSwipe left on your app,tap delete > Stop using.",preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: strings.ok().uppercased(),style: .default,handler: nil))
        present(alert,animated: true,completion: nil)
    }
}
@available(iOS 13.0,*)
extension SignupVC: ASAuthorizationControllerPresentationContextProviding {
    // For present window
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window!
    }
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...