#ios #swift #wkwebview #apple-sign-in
#iOS #swift #wkwebview #apple-вход
Вопрос:
Мое приложение webview было отклонено, потому что у меня его нет apple sign in
, поэтому я внедрил его и протестировал перед отправкой, я снова получил отказ из-за сбоя iPad running iOS 13.6.1 on WiFi
при нажатии на вход с помощью Apple. Я тестировал почти на всех iPad в эмуляторе, но, похоже, он работает очень хорошо. Пожалуйста, кто-нибудь может мне помочь, я действительно новичок в iOS, даже не могу понять журналы ошибок, которые они включили.
Ниже я включил все связанные классы, которые я использовал для входа в Apple, а также ссылку на отчет журнала ошибок, ОТЧЕТ ОБ ОШИБКЕ 1 и ОТЧЕТ ОБ ОШИБКЕ 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()
}
Расширение для входа в Apple
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 amp;amp; 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!
}
}
Мой класс Utils
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()
}
}
}
Комментарии:
1. Чтобы разобраться в сообщениях об ошибках, вам необходимо выполнить поиск информации о том, как обозначить трассировку стека, которую они вам предоставили. Когда вы сделаете это правильно, фрейм 7 (0x00000001025ad544 0x1023b4000 2069828) превратится в читаемое место в вашем коде.
2. @PhillipMills Я действительно не знаю, как это сделать, я только начал работать с iOS
3. developer.apple.com/library/archive/technotes/tn2151/…
4. @PhillipMills спасибо, теперь я могу понять причину ошибки.