FusionAds-iOS/FusionAds/Classes/fusion/ironsource/GuruIronSourceImpressionDat...

89 lines
2.4 KiB
Swift

//
// GuruIronSourceImpressionDataDispatcher.swift
// Pods
//
// Created by 250102 on 2025/5/12.
//
import IronSource
internal protocol GuruIronSourceImpressionDataListenerRegistrar {
func register(adUnitId: String, listener: ISImpressionDataDelegate)
func unregister(listener: ISImpressionDataDelegate)
}
internal class GuruIronSourceImpressionDataDispatcher : NSObject, ISImpressionDataDelegate,
GuruIronSourceImpressionDataListenerRegistrar {
func impressionDataDidSucceed(_ impressionData: ISImpressionData?) {
guard let data = impressionData else { return }
dispatchImpressionData(data: data)
}
private var listeners: [(String, any ISImpressionDataDelegate)] = []
private func dispatchImpressionData(data: ISImpressionData) {
listeners.forEach {
let adUnitId = $0.0
let listener = $0.1
if (adUnitId == data.mediation_ad_unit_id) {
listener.impressionDataDidSucceed(data)
}
}
}
func register(
adUnitId: String,
listener: ISImpressionDataDelegate
) {
listeners.append((adUnitId, listener))
}
func unregister(listener: ISImpressionDataDelegate) {
listeners.removeAll { $0.1 === listener }
}
}
internal class IronSourceImpressedFusionAd: FusionAd {
private let impressionData: ISImpressionData
init(engineId: Int, adType: AdType, impressionData: ISImpressionData) {
self.impressionData = impressionData
super.init(engineId: engineId, adType: adType)
}
override public var adPlatform: AdPlatform {
return AdPlatform.ironSource
}
override public var adUnitId: String? {
return impressionData.mediation_ad_unit_id
}
override public var revenue: Double {
return impressionData.revenue?.doubleValue ?? 0.0
}
override public var waterfallName: String? {
return impressionData.auction_id
}
override public var placement: String? {
return impressionData.placement
}
override public var networkName: String? {
return impressionData.ad_network
}
override public var networkPlacement: String? {
return nil
}
override public var creativeId: String? {
return impressionData.creative_id
}
override public var adReviewCreativeId: String? {
return nil
}
}