import Flutter import AppTrackingTransparency import AdSupport public class UnionAdSsgfPlugin: NSObject, FlutterPlugin ,FlutterStreamHandler{ static var methodName = "union_ad_ssgf_method" static var eventName = "union_ad_ssgf_event" var splashAd: FAQSplashPage? var rewardAd: FAQRewardVideoPage? var sink:FlutterEventSink? public static func register(with registrar: FlutterPluginRegistrar) { let methodChannel = FlutterMethodChannel(name: methodName, binaryMessenger: registrar.messenger()); let eventChannel = FlutterEventChannel(name: eventName, binaryMessenger: registrar.messenger()); let instance = UnionAdSsgfPlugin(); registrar.addMethodCallDelegate(instance, channel: methodChannel); eventChannel.setStreamHandler(instance); } public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "getPlatformVersion": getPlatformVersion(call: call, result: result) case "requestIDFA": requestIDFA(call: call, result: result) case "initAd": // 初始化 initAd(call:call, result: result); case "setPersonalizedState": // 设置广告个性化 setPersonalizedState(call:call, result: result); case "showSplashAd": // 开屏广告 showSplashAd(call:call, result: result); case "showRewardVideoAd": // 激励广告 showRewardVideoAd(call:call, result: result); default: result(FlutterMethodNotImplemented) } } // 版本号 public func getPlatformVersion(call: FlutterMethodCall, result: @escaping FlutterResult) { result("iOS " + UIDevice.current.systemVersion) } // 初始化广告 public func initAd(call: FlutterMethodCall, result: @escaping FlutterResult) { if let arguments = call.arguments as? [String: Any], let appId = arguments["appId"] as? String { print("App ID: \(appId)") // 初始化插件 let initSuccess = GDTSDKConfig.initWithAppId(appId) print("初始化插件 initSuccess: \(initSuccess)") result(NSNumber(value: initSuccess)) GDTSDKConfig.start {success, error in // 返回结果 result(true) if success { result(NSNumber(value: true)) } else { result(NSNumber(value: false)) if let error = error { print("FlutterQqAdsPlugin initAd error: \(error.localizedDescription)") } } } } else { print("appId not found or invalid type.") result(NSNumber(value: false)) // 处理无效的 appId } } // 透明权限 public func requestIDFA(call: FlutterMethodCall, result: @escaping FlutterResult) { if #available(iOS 14, *) { ATTrackingManager.requestTrackingAuthorization { status in let requestResult = (status == .authorized) print("requestIDFA: \(requestResult ? "YES" : "NO")") result(requestResult) } } else { result(true) } } // 设置广告个性化 public func setPersonalizedState(call: FlutterMethodCall, result: @escaping FlutterResult) { if let arguments = call.arguments as? [String: Any], let state = arguments["state"] as? Int { print("Set State : \(state)") GDTSDKConfig.setPersonalizedState(state) result(NSNumber(value: true)) } else { print("appId not found or invalid type.") result(NSNumber(value: false)) // 处理无效的 appId } } // 开屏广告 public func showSplashAd(call: FlutterMethodCall, result: FlutterResult) { // 初始化 FAQSplashPage 实例 self.splashAd = FAQSplashPage() if(self.sink != nil){ print("--------------->>>>> showSplashAd"); self.splashAd?.showAd(call: call, eventSink: self.sink!) result(true) }else{ result(NSNumber(value: false)) } } // 激励广告 public func showRewardVideoAd(call: FlutterMethodCall, result: FlutterResult) { // 初始化 FAQRewardVideoPage 实例 self.rewardAd = FAQRewardVideoPage(); if(self.sink != nil){ self.rewardAd?.showAd(call: call, eventSink: self.sink!) result(NSNumber(value: true)) }else{ result(NSNumber(value: false)) } } // 设置事件接收器 public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { self.sink = events return nil } // 清空事件接收器 public func onCancel(withArguments arguments: Any?) -> FlutterError? { self.sink = nil; return nil; } // 添加事件 private func addEvent(_ event: NSObject) { self.sink?(event) } }