union_ad_ssgf/ios/Classes/UnionAdSsgfPlugin.swift
2024-11-25 09:24:40 +08:00

143 lines
4.8 KiB
Swift

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)
}
}