// // NYAppleApiManager.swift // JiaPeiManage // // Created by Ning.ge on 2023/8/7. // import Foundation import SwiftyJSON import RxSwift import AuthenticationServices class NYAppleApiManager : NSObject { //rxcode 回调 let blockSubject = PublishSubject<[String]>() var city:String = "" // 静态属性,用于存储单例实例 static let shared = NYAppleApiManager() override init() { super.init() } func performSignIn(city:String){ self.city = city if #available(iOS 13.0, *) { let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self authorizationController.performRequests() } else { // Fallback on earlier versions NYTips.showMsg(txt: "请升级到iOS13.0以上") } } } extension NYAppleApiManager: ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding { // ASAuthorizationControllerDelegate methods @available(iOS 13.0, *) func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) { if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { // Get the user's unique Apple ID and user information let userIdentifier = appleIDCredential.user let fullName = appleIDCredential.fullName let email = appleIDCredential.email var array = [userIdentifier] // 服务器验证需要使用的参数 if let authorizationCodeData = appleIDCredential.authorizationCode, let authorizationCode = String(data: authorizationCodeData, encoding: .utf8) { print("Authorization Code: \(authorizationCode)") } if let identityTokenData = appleIDCredential.identityToken, let identityToken = String(data: identityTokenData, encoding: .utf8) { array.append(identityToken) print("Identity Token: \(identityToken)") } print("User ID: \(userIdentifier)") if let fullName = fullName { print("Full Name: \(fullName.givenName ?? "") \(fullName.familyName ?? "")") } if let email = email { print("Email: \(email)") } self.blockSubject.onNext(array) //发送rx消息 } } @available(iOS 13.0, *) func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) { // Handle sign-in errors NYTips.showMsg(txt: "apple授权失败") print("Sign In with Apple failed(授权失败): \(error.localizedDescription)") } // ASAuthorizationControllerPresentationContextProviding method @available(iOS 13.0, *) func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor { let vc = NYWindow.currentVc() return vc.view.window! } }