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