125 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Swift
		
	
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Swift
		
	
	
|  | // | ||
|  | //  GuruIronSourceBannerAd.swift | ||
|  | //  Pods | ||
|  | // | ||
|  | //  Created by 250102 on 2025/5/7. | ||
|  | // | ||
|  | import IronSource | ||
|  | 
 | ||
|  | class GuruIronSourceBannerView : GuruBannerView { | ||
|  |     func view() -> UIView { | ||
|  |         return bannerAdView | ||
|  |     } | ||
|  |      | ||
|  |     func setPlacementName(placement: String) { | ||
|  |         bannerAdView.setPlacementName(placement) | ||
|  |     } | ||
|  |      | ||
|  |     func onShow() { | ||
|  |         bannerAdView.isHidden = false | ||
|  |         bannerAdView.resumeAutoRefresh() | ||
|  |     } | ||
|  |      | ||
|  |     func onHide() { | ||
|  |         bannerAdView.isHidden = true | ||
|  |         bannerAdView.pauseAutoRefresh() | ||
|  |     } | ||
|  |      | ||
|  |     public var bannerAdView: LPMBannerAdView | ||
|  |      | ||
|  |     public init(_ banner: LPMBannerAdView) { | ||
|  |         self.bannerAdView = banner | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | class GuruIronSourceBannerAd : GuruBannerAd, LPMBannerAdViewDelegate, ISImpressionDataDelegate { | ||
|  |      | ||
|  |     private let viewController: UIViewController | ||
|  |     private let adConfig: AdConfig | ||
|  |     private var bannerAdCoordinator: GuruBannerCoordinator<GuruIronSourceBannerView>? | ||
|  |     private var bannerAd: LPMBannerAdView? { return bannerAdCoordinator?.bannerAd.bannerAdView } | ||
|  |     private var contentView: UIView? | ||
|  |     private var currentUid2Token: String = "" | ||
|  |      | ||
|  |     private var contentId: Int { | ||
|  |         return self.adConfig.engineId | ||
|  |     } | ||
|  |      | ||
|  |     private let impressionListenerRegistrar: GuruIronSourceImpressionDataListenerRegistrar? | ||
|  |          | ||
|  |     public init(viewController: UIViewController, adConfig: AdConfig, impressionListenerRegistrar: GuruIronSourceImpressionDataListenerRegistrar? = nil) { | ||
|  |         self.viewController = viewController | ||
|  |         self.adConfig = adConfig | ||
|  |         self.impressionListenerRegistrar = impressionListenerRegistrar | ||
|  |         super.init(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: AdPlatform.ironSource) | ||
|  |     } | ||
|  |      | ||
|  |     override func load() -> Bool { | ||
|  |         let bannerAd = LPMBannerAdView(adUnitId: adConfig.adUnitId) | ||
|  |         bannerAd.loadAd(with: self.viewController) | ||
|  |         bannerAd.setDelegate(self) | ||
|  |         impressionListenerRegistrar?.unregister(listener: self) | ||
|  |         impressionListenerRegistrar?.register(adUnitId: adUnitId, listener: self) | ||
|  |         bannerAd.setAdSize(LPMAdSize.banner()) | ||
|  |         bannerAd.pauseAutoRefresh() | ||
|  |         bannerAdCoordinator = GuruBannerCoordinator(viewController: viewController, bannerAd: GuruIronSourceBannerView(bannerAd), contentId: contentId) | ||
|  |         return true | ||
|  |     } | ||
|  |      | ||
|  |     public override func show(_ request: BannerShowRequest? = nil) -> Bool { | ||
|  |         return bannerAdCoordinator?.show() ?? false | ||
|  |     } | ||
|  |      | ||
|  |     public override func hide() -> Bool { | ||
|  |         return bannerAdCoordinator?.hide() ?? false | ||
|  |     } | ||
|  |      | ||
|  |     override public func destroy() -> Bool { | ||
|  |         bannerAd?.destroy() | ||
|  |         let _ = bannerAdCoordinator?.destroy() | ||
|  |         bannerAdCoordinator = nil | ||
|  |         impressionListenerRegistrar?.unregister(listener: self) | ||
|  |         return true | ||
|  |     } | ||
|  |      | ||
|  |     override public func updateOrientation(orientation: ScreenOrientation) -> Bool { | ||
|  |         return bannerAdCoordinator?.updateOrientation(orientation: orientation) ?? false | ||
|  |     } | ||
|  |      | ||
|  |     func didLoadAd(with adInfo: LPMAdInfo) { | ||
|  |         adLoaded(ad: IronSourceFusionAd(engineId: engineId, adType: adType, ad: adInfo)) | ||
|  |     } | ||
|  |      | ||
|  |     func didFailToLoadAd(withAdUnitId adUnitId: String, error: any Error) { | ||
|  |         adLoadFailed(loadFailedInfo: LoadFailedInfo(engineId: engineId, adPlatform: adPlatform, adType: adType, adUnitId: adUnitId, error: SwiftFusionError(error))) | ||
|  |     } | ||
|  |      | ||
|  |     func didClickAd(with adInfo: LPMAdInfo) { | ||
|  |         adClicked(ad: IronSourceFusionAd(engineId: engineId, adType: adType, ad: adInfo)) | ||
|  |     } | ||
|  |      | ||
|  |     func didExpandAd(with adInfo: LPMAdInfo) { | ||
|  |         adBannerExpanded(ad: IronSourceFusionAd(engineId: engineId, adType: adType, ad: adInfo)) | ||
|  |     } | ||
|  |      | ||
|  |     func didDisplayAd(with adInfo: LPMAdInfo) { | ||
|  |         adDisplayed(ad: IronSourceFusionAd(engineId: engineId, adType: adType, ad: adInfo)) | ||
|  |     } | ||
|  |      | ||
|  |     func didCollapseAd(with adInfo: LPMAdInfo) { | ||
|  |         adBannerCollapsed(ad: IronSourceFusionAd(engineId: engineId, adType: adType, ad: adInfo)) | ||
|  |     } | ||
|  |      | ||
|  |     func didFailToDisplayAd(with adInfo: LPMAdInfo, error: any Error) { | ||
|  |         adDisplayFailed(ad: IronSourceFusionAd(engineId: engineId, adType: adType, ad: adInfo), error: SwiftFusionError(error)) | ||
|  |     } | ||
|  |      | ||
|  |     func didLeaveApp(with adInfo: LPMAdInfo) { | ||
|  |          | ||
|  |     } | ||
|  |      | ||
|  |     func impressionDataDidSucceed(_ impressionData: ISImpressionData!) { | ||
|  |         adRevenuePaid(ad: IronSourceImpressedFusionAd(engineId: engineId, adType: adType, impressionData: impressionData)) | ||
|  |     } | ||
|  | } |