修复广告bug

This commit is contained in:
zjx 2025-07-16 18:25:25 +08:00
parent 98191889a0
commit d341359a51

View File

@ -73,6 +73,11 @@ class VPAppOpenAdManager: NSObject {
}
private var isLoading = false
private var isShowing = false
///
private var needAutoShow = false
private var timeOutTimer: Timer?
deinit {
NotificationCenter.default.removeObserver(self)
@ -84,6 +89,18 @@ class VPAppOpenAdManager: NSObject {
}
func showAdIfAvailable() {
if self.appOpenAd?.isReady == true {
self.showAd()
} else {
self.timeOutTimer = Timer.scheduledTimer(timeInterval: 30, target: self, selector: #selector(handleTimeOutTimer), userInfo: nil, repeats: false)
self.needAutoShow = true
self.loadAd()
}
}
func loadAd() {
guard !isLoading else { return }
self.isLoading = true
@ -91,10 +108,32 @@ class VPAppOpenAdManager: NSObject {
appOpenAd?.loadAd()
}
func showAd() {
guard self.appOpenAd?.isReady == true else { return }
guard !self.isShowing else { return }
self.isShowing = true
self.appOpenAd?.showAd()
}
@objc private func handleTimeOutTimer() {
self.needAutoShow = false
cleanTimer()
let error = NSError(domain: "time-out", code: -1)
self.delegate?.appOpenAdManager?(adManager: self, didOtherFail: error)
}
private func cleanTimer() {
self.timeOutTimer?.invalidate()
self.timeOutTimer = nil
}
private func clean() {
appOpenAd = nil
delegate = nil
isLoading = false
isShowing = false
}
}
@ -103,6 +142,8 @@ extension VPAppOpenAdManager: VPAppOpenAdDelegate {
///广
func appOpenAd(ad: VPAppOpenAd, didLoadFail error: Error) {
cleanTimer()
isLoading = false
requestStatAd(type: "load_failed", errorMsg: error.localizedDescription)
self.delegate?.appOpenAdManager?(adManager: self, didLoadFail: error)
@ -111,13 +152,18 @@ extension VPAppOpenAdManager: VPAppOpenAdDelegate {
}
///广
func appOpenAdDidLoadFinish(ad: VPAppOpenAd) {
self.isLoading = false
self.delegate?.appOpenAdManagerDidLoadFinish?(adManager: self)
self.appOpenAd?.showAd()
if needAutoShow {
self.needAutoShow = false
self.showAd()
}
}
///广
func appOpenAd(ad: VPAppOpenAd, didDisplayFail error: Error) {
cleanTimer()
requestStatAd(type: "show_failed", errorMsg: error.localizedDescription)
self.delegate?.appOpenAdManager?(adManager: self, didDisplayFail: error)
clean()
@ -158,6 +204,7 @@ extension VPAppOpenAdManager {
@objc private func didEnterBackgroundNotification() {
guard self.isShowing else { return }
self.requestStatAd(type: "Interrupt", errorMsg: nil)
}