132 lines
3.4 KiB
Swift
132 lines
3.4 KiB
Swift
//
|
|
// VPBannerAdManager.swift
|
|
// Veloria
|
|
//
|
|
// Created by 湖南秦九 on 2025/7/15.
|
|
//
|
|
|
|
import UIKit
|
|
#if canImport(AppLovinSDK)
|
|
import AppLovinSDK
|
|
#endif
|
|
|
|
|
|
@objc protocol VPBannerAdDelegate: NSObjectProtocol {
|
|
///广告加载失败
|
|
@objc optional func bannerAd(bannerAd: VPBannerAd, didLoadFail error: Error)
|
|
///广告加载成功
|
|
@objc optional func bannerAdDidLoadFinish(bannerAd: VPBannerAd)
|
|
///广告被展示
|
|
@objc optional func bannerAdDidShow(bannerAd: VPBannerAd)
|
|
///广告被关闭
|
|
@objc optional func bannerAdDidDismiss(bannerAd: VPBannerAd)
|
|
///广告被点击
|
|
@objc optional func bannerAdDidClick(ad: VPBannerAd)
|
|
}
|
|
|
|
@objc protocol VPBannerAd: NSObjectProtocol {
|
|
|
|
weak var delegate: VPBannerAdDelegate? { get set }
|
|
|
|
var adView: UIView { get }
|
|
|
|
var adPlatformKey: String { get }
|
|
|
|
var adUnitID: String { get }
|
|
|
|
func loadAd()
|
|
|
|
}
|
|
|
|
class VPBannerAdManager: NSObject {
|
|
|
|
let size = CGSize.init(width: UIScreen.width, height: 59)
|
|
|
|
var videoInfo: VPVideoInfoModel?
|
|
|
|
private var adsDate: Date?
|
|
|
|
private(set) lazy var bannerAd: VPBannerAd = {
|
|
let ad = VPApplovinBannerAd()
|
|
ad.delegate = self
|
|
return ad
|
|
}()
|
|
|
|
var adView: 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: -------------- VPBannerAdDelegate --------------
|
|
extension VPBannerAdManager: VPBannerAdDelegate {
|
|
|
|
///广告加载失败
|
|
func bannerAd(bannerAd: VPBannerAd, didLoadFail error: Error) {
|
|
requestStatAd(type: "load_failed", errorMsg: error.localizedDescription)
|
|
}
|
|
///广告加载成功
|
|
func bannerAdDidLoadFinish(bannerAd: VPBannerAd) {
|
|
adsDate = Date()
|
|
requestStatAd(type: "start", errorMsg: nil)
|
|
}
|
|
///广告被展示
|
|
func bannerAdDidShow(bannerAd: VPBannerAd) {
|
|
|
|
}
|
|
///广告被关闭
|
|
func bannerAdDidDismiss(bannerAd: VPBannerAd) {
|
|
requestStatAd(type: "close", errorMsg: nil)
|
|
}
|
|
///广告被点击
|
|
func bannerAdDidClick(ad: VPBannerAd) {
|
|
requestStatAd(type: "click", errorMsg: nil)
|
|
}
|
|
|
|
}
|
|
|
|
extension VPBannerAdManager {
|
|
|
|
func requestStatAd(type: String, errorMsg: String?) {
|
|
|
|
var seconds = 0
|
|
if let adsDate = self.adsDate {
|
|
if type == "click" || type == "close" {
|
|
seconds = Int(Date().timeIntervalSince(adsDate))
|
|
}
|
|
}
|
|
|
|
if type == "close" && self.adsDate == nil { return }
|
|
|
|
let model = VPStatAdModel()
|
|
model.view_seconds = seconds
|
|
model.type = type
|
|
model.ads_id = bannerAd.adUnitID
|
|
model.ad_platform_key = VPAdPlatformKey(rawValue: bannerAd.adPlatformKey)
|
|
model.error_msg = errorMsg
|
|
model.scene = .banner
|
|
model.short_play_id = self.videoInfo?.short_play_id
|
|
model.short_play_video_id = self.videoInfo?.short_play_video_id
|
|
|
|
VPStatAPI.requestStatAd(model: model)
|
|
}
|
|
|
|
|
|
@objc private func didEnterBackgroundNotification() {
|
|
|
|
self.requestStatAd(type: "Interrupt", errorMsg: nil)
|
|
}
|
|
}
|