136 lines
3.8 KiB
Swift
136 lines
3.8 KiB
Swift
//
|
|
// SPBannerAdManager.swift
|
|
// ThimraTV
|
|
//
|
|
// Created by 长沙佳儿 on 2025/7/11.
|
|
//
|
|
|
|
import UIKit
|
|
import GoogleMobileAds
|
|
|
|
|
|
|
|
@objc protocol SPBannerAdManagerDelegate: NSObjectProtocol {
|
|
///广告加载失败
|
|
@objc optional func bannerAdManager(adManager: SPBannerAdManager, didLoadFail error: Error)
|
|
///广告加载成功
|
|
@objc optional func bannerAdManagerDidLoadFinish(adManager: SPBannerAdManager)
|
|
///广告被展示
|
|
@objc optional func bannerAdManagerDidShow(adManager: SPBannerAdManager)
|
|
///广告被关闭
|
|
@objc optional func bannerAdManagerDidDismiss(adManager: SPBannerAdManager)
|
|
}
|
|
|
|
|
|
@objc protocol SPBannerAdDelegate: NSObjectProtocol {
|
|
///广告加载失败
|
|
@objc optional func bannerAd(bannerAd: SPBannerAd, didLoadFail error: Error)
|
|
///广告加载成功
|
|
@objc optional func bannerAdDidLoadFinish(bannerAd: SPBannerAd)
|
|
///广告被展示
|
|
@objc optional func bannerAdDidShow(bannerAd: SPBannerAd)
|
|
///广告被关闭
|
|
@objc optional func bannerAdDidDismiss(bannerAd: SPBannerAd)
|
|
///广告被点击
|
|
@objc optional func bannerAdDidClick(ad: SPBannerAd)
|
|
}
|
|
|
|
@objc protocol SPBannerAd: NSObjectProtocol {
|
|
|
|
weak var delegate: SPBannerAdDelegate? { get set }
|
|
|
|
var adView: UIView { get }
|
|
|
|
var adPlatformKey: String { get }
|
|
|
|
var adUnitID: String { get }
|
|
|
|
func loadAd()
|
|
|
|
}
|
|
|
|
class SPBannerAdManager: NSObject {
|
|
|
|
let adUnitID = SPAdManager.manager.admob_bannerAdUnitID
|
|
|
|
let size = CGSize.init(width: kSPScreenWidth, height: 59)
|
|
|
|
weak var delegate: SPBannerAdManagerDelegate?
|
|
|
|
private lazy var bannerAd: SPBannerAd = {
|
|
let ad = SPAdmobBannerAd()
|
|
ad.delegate = self
|
|
return ad
|
|
}()
|
|
|
|
var view: UIView {
|
|
return bannerAd.adView
|
|
}
|
|
|
|
|
|
deinit {
|
|
NotificationCenter.default.removeObserver(self)
|
|
}
|
|
|
|
override init() {
|
|
super.init()
|
|
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil)
|
|
|
|
bannerAd.loadAd()
|
|
}
|
|
|
|
}
|
|
|
|
//MARK: -------------- SPBannerAdDelegate --------------
|
|
extension SPBannerAdManager: SPBannerAdDelegate {
|
|
|
|
///广告加载失败
|
|
func bannerAd(bannerAd: SPBannerAd, didLoadFail error: Error) {
|
|
self.requestStatAd(type: "load_failed", errorMsg: error.localizedDescription)
|
|
self.delegate?.bannerAdManager?(adManager: self, didLoadFail: error)
|
|
}
|
|
///广告加载成功
|
|
func bannerAdDidLoadFinish(bannerAd: SPBannerAd) {
|
|
self.requestStatAd(type: "start", errorMsg: nil)
|
|
self.delegate?.bannerAdManagerDidLoadFinish?(adManager: self)
|
|
}
|
|
///广告被展示
|
|
func bannerAdDidShow(bannerAd: SPBannerAd) {
|
|
self.delegate?.bannerAdManagerDidShow?(adManager: self)
|
|
}
|
|
///广告被关闭
|
|
func bannerAdDidDismiss(bannerAd: SPBannerAd) {
|
|
self.requestStatAd(type: "close", errorMsg: nil)
|
|
self.delegate?.bannerAdManagerDidDismiss?(adManager: self)
|
|
}
|
|
|
|
func bannerAdDidClick(ad: any SPBannerAd) {
|
|
self.requestStatAd(type: "click", errorMsg: nil)
|
|
}
|
|
}
|
|
|
|
|
|
//MARK: -------------- 统计 --------------
|
|
extension SPBannerAdManager {
|
|
|
|
func requestStatAd(type: String, errorMsg: String?) {
|
|
guard self.view.superview != nil else { return }
|
|
|
|
let model = SPStatAdModel()
|
|
model.type = type
|
|
model.ads_id = adUnitID
|
|
model.ad_platform_key = SPAdPlatformKey(rawValue: bannerAd.adPlatformKey)
|
|
model.error_msg = errorMsg
|
|
model.scene = .banner
|
|
|
|
SPStatAPI.requestStatAd(model: model)
|
|
}
|
|
|
|
|
|
@objc private func didEnterBackgroundNotification() {
|
|
|
|
self.requestStatAd(type: "Interrupt", errorMsg: nil)
|
|
}
|
|
}
|
|
|