NYAppleApiManager.swift 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. //
  2. // NYAppleApiManager.swift
  3. // JiaPeiManage
  4. //
  5. // Created by Ning.ge on 2023/8/7.
  6. //
  7. import Foundation
  8. import SwiftyJSON
  9. import RxSwift
  10. import AuthenticationServices
  11. class NYAppleApiManager : NSObject {
  12. //rxcode 回调
  13. let blockSubject = PublishSubject<[String]>()
  14. var city:String = ""
  15. // 静态属性,用于存储单例实例
  16. static let shared = NYAppleApiManager()
  17. override init() {
  18. super.init()
  19. }
  20. func performSignIn(city:String){
  21. self.city = city
  22. if #available(iOS 13.0, *) {
  23. let appleIDProvider = ASAuthorizationAppleIDProvider()
  24. let request = appleIDProvider.createRequest()
  25. request.requestedScopes = [.fullName, .email]
  26. let authorizationController = ASAuthorizationController(authorizationRequests: [request])
  27. authorizationController.delegate = self
  28. authorizationController.presentationContextProvider = self
  29. authorizationController.performRequests()
  30. } else {
  31. // Fallback on earlier versions
  32. NYTips.showMsg(txt: "请升级到iOS13.0以上")
  33. }
  34. }
  35. }
  36. extension NYAppleApiManager: ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding {
  37. // ASAuthorizationControllerDelegate methods
  38. @available(iOS 13.0, *)
  39. func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
  40. if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
  41. // Get the user's unique Apple ID and user information
  42. let userIdentifier = appleIDCredential.user
  43. let fullName = appleIDCredential.fullName
  44. let email = appleIDCredential.email
  45. var array = [userIdentifier]
  46. // 服务器验证需要使用的参数
  47. if let authorizationCodeData = appleIDCredential.authorizationCode,
  48. let authorizationCode = String(data: authorizationCodeData, encoding: .utf8) {
  49. print("Authorization Code: \(authorizationCode)")
  50. }
  51. if let identityTokenData = appleIDCredential.identityToken,
  52. let identityToken = String(data: identityTokenData, encoding: .utf8) {
  53. array.append(identityToken)
  54. print("Identity Token: \(identityToken)")
  55. }
  56. print("User ID: \(userIdentifier)")
  57. if let fullName = fullName {
  58. print("Full Name: \(fullName.givenName ?? "") \(fullName.familyName ?? "")")
  59. }
  60. if let email = email {
  61. print("Email: \(email)")
  62. }
  63. self.blockSubject.onNext(array) //发送rx消息
  64. }
  65. }
  66. @available(iOS 13.0, *)
  67. func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
  68. // Handle sign-in errors
  69. NYTips.showMsg(txt: "apple授权失败")
  70. print("Sign In with Apple failed(授权失败): \(error.localizedDescription)")
  71. }
  72. // ASAuthorizationControllerPresentationContextProviding method
  73. @available(iOS 13.0, *)
  74. func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
  75. let vc = NYWindow.currentVc()
  76. return vc.view.window!
  77. }
  78. }