微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

iOS仅使用Apple在iPad上使用Swift崩溃登录苹果评论

如何解决iOS仅使用Apple在iPad上使用Swift崩溃登录苹果评论

我的Webview应用被拒绝,因为我没有apple sign in,因此我在提交之前实施了该应用并对其进行了测试,但我再次被拒绝,因为单击苹果登录时它在iPad running iOS 13.6.1 on WiFi 上崩溃了。我已经在模拟器中的几乎所有iPad上都进行了测试,但似乎工作得很好。请有人帮我,这真的是iOS的新手,甚至无法理解其中包含的错误日志。

下面,我包括了我用于Apple登录的所有相关类,还提供了错误日志报告ERROR REPORT 1ERROR REPORT 2链接

我的主视图控制器

class HomeVC: UIViewController {
    func signInWithAppleButtonpressed() {
        let provider = ASAuthorizationAppleIDProvider()
        let request = provider.createRequest()
        request.requestedScopes = [.fullName,.email]

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

    //I call this method on javascript callback from webview
    //signInWithAppleButtonpressed()
}

苹果登录的扩展名

extension HomeVC: ASAuthorizationControllerDelegate {

  func authorizationController(controller: ASAuthorizationController,didCompleteWithAuthorization authorization: ASAuthorization) {
        guard let credentials = authorization.credential as? ASAuthorizationAppleIDCredential else {return}
        
    var payload: [String: Any] = [:]
    if user.apple_payload.count > 0 && user.apple_payload["id"] as! String == credentials.user {
        payload = user.apple_payload
    }else {
        payload = [
            "givenname": credentials.fullName?.givenname as Any,"familyName": credentials.fullName?.familyName as Any,"email": credentials.email as Any,"id": credentials.user
        ]
         user.apple_payload = payload
    }

      if let identifyToken = credentials.identityToken {
         if let token = String(bytes: identifyToken,encoding: .utf8) {
             user.apple_id = credentials.user
             payload["identityToken"] = token
            let str = Utils.shared.DictionaryToString(payload: payload)
            if !str.isEmpty {
                SendToBackEnd(Utils.shared.toBase64(str: str))
            }
         }
         return
      }

  }
  
  func authorizationController(controller: ASAuthorizationController,didCompleteWithError error: Error) {
    print("Authorization returned an error: \(error.localizedDescription)")
  }
}


extension HomeVC: ASAuthorizationControllerPresentationContextProviding {

  func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
    return view.window!
  }
}

我的实用程序类

class Utils {
    static let shared = Utils()
    func DictionaryToString(payload: [String: Any]) -> String {
        if let jsonData = try? JSONSerialization.data(withJSONObject: payload,options: []) {
            if let jsonString = String(data: jsonData,encoding: .utf8) {
                return jsonString
            }
        }
        return ""
    }
    func toBase64(str: String) -> String {
        let utf8str = str.data(using: .utf8)
        if let base64Encoded = utf8str?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) {
        return base64Encoded
        }
        return ""
    }
}

我的用户类别

class User {

    var apple_id: String {
        get {
            return UserDefaults.standard.string(forKey: "UserAppleIdentification") ?? ""
        }
        set {
            UserDefaults.standard.set(newValue,forKey: "UserAppleIdentification")
            UserDefaults.standard.synchronize()
        }
    }
    
    var apple_payload: [String: Any] {
        get {
            return (UserDefaults.standard.dictionary(forKey: "UserApplePayloadIdentification") ?? [:]) as [String: Any]
        }
        set {
            UserDefaults.standard.set(newValue,forKey: "UserApplePayloadIdentification")
            UserDefaults.standard.synchronize()
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。