83 lines
3.1 KiB
Swift
83 lines
3.1 KiB
Swift
//
|
|
// GuruAdMobInterstitialAd.swift
|
|
// Pods
|
|
//
|
|
// Created by 250102 on 2025/5/9.
|
|
//
|
|
import GoogleMobileAds
|
|
|
|
class GuruAdMobInterstitialAd : GuruInterstitialAd, GADFullScreenContentDelegate {
|
|
private let viewController: UIViewController
|
|
private let adConfig: AdConfig
|
|
private var ad: GADInterstitialAd?
|
|
|
|
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 {
|
|
logInfo("request load")
|
|
Task { @MainActor in
|
|
do {
|
|
ad?.fullScreenContentDelegate = nil
|
|
ad?.paidEventHandler = nil
|
|
|
|
let interstitialAd = try await GADInterstitialAd.load(
|
|
withAdUnitID: adConfig.adUnitId, request: GADRequest())
|
|
interstitialAd.fullScreenContentDelegate = self
|
|
interstitialAd.paidEventHandler = { paidValue in
|
|
self.logInfo("revenue paid")
|
|
self.adRevenuePaid(ad: self.createFusionAd(interstitialAd, adValue: paidValue))
|
|
}
|
|
ad = interstitialAd
|
|
logInfo("loaded")
|
|
adLoaded(ad: createFusionAd(interstitialAd))
|
|
} catch {
|
|
logError("load failed, \(error.code) - \(error.localizedDescription)")
|
|
adLoadFailed(loadFailedInfo: LoadFailedInfo(engineId: engineId, adPlatform: adPlatform, adType: adType, adUnitId: adUnitId, error: SwiftFusionError(error)))
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
override func show(_ request: InterstitialShowRequest? = nil) -> Bool {
|
|
logInfo("request show")
|
|
guard let ad = ad else {
|
|
logWarn("AdMob interstitialAd not ready for show")
|
|
return false
|
|
}
|
|
ad.present(fromRootViewController: viewController)
|
|
return true
|
|
}
|
|
|
|
override func destroy() -> Bool {
|
|
logInfo("request destroy")
|
|
self.ad?.fullScreenContentDelegate = nil
|
|
self.ad?.paidEventHandler = nil
|
|
self.ad = nil
|
|
return true
|
|
}
|
|
|
|
func adDidRecordClick(_ ad: any GADFullScreenPresentingAd) {
|
|
adClicked(ad: createFusionAd(self.ad))
|
|
}
|
|
func adDidRecordImpression(_ ad: any GADFullScreenPresentingAd) {
|
|
adDisplayed(ad: createFusionAd(self.ad))
|
|
}
|
|
|
|
func adDidDismissFullScreenContent(_ ad: any GADFullScreenPresentingAd) {
|
|
adHidden(ad: createFusionAd(self.ad))
|
|
}
|
|
|
|
func ad(_ ad: any GADFullScreenPresentingAd, didFailToPresentFullScreenContentWithError error: any Error) {
|
|
logError("displayed failed, \(error.code) - \(error.localizedDescription)")
|
|
adDisplayFailed(ad: createFusionAd(self.ad), error: SwiftFusionError(error))
|
|
}
|
|
|
|
private func createFusionAd(_ interstitialAd: GADInterstitialAd?, adValue: GADAdValue? = nil) -> FusionAd {
|
|
return AdMobFusionAd(engineId: engineId, adType: adType, adUnitId: adUnitId, ad: interstitialAd?.responseInfo, adValue: adValue)
|
|
}
|
|
}
|