94 lines
2.8 KiB
Swift
94 lines
2.8 KiB
Swift
//
|
|
// AuthAppleManager.swift
|
|
// yinmeng-ios
|
|
//
|
|
// Created by yinmeng on 2024/2/29.
|
|
//
|
|
|
|
import Foundation
|
|
import AuthenticationServices
|
|
|
|
typealias AuthCompletion = ([String: Any]?) -> Void
|
|
|
|
class AuthAppleManager:NSObject,ASAuthorizationControllerDelegate,ASAuthorizationControllerPresentationContextProviding {
|
|
public static var manager = AuthAppleManager.init()
|
|
|
|
var completion : AuthCompletion?
|
|
|
|
|
|
@available(iOS 13.0, *)
|
|
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
|
|
return keyWindow;
|
|
}
|
|
|
|
@available(iOS 13.0, *)
|
|
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
|
|
|
|
if authorization.credential.isKind(of: ASAuthorizationAppleIDCredential.self) {
|
|
|
|
let maiCssl : ASAuthorizationAppleIDCredential = authorization.credential as! ASAuthorizationAppleIDCredential
|
|
|
|
let maitokenJon = String.init(data: maiCssl.identityToken ?? Data.init(), encoding: String.Encoding.utf8)
|
|
let maicodeCa = String.init(data: maiCssl.authorizationCode ?? Data.init(), encoding: String.Encoding.utf8)
|
|
|
|
|
|
var reusltScom = Dictionary<String, Any>.init()
|
|
reusltScom.updateValue(maiCssl.user , forKey: "unionid")
|
|
reusltScom.updateValue(maitokenJon ?? "", forKey: "openid")
|
|
reusltScom.updateValue(maitokenJon ?? "", forKey: "access_token")
|
|
completion?(reusltScom)
|
|
}else{
|
|
HUDTool.show(with:"授权失败")
|
|
}
|
|
|
|
}
|
|
|
|
func authorizatio(block:AuthCompletion?) -> Void {
|
|
if #available(iOS 13.0, *){
|
|
completion = block
|
|
|
|
let providerCac : ASAuthorizationAppleIDProvider = ASAuthorizationAppleIDProvider.init()
|
|
|
|
let mairequestMka : ASAuthorizationAppleIDRequest = providerCac.createRequest()
|
|
mairequestMka.requestedScopes = [ASAuthorization.Scope.fullName,ASAuthorization.Scope.email]
|
|
|
|
let maicontrollerKKk : ASAuthorizationController = ASAuthorizationController.init(authorizationRequests: [mairequestMka])
|
|
maicontrollerKKk.delegate = self
|
|
maicontrollerKKk.presentationContextProvider = self
|
|
maicontrollerKKk.performRequests()
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@available(iOS 13.0, *)
|
|
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
|
|
let maierr = error as? NSError
|
|
if maierr != nil {
|
|
var message = ""
|
|
switch maierr?.code {
|
|
case ASAuthorizationError.canceled.rawValue:
|
|
message = "授权取消"
|
|
break
|
|
case ASAuthorizationError.failed.rawValue:
|
|
message = "授权请求失败"
|
|
break
|
|
case ASAuthorizationError.invalidResponse.rawValue:
|
|
message = "授权请求无响应"
|
|
break
|
|
case ASAuthorizationError.notHandled.rawValue:
|
|
message = "授权请求失败"
|
|
break
|
|
case ASAuthorizationError.unknown.rawValue:
|
|
message = "授权请求失败"
|
|
break
|
|
default:
|
|
break
|
|
}
|
|
HUDTool.show(with: message)
|
|
}
|
|
|
|
}
|
|
|
|
}
|