如何解决iOS仅使用Apple在iPad上使用Swift崩溃登录苹果评论
我的Webview应用被拒绝,因为我没有apple sign in
,因此我在提交之前实施了该应用并对其进行了测试,但我再次被拒绝,因为单击苹果登录时它在iPad running iOS 13.6.1 on WiFi
上崩溃了。我已经在模拟器中的几乎所有iPad上都进行了测试,但似乎工作得很好。请有人帮我,这真的是iOS的新手,甚至无法理解其中包含的错误日志。
下面,我包括了我用于Apple登录的所有相关类,还提供了错误日志报告ERROR REPORT 1和ERROR 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 举报,一经查实,本站将立刻删除。