143 lines
4.8 KiB
Swift
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)
|
|
}
|
|
|
|
}
|