AppDelegate.swift 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import UIKit
  2. import AppTrackingTransparency
  3. import Flutter
  4. import AuthenticationServices
  5. import Firebase
  6. @main
  7. @objc class AppDelegate: FlutterAppDelegate {
  8. var channel:FlutterMethodChannel!
  9. var appleLoginResultBlock:((Dictionary<String, String>)->())!
  10. override func application(
  11. _ application: UIApplication,
  12. didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  13. ) -> Bool {
  14. FirebaseApp.configure()
  15. GeneratedPluginRegistrant.register(with: self)
  16. self.initPlatformMethods()
  17. return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  18. }
  19. override func applicationDidBecomeActive(_ application: UIApplication) {
  20. if #available(iOS 14, *) {
  21. ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
  22. })
  23. }
  24. UIApplication.shared.applicationIconBadgeNumber = 0;
  25. }
  26. func initPlatformMethods(){
  27. self.channel = FlutterMethodChannel.init(name: "com.room/opapp", binaryMessenger: self.window.rootViewController as! FlutterBinaryMessenger)
  28. self.channel.setMethodCallHandler { call, result in
  29. if (call.method == "checkFace"){
  30. result(self.checkFace(path: call.arguments as! String));
  31. }else if (call.method == "appleLogin"){
  32. self.appleLogin()
  33. self.appleLoginResultBlock = { dic in
  34. result(dic);
  35. }
  36. }else if (call.method == "getNativeRouterName"){
  37. result("");
  38. }else if (call.method == "skipAndroidSplashScreen"){
  39. result(true);
  40. }
  41. }
  42. }
  43. func checkFace(path:String) -> Int{
  44. var image = CIImage.init(image: .init(contentsOfFile: path)!)
  45. var detector = CIDetector.init(ofType: CIDetectorTypeFace, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh])
  46. var features = detector!.features(in: image!);
  47. return features.count;
  48. }
  49. func appleLogin() {
  50. if #available(iOS 13.0, *) {
  51. let appleIDProvider = ASAuthorizationAppleIDProvider()
  52. let request = appleIDProvider.createRequest()
  53. request.requestedScopes = [.fullName, .email] // 可根据需求选择请求的范围
  54. let authorizationController = ASAuthorizationController(authorizationRequests: [request])
  55. authorizationController.delegate = self
  56. authorizationController.presentationContextProvider = self
  57. authorizationController.performRequests()
  58. } else {
  59. // Fallback on earlier versions
  60. }
  61. }
  62. }
  63. @available(iOS 13.0, *)
  64. extension AppDelegate: ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding {
  65. func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
  66. return UIApplication.shared.windows.filter({ $0.isKeyWindow }).last!
  67. }
  68. func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
  69. if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
  70. let identityToken = String.init(data: appleIDCredential.identityToken!, encoding: .utf8) ?? ""
  71. // let authorizationCode = String.init(data: appleIDCredential.authorizationCode!, encoding: .utf8) ?? ""
  72. self.appleLoginResultBlock(["identityToken":identityToken,"authorizationCode":appleIDCredential.user,"error":""])
  73. }else{
  74. self.appleLoginResultBlock(["error":"授权信息不符"]);
  75. }
  76. }
  77. func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
  78. // 处理登录错误
  79. // self.appleLoginResultBlock(["error":error.localizedDescription])
  80. var msg = "未知错误,请稍后重试";
  81. switch error {
  82. case ASAuthorizationError.unknown:
  83. //未知错误
  84. break;
  85. case ASAuthorizationError.canceled:
  86. //用户取消
  87. msg = "";
  88. case ASAuthorizationError.failed:
  89. msg = "授权请求失败";
  90. case ASAuthorizationError.invalidResponse:
  91. msg = "授权请求无响应";
  92. case ASAuthorizationError.notHandled:
  93. msg = "授权请求未处理";
  94. default:
  95. break;
  96. }
  97. self.appleLoginResultBlock(["error":msg])
  98. }
  99. }