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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...