FusionAds-iOS/FusionAds/Classes/fusion/admob/GuruAdMobBannerAd.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)
}
}