1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- //
- // 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!
- }
- }
|