簡體   English   中英

部署到 TestFlight 后,Apple 登錄無法正常工作

[英]Apple sign in not working after deploying to TestFlight

我在我的應用程序中啟用了使用 Apple 登錄。 實施后,當我從 Xcode 運行應用程序時,它工作正常。 但是,當我將應用程序部署到 TestFlight 時,單擊按鈕時似乎沒有任何反應。 在發布到 TestFlight 之前,我應該從開發到生產有什么需要改變的嗎? 所有其他社交登錄都運行良好,例如 Google 和 Facebook。

謝謝,

發生這種情況是因為您已經有權使用 Apple 登錄。 請轉到設置 > 單擊您的 Apple ID [第一個選項] > 密碼和安全 > 使用 Apple ID 的應用程序。 你會在那里找到你的應用程序。 刪除它並重試。 它會工作。

每當用戶與蘋果簽約時,您都需要將他的信息保存在任一鑰匙串中。 當用戶第二次通過身份驗證時,您將不會獲得所有用戶信息。 您需要從鑰匙串中檢索此信息。 還有一件事,確保用戶在他的數據不可用時看到警報,否則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!
    }
}

您需要在 Xcode 中啟用“使用 Apple 登錄”才能進行生產。

導航到應用程序 > 簽名和功能 > Select “發布”選項卡 > 單擊 + 並找到“使用 Apple 登錄”。

它應該看起來像這樣(Xcode 13.4.1):

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM