89 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Swift
		
	
	
			
		
		
	
	
			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
 | |
|     }
 | |
| }
 |