117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Swift
		
	
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Swift
		
	
	
|  | // | ||
|  | //  GuruAdMobBannerAd.swift | ||
|  | //  Pods | ||
|  | // | ||
|  | //  Created by 250102 on 2025/5/9. | ||
|  | // | ||
|  | 
 | ||
|  | import GoogleMobileAds | ||
|  | 
 | ||
|  | class GuruAdMobBannerView : GuruBannerView { | ||
|  |     func view() -> UIView { | ||
|  |         return bannerAdView | ||
|  |     } | ||
|  |      | ||
|  |     func setPlacementName(placement: String) { | ||
|  |     } | ||
|  |      | ||
|  |     func onShow() { | ||
|  |         bannerAdView.isHidden = false | ||
|  |         bannerAdView.isAutoloadEnabled = true | ||
|  |     } | ||
|  |      | ||
|  |     func onHide() { | ||
|  |         bannerAdView.isHidden = true | ||
|  |         bannerAdView.isAutoloadEnabled = false | ||
|  |     } | ||
|  |      | ||
|  |     private var bannerAdView: GADBannerView | ||
|  |      | ||
|  |     public init(_ banner: GADBannerView) { | ||
|  |         self.bannerAdView = banner | ||
|  |     } | ||
|  |      | ||
|  | } | ||
|  | 
 | ||
|  | class GuruAdMobBannerAd : GuruBannerAd, GADBannerViewDelegate { | ||
|  |     private let viewController: UIViewController | ||
|  |     private let adConfig: AdConfig | ||
|  |     private var bannerAd: GADBannerView? | ||
|  |     private var coordinator: GuruBannerCoordinator<GuruAdMobBannerView>? | ||
|  |     private var currentUid2Token: String = "" | ||
|  |      | ||
|  |     public init(viewController: UIViewController, adConfig: AdConfig) { | ||
|  |         self.viewController = viewController | ||
|  |         self.adConfig = adConfig | ||
|  |         super.init(engineId: adConfig.engineId, adUnitId: adConfig.adUnitId, adPlatform: AdPlatform.adMob) | ||
|  |     } | ||
|  |      | ||
|  |     override func load() -> Bool { | ||
|  |         let isTablet = UIDevice.current.userInterfaceIdiom == .pad | ||
|  |         let bannerSize = if (isTablet) { | ||
|  |             GADAdSizeBanner | ||
|  |         } else { | ||
|  |             GADAdSizeLargeBanner | ||
|  |         } | ||
|  |         self.bannerAd = GADBannerView(adSize: bannerSize) | ||
|  |         self.bannerAd?.adUnitID = adUnitId | ||
|  |         self.bannerAd?.delegate = self | ||
|  |         self.bannerAd?.paidEventHandler = { paidValue in | ||
|  |             self.adRevenuePaid(ad: self.createFusionAd(self.bannerAd, adValue: paidValue)) | ||
|  |         } | ||
|  |         coordinator = GuruBannerCoordinator(viewController: viewController, bannerAd: GuruAdMobBannerView(bannerAd!), contentId: engineId) | ||
|  |          | ||
|  |         self.bannerAd?.load(GADRequest()) | ||
|  |         return true | ||
|  |     } | ||
|  |      | ||
|  |     override func show(_ request: BannerShowRequest? = nil) -> Bool { | ||
|  |         return coordinator?.show(request) ?? false | ||
|  |     } | ||
|  |      | ||
|  |     override func hide() -> Bool { | ||
|  |         return coordinator?.hide() ?? false | ||
|  |     } | ||
|  |      | ||
|  |     override func destroy() -> Bool { | ||
|  |         let _ = coordinator?.destroy() | ||
|  |         coordinator = nil | ||
|  |         self.bannerAd?.delegate = nil | ||
|  |         self.bannerAd?.paidEventHandler = nil | ||
|  |         self.bannerAd = nil | ||
|  |         return true | ||
|  |     } | ||
|  |      | ||
|  |     override func updateOrientation(orientation: ScreenOrientation) -> Bool { | ||
|  |         return coordinator?.updateOrientation(orientation: orientation) ?? false | ||
|  |     } | ||
|  |      | ||
|  |     func bannerViewDidReceiveAd(_ bannerView: GADBannerView) { | ||
|  |         adLoaded(ad: createFusionAd(bannerView)) | ||
|  |     } | ||
|  |      | ||
|  |     func bannerViewDidRecordImpression(_ bannerView: GADBannerView) { | ||
|  |         adDisplayed(ad: createFusionAd(bannerView)) | ||
|  |     } | ||
|  |      | ||
|  |     func bannerViewDidRecordClick(_ bannerView: GADBannerView) { | ||
|  |         adClicked(ad: createFusionAd(bannerView)) | ||
|  |     } | ||
|  |      | ||
|  |     func bannerViewWillPresentScreen(_ bannerView: GADBannerView) { | ||
|  |         adBannerExpanded(ad: createFusionAd(bannerView)) | ||
|  |     } | ||
|  |      | ||
|  |     func bannerViewDidDismissScreen(_ bannerView: GADBannerView) { | ||
|  |         adBannerCollapsed(ad: createFusionAd(bannerView)) | ||
|  |     } | ||
|  |      | ||
|  |     func bannerView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: any Error) { | ||
|  |         adLoadFailed(loadFailedInfo: LoadFailedInfo(engineId: engineId, adPlatform: adPlatform, adType: adType, adUnitId: adUnitId, error: SwiftFusionError(error))) | ||
|  |     } | ||
|  |      | ||
|  |     private func createFusionAd(_ ad: GADBannerView?, adValue: GADAdValue? = nil) -> FusionAd { | ||
|  |         return AdMobFusionAd(engineId: engineId, adType: adType, adUnitId: adUnitId, ad: ad?.responseInfo, adValue: adValue) | ||
|  |     } | ||
|  | } |