应用未在应用商店中被拒绝,因为苹果登录未发生

时间:2020-05-19 03:12:30

标签: ios swift app-store

与Apple的登录集成在一起,如下所示:

@available(iOS 13.0, *)
        @objc func signInWithApplePressed() {

                  let nonce = randomNonceString()
                                currentNonce = nonce
                                let appleIDProvider = ASAuthorizationAppleIDProvider()
                                let request = appleIDProvider.createRequest()
                                request.requestedScopes = [.fullName, .email]
                                request.nonce = sha256(nonce)

                                let authorizationController = ASAuthorizationController(authorizationRequests: [request])
                                authorizationController.delegate = self
                                authorizationController.presentationContextProvider = self
                                authorizationController.performRequests()
        }


  @available(iOS 13, *)
       private func sha256(_ input: String) -> String {


         let inputData = Data(input.utf8)
          let hashedData = SHA256.hash(data: inputData)
         let hashString = hashedData.compactMap {
           return String(format: "%02x", $0)
         }.joined()

         return hashString
       }

       private func randomNonceString(length: Int = 32) -> String {
         precondition(length > 0)
         let charset: Array<Character> =
             Array("0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._")
         var result = ""
         var remainingLength = length

         while remainingLength > 0 {
           let randoms: [UInt8] = (0 ..< 16).map { _ in
             var random: UInt8 = 0
             let errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random)
             if errorCode != errSecSuccess {
               fatalError("Unable to generate nonce. SecRandomCopyBytes failed with OSStatus \(errorCode)")
             }
             return random
           }

           randoms.forEach { random in
             if length == 0 {
               return
             }

             if random < charset.count {
               result.append(charset[Int(random)])
               remainingLength -= 1
             }
           }
         }

         return result
       }

apple sigin的扩展名如下所示。已经检查了模拟器和iphone设备的工作情况。工作正常

extension RegsiterViewController: ASAuthorizationControllerDelegate,ASAuthorizationControllerPresentationContextProviding {


    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
    switch authorization.credential {
    case let appleIDCredential as ASAuthorizationAppleIDCredential:

        let userIdentifier = appleIDCredential.user
        let email = appleIDCredential.email

               guard let nonce = currentNonce else {
                     fatalError("Invalid state: A login callback was received, but no login request was sent.")
                   }

               guard let appleIDToken = appleIDCredential.identityToken else {
                   print("Unable to fetch identity token")
                   return
                 }
                 guard let idTokenString = String(data: appleIDToken, encoding: .utf8) else {
                   print("Unable to serialize token string from data: \(appleIDToken.debugDescription)")
                   return
                 }
                 // Initialize a Firebase credential.
                 let credential = OAuthProvider.credential(withProviderID: "apple.com",
                                                           idToken: idTokenString,
                                                           rawNonce: nonce)
                 // Sign in with Firebase.
                 Auth.auth().signIn(with: credential) { (authResult, error) in

                   print("firebase sign in")
                   if (error != nil) {
                     // Error. If error.code == .MissingOrInvalidNonce, make sure
                     // you're sending the SHA256-hashed nonce as a hex string with
                     // your request to Apple.
                       print("error for firebase  apple creation is",error)
                     return
                   }

                   print("user signed into firebase with apple successfully")


                    guard let use = Auth.auth().currentUser else {
                        print("user uid is empty");

                        return
                    }
                    guard let user = authResult?.user
                        else { return }

                    let userRef = Database.database().reference().child("Users").child(user.uid)

                    userRef.observeSingleEvent(of: .value, with: { (snapshot) in
                        // 1
                        if let userDict = snapshot.value as? [String : Any] {
                            print("User already exists \(userDict.debugDescription).")
                            let vc = self.storyboard?.instantiateViewController(withIdentifier: "OptionViewController") as! OptionViewController

                            self.navigationController?.pushViewController(vc, animated: true)
                        } else {
                            print("New user!")

                            self.showAlert(message: "New user.Please sign up")

                        }
                    })
                 }
       break
    default:
        break
    }
    }

    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
       // Handle error.
       print("Sign in with Apple errored: \(error)")
     }

我没有使用代码使用Apple登录的问题,但是在应用商店中,他们使用Apple登录存在问题。并附有相同的屏幕截图。enter image description here

0 个答案:

没有答案
相关问题