// // GuruAdMobBannerAd.swift // Pods // // Created by 250102 on 2025/5/9. // import GoogleMobileAds class GuruAdMobMRecView : GuruMRecView { 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 GuruAdMobMRecAd : GuruMRecAd, GADBannerViewDelegate { private let viewController: UIViewController private let adConfig: AdConfig private var bannerAd: GADBannerView? private var coordinator: GuruMRecCoordinator? 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 { self.bannerAd = GADBannerView(adSize: GADAdSizeMediumRectangle) self.bannerAd?.adUnitID = adUnitId self.bannerAd?.delegate = self self.bannerAd?.paidEventHandler = { paidValue in self.adRevenuePaid(ad: self.createFusionAd(self.bannerAd, adValue: paidValue)) } coordinator = GuruMRecCoordinator(viewController: viewController, mrecAd: GuruAdMobMRecView(bannerAd!), contentId: engineId) self.bannerAd?.load(GADRequest()) return true } override func show(request: MRecShowRequest? = nil) -> Bool { return coordinator?.show(request: request) ?? false } override func hide() -> Bool { return coordinator?.hide() ?? false } override func destroy() -> Bool { 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) } }