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