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