广告事件统计
This commit is contained in:
parent
5d8529dd95
commit
e0160146e3
@ -24,16 +24,17 @@ import UIKit
|
||||
|
||||
|
||||
protocol FABannerAdDelegate: NSObjectProtocol {
|
||||
func fa_bannerAdDidStartLoad(ad: FABannerAd)
|
||||
///广告加载失败
|
||||
func fa_bannerAd(bannerAd: FABannerAd, didLoadFail error: Error)
|
||||
func fa_bannerAd(ad: FABannerAd, didLoadFail error: Error)
|
||||
///广告加载成功
|
||||
func fa_bannerAdDidLoadFinish(bannerAd: FABannerAd)
|
||||
func fa_bannerAdDidLoadFinish(ad: FABannerAd)
|
||||
///广告被展示
|
||||
func fa_bannerAdDidShow(bannerAd: FABannerAd)
|
||||
func fa_bannerAdDidShow(ad: FABannerAd, adInfo: [AnyHashable : Any])
|
||||
///广告展示失败
|
||||
func fa_bannerAd(bannerAd: FABannerAd, didDisplayFail error: Error)
|
||||
func fa_bannerAd(ad: FABannerAd, didDisplayFail error: Error)
|
||||
///广告被关闭
|
||||
func fa_bannerAdDidDismiss(bannerAd: FABannerAd)
|
||||
func fa_bannerAdDidDismiss(ad: FABannerAd)
|
||||
///广告被点击
|
||||
func fa_bannerAdDidClick(ad: FABannerAd)
|
||||
}
|
||||
@ -50,6 +51,8 @@ protocol FABannerAd: NSObjectProtocol {
|
||||
|
||||
var adUnitID: String { get }
|
||||
|
||||
var networkName: String { get set }
|
||||
|
||||
var isReady: Bool { get set }
|
||||
|
||||
func loadAd()
|
||||
@ -76,6 +79,12 @@ class FABannerAdManager: NSObject {
|
||||
}
|
||||
}
|
||||
|
||||
private var startShowDate: Date?
|
||||
private var startLoadDate: Date?
|
||||
private var endLoadDate: Date?
|
||||
///广告正在被展示
|
||||
private(set) var isShowingAd = false
|
||||
|
||||
var isAdAvailable: Bool {
|
||||
if FALogin.manager.userInfo?.user_level == .ad {
|
||||
return bannerAd?.isReady ?? false
|
||||
@ -84,12 +93,22 @@ class FABannerAdManager: NSObject {
|
||||
}
|
||||
}
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
}
|
||||
|
||||
override init() {
|
||||
super.init()
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil)
|
||||
}
|
||||
|
||||
func loadAd() {
|
||||
guard FALogin.manager.userInfo?.user_level == .ad else {
|
||||
let error = NSError(domain: "非广告用户", code: -1)
|
||||
self.delegate?.fa_bannerAdManager?(manager: self, didLoadFail: error)
|
||||
return
|
||||
}
|
||||
self.cleanAd()
|
||||
|
||||
let ad = FATradPlusBannerAd()
|
||||
ad.delegate = self
|
||||
@ -102,6 +121,9 @@ class FABannerAdManager: NSObject {
|
||||
|
||||
func cleanAd() {
|
||||
self.bannerAd = nil
|
||||
self.isShowingAd = false
|
||||
self.startLoadDate = nil
|
||||
self.endLoadDate = nil
|
||||
}
|
||||
|
||||
private func updateLayout() {
|
||||
@ -117,27 +139,43 @@ class FABannerAdManager: NSObject {
|
||||
//MARK: FABannerAdManager
|
||||
extension FABannerAdManager: FABannerAdDelegate {
|
||||
|
||||
func fa_bannerAd(bannerAd: any FABannerAd, didDisplayFail error: any Error) {
|
||||
func fa_bannerAdDidStartLoad(ad: any FABannerAd) {
|
||||
self.startLoadDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: .startLoad)
|
||||
}
|
||||
|
||||
func fa_bannerAd(ad: any FABannerAd, didDisplayFail error: any Error) {
|
||||
uploadAdsHistory(ad: ad, type: .showFailed, errorMsg: error.localizedDescription)
|
||||
self.delegate?.fa_bannerAdManager?(manager: self, didDisplayFail: error)
|
||||
}
|
||||
|
||||
func fa_bannerAd(bannerAd: any FABannerAd, didLoadFail error: any Error) {
|
||||
func fa_bannerAd(ad: any FABannerAd, didLoadFail error: any Error) {
|
||||
self.endLoadDate = Date()
|
||||
uploadAdsHistory(ad: ad, type: .loadFailed, errorMsg: error.localizedDescription)
|
||||
self.delegate?.fa_bannerAdManager?(manager: self, didLoadFail: error)
|
||||
}
|
||||
|
||||
func fa_bannerAdDidLoadFinish(bannerAd: any FABannerAd) {
|
||||
func fa_bannerAdDidLoadFinish(ad: any FABannerAd) {
|
||||
self.endLoadDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: .endLoad)
|
||||
self.delegate?.fa_bannerAdManagerDidLoadFinish?(manager: self)
|
||||
}
|
||||
|
||||
func fa_bannerAdDidShow(bannerAd: any FABannerAd) {
|
||||
func fa_bannerAdDidShow(ad: any FABannerAd, adInfo: [AnyHashable : Any]) {
|
||||
self.isShowingAd = true
|
||||
self.startShowDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: .show, viewSeconds: 0)
|
||||
self.requestUploadAdsPrice(ad: ad, adInfo: adInfo)
|
||||
self.delegate?.fa_bannerAdManagerDidShow?(manager: self)
|
||||
}
|
||||
|
||||
func fa_bannerAdDidDismiss(bannerAd: any FABannerAd) {
|
||||
func fa_bannerAdDidDismiss(ad: any FABannerAd) {
|
||||
self.uploadAdsHistory(ad: ad, type: .close)
|
||||
self.delegate?.fa_bannerAdManagerDidDismiss?(manager: self)
|
||||
}
|
||||
|
||||
func fa_bannerAdDidClick(ad: any FABannerAd) {
|
||||
self.uploadAdsHistory(ad: ad, type: .click)
|
||||
self.delegate?.fa_bannerAdManagerDidClick?(manager: self)
|
||||
}
|
||||
|
||||
@ -147,6 +185,54 @@ extension FABannerAdManager: FABannerAdDelegate {
|
||||
|
||||
extension FABannerAdManager {
|
||||
|
||||
@objc private func didEnterBackgroundNotification() {
|
||||
if !self.isShowingAd { return }
|
||||
guard let ad = self.bannerAd else { return }
|
||||
|
||||
self.uploadAdsHistory(ad: ad, type: .interrupt)
|
||||
}
|
||||
|
||||
func uploadAdsHistory(ad: any FABannerAd, type: FAAdManager.StatType, viewSeconds: Int? = nil, errorMsg: String? = nil) {
|
||||
var loadTime: Int?
|
||||
if let startDate = self.startLoadDate, let endDate = self.endLoadDate {
|
||||
loadTime = Int(endDate.timeIntervalSince(startDate))
|
||||
}
|
||||
|
||||
var showTime: Int? = viewSeconds
|
||||
if showTime == nil && (type == .click || type == .interrupt || type == .close) {
|
||||
if let startShowDate = self.startShowDate {
|
||||
showTime = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
}
|
||||
|
||||
let model = FAAdStatModel()
|
||||
model.scene = .banner
|
||||
if let loadTime = loadTime {
|
||||
model.loading_time = max(0, loadTime)
|
||||
}
|
||||
model.view_seconds = showTime
|
||||
model.ad_type = ad.adType.rawValue
|
||||
model.ads_id = ad.adUnitID
|
||||
model.ad_platform_key = ad.adPlatform
|
||||
model.type = type
|
||||
model.ag_platform_name = ad.networkName
|
||||
model.ad_platform_name = ad.adPlatform
|
||||
|
||||
FAStatAPI.requestUploadAdsHistory(model: model)
|
||||
}
|
||||
|
||||
func requestUploadAdsPrice(ad: any FABannerAd, adInfo: [AnyHashable : Any]) {
|
||||
guard let ecpm = adInfo["ecpm"] as? String else { return }
|
||||
let money = (NSNumber(string: ecpm)?.doubleValue ?? 0) / 1000
|
||||
|
||||
let model = FAUploadAdsPriceModel()
|
||||
model.short_play_launch_id = ad.adUnitID
|
||||
model.type = ad.adType.rawValue
|
||||
model.agent_name = ad.adPlatform.rawValue
|
||||
model.alliance_name = ad.networkName
|
||||
model.money = "\(money)"
|
||||
model.scene = .banner
|
||||
|
||||
FAStatAPI.requestUploadAdsPrice(model: model)
|
||||
}
|
||||
}
|
||||
|
||||
@ -46,6 +46,8 @@ class FATradPlusBannerAd: NSObject, FABannerAd {
|
||||
return self.adPlatform.bannerUnitId
|
||||
}
|
||||
|
||||
var networkName: String = ""
|
||||
|
||||
func loadAd() {
|
||||
#if canImport(TradPlusAds)
|
||||
self.bannerView.setAdUnitID(self.adUnitID)
|
||||
@ -58,23 +60,28 @@ class FATradPlusBannerAd: NSObject, FABannerAd {
|
||||
#if canImport(TradPlusAds)
|
||||
extension FATradPlusBannerAd: TradPlusADBannerDelegate {
|
||||
|
||||
func tpBannerAdStartLoad(_ adInfo: [AnyHashable : Any]) {
|
||||
self.delegate?.fa_bannerAdDidStartLoad(ad: self)
|
||||
}
|
||||
|
||||
func tpBannerAdLoaded(_ adInfo: [AnyHashable : Any]) {
|
||||
self.isReady = true
|
||||
self.networkName = (adInfo["adNetworkName"] as? String) ?? "unknown"
|
||||
debugLog("+++++++++++广告加载成功")
|
||||
self.delegate?.fa_bannerAdDidLoadFinish(bannerAd: self)
|
||||
self.delegate?.fa_bannerAdDidLoadFinish(ad: self)
|
||||
}
|
||||
|
||||
func tpBannerAdLoadFailWithError(_ error: any Error) {
|
||||
self.delegate?.fa_bannerAd(bannerAd: self, didLoadFail: error)
|
||||
self.delegate?.fa_bannerAd(ad: self, didLoadFail: error)
|
||||
}
|
||||
|
||||
func tpBannerAdImpression(_ adInfo: [AnyHashable : Any]) {
|
||||
debugLog("+++++++++++广告加载展示成功")
|
||||
self.delegate?.fa_bannerAdDidShow(bannerAd: self)
|
||||
self.delegate?.fa_bannerAdDidShow(ad: self, adInfo: adInfo)
|
||||
}
|
||||
|
||||
func tpBannerAdShow(_ adInfo: [AnyHashable : Any], didFailWithError error: any Error) {
|
||||
self.delegate?.fa_bannerAd(bannerAd: self, didDisplayFail: error)
|
||||
self.delegate?.fa_bannerAd(ad: self, didDisplayFail: error)
|
||||
}
|
||||
|
||||
func tpBannerAdClicked(_ adInfo: [AnyHashable : Any]) {
|
||||
|
||||
@ -23,6 +23,18 @@ class FAAdManager: NSObject {
|
||||
case splash = "splash"
|
||||
case banner = "banner"
|
||||
case open = "open"
|
||||
case native = "native"
|
||||
}
|
||||
|
||||
enum StatType: String, SmartCaseDefaultable {
|
||||
case startLoad = "startLoad"
|
||||
case showFailed = "show_failed"
|
||||
case loadFailed = "load_failed"
|
||||
case endLoad = "endLoad"
|
||||
case show = "start"
|
||||
case close = "close"
|
||||
case click = "click"
|
||||
case interrupt = "Interrupt"
|
||||
}
|
||||
|
||||
static func initSdk() {
|
||||
|
||||
@ -14,7 +14,7 @@ class FAAdStatModel: NSObject, SmartCodable {
|
||||
|
||||
|
||||
|
||||
var type: String? //start click error click show_failed load_failed Interrupt(退到后台) close
|
||||
var type: FAAdManager.StatType? //start click error click show_failed load_failed Interrupt(退到后台) close
|
||||
var ads_id: String?
|
||||
var view_seconds: Int?
|
||||
var loading_time: Int?
|
||||
|
||||
@ -24,18 +24,19 @@ import UIKit
|
||||
|
||||
|
||||
protocol FANativeAdDelegate: NSObjectProtocol {
|
||||
func fa_nativeAdDidStartLoad(ad: FANativeAd)
|
||||
///广告加载失败
|
||||
func fa_nativeAd(nativeAd: FANativeAd, didLoadFail error: Error)
|
||||
func fa_nativeAd(ad: FANativeAd, didLoadFail error: Error)
|
||||
///广告加载成功
|
||||
func fa_nativeAdDidLoadFinish(nativeAd: FANativeAd)
|
||||
func fa_nativeAdDidLoadFinish(ad: FANativeAd)
|
||||
///广告被展示
|
||||
func fa_nativeAdDidShow(nativeAd: FANativeAd)
|
||||
func fa_nativeAdDidShow(ad: FANativeAd, adInfo: [AnyHashable : Any])
|
||||
///广告展示失败
|
||||
func fa_nativeAd(nativeAd: FANativeAd, didDisplayFail error: Error)
|
||||
func fa_nativeAd(ad: FANativeAd, didDisplayFail error: Error)
|
||||
///广告被关闭
|
||||
func fa_nativeAdDidDismiss(nativeAd: FANativeAd)
|
||||
func fa_nativeAdDidDismiss(ad: FANativeAd)
|
||||
///广告被点击
|
||||
func fa_nativeAdDidClick(nativeAd: FANativeAd)
|
||||
func fa_nativeAdDidClick(ad: FANativeAd)
|
||||
}
|
||||
|
||||
protocol FANativeAd: NSObjectProtocol {
|
||||
@ -52,6 +53,8 @@ protocol FANativeAd: NSObjectProtocol {
|
||||
|
||||
var adUnitID: String { get }
|
||||
|
||||
var networkName: String { get set }
|
||||
|
||||
var isReady: Bool { get }
|
||||
|
||||
func loadAd()
|
||||
@ -83,10 +86,16 @@ class FANativeAdManager: NSObject {
|
||||
|
||||
///广告是否在加载中
|
||||
private(set) var isLoadingAd = false
|
||||
///广告正在被展示
|
||||
private(set) var isShowingAd = false
|
||||
|
||||
///是否展示过
|
||||
var hasShow = false
|
||||
|
||||
private var startShowDate: Date?
|
||||
private var startLoadDate: Date?
|
||||
private var endLoadDate: Date?
|
||||
|
||||
|
||||
private var nativeAd: FANativeAd? {
|
||||
didSet {
|
||||
@ -95,6 +104,14 @@ class FANativeAdManager: NSObject {
|
||||
}
|
||||
}
|
||||
|
||||
deinit {
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
}
|
||||
|
||||
override init() {
|
||||
super.init()
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil)
|
||||
}
|
||||
|
||||
|
||||
func load() {
|
||||
@ -121,6 +138,7 @@ class FANativeAdManager: NSObject {
|
||||
}
|
||||
guard !hasShow, self.isAdAvailable else { return }
|
||||
|
||||
self.isShowingAd = true
|
||||
self.hasShow = true
|
||||
self.nativeAd?.show()
|
||||
}
|
||||
@ -129,32 +147,100 @@ class FANativeAdManager: NSObject {
|
||||
|
||||
extension FANativeAdManager: FANativeAdDelegate {
|
||||
|
||||
func fa_nativeAdDidLoadFinish(nativeAd: any FANativeAd) {
|
||||
func fa_nativeAdDidStartLoad(ad: any FANativeAd) {
|
||||
self.startLoadDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: .startLoad)
|
||||
}
|
||||
|
||||
func fa_nativeAdDidLoadFinish(ad: any FANativeAd) {
|
||||
self.isLoadingAd = false
|
||||
self.endLoadDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: .endLoad)
|
||||
self.delegate?.fa_nativeAdManagerDidLoadFinish?(manager: self)
|
||||
}
|
||||
|
||||
func fa_nativeAdDidShow(nativeAd: any FANativeAd) {
|
||||
func fa_nativeAdDidShow(ad: any FANativeAd, adInfo: [AnyHashable : Any]) {
|
||||
self.startShowDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: .show, viewSeconds: 0)
|
||||
self.requestUploadAdsPrice(ad: ad, adInfo: adInfo)
|
||||
self.delegate?.fa_nativeAdManagerDidShow?(manager: self)
|
||||
}
|
||||
|
||||
func fa_nativeAd(nativeAd: any FANativeAd, didLoadFail error: any Error) {
|
||||
func fa_nativeAd(ad: any FANativeAd, didLoadFail error: any Error) {
|
||||
self.isLoadingAd = false
|
||||
self.endLoadDate = Date()
|
||||
uploadAdsHistory(ad: ad, type: .loadFailed, errorMsg: error.localizedDescription)
|
||||
self.delegate?.fa_nativeAdManager?(manager: self, didLoadFail: error)
|
||||
}
|
||||
|
||||
func fa_nativeAd(nativeAd: any FANativeAd, didDisplayFail error: any Error) {
|
||||
func fa_nativeAd(ad: any FANativeAd, didDisplayFail error: any Error) {
|
||||
uploadAdsHistory(ad: ad, type: .showFailed, errorMsg: error.localizedDescription)
|
||||
self.delegate?.fa_nativeAdManager?(manager: self, didDisplayFail: error)
|
||||
}
|
||||
|
||||
func fa_nativeAdDidDismiss(nativeAd: any FANativeAd) {
|
||||
func fa_nativeAdDidDismiss(ad: any FANativeAd) {
|
||||
self.uploadAdsHistory(ad: ad, type: .close)
|
||||
self.delegate?.fa_nativeAdManagerDidDismiss?(manager: self)
|
||||
}
|
||||
|
||||
func fa_nativeAdDidClick(nativeAd: any FANativeAd) {
|
||||
func fa_nativeAdDidClick(ad: any FANativeAd) {
|
||||
self.uploadAdsHistory(ad: ad, type: .click)
|
||||
self.delegate?.fa_nativeAdManagerDidClick?(manager: self)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
extension FANativeAdManager {
|
||||
|
||||
@objc private func didEnterBackgroundNotification() {
|
||||
if !self.isShowingAd { return }
|
||||
guard let ad = self.nativeAd else { return }
|
||||
|
||||
self.uploadAdsHistory(ad: ad, type: .interrupt)
|
||||
}
|
||||
|
||||
func uploadAdsHistory(ad: any FANativeAd, type: FAAdManager.StatType, viewSeconds: Int? = nil, errorMsg: String? = nil) {
|
||||
var loadTime: Int?
|
||||
if let startDate = self.startLoadDate, let endDate = self.endLoadDate {
|
||||
loadTime = Int(endDate.timeIntervalSince(startDate))
|
||||
}
|
||||
|
||||
var showTime: Int? = viewSeconds
|
||||
if showTime == nil && (type == .click || type == .interrupt || type == .close) {
|
||||
if let startShowDate = self.startShowDate {
|
||||
showTime = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
}
|
||||
|
||||
let model = FAAdStatModel()
|
||||
model.scene = .native
|
||||
if let loadTime = loadTime {
|
||||
model.loading_time = max(0, loadTime)
|
||||
}
|
||||
model.view_seconds = showTime
|
||||
model.ad_type = ad.adType.rawValue
|
||||
model.ads_id = ad.adUnitID
|
||||
model.ad_platform_key = ad.adPlatform
|
||||
model.type = type
|
||||
model.ag_platform_name = ad.networkName
|
||||
model.ad_platform_name = ad.adPlatform
|
||||
|
||||
FAStatAPI.requestUploadAdsHistory(model: model)
|
||||
}
|
||||
|
||||
func requestUploadAdsPrice(ad: any FANativeAd, adInfo: [AnyHashable : Any]) {
|
||||
guard let ecpm = adInfo["ecpm"] as? String else { return }
|
||||
let money = (NSNumber(string: ecpm)?.doubleValue ?? 0) / 1000
|
||||
|
||||
let model = FAUploadAdsPriceModel()
|
||||
model.short_play_launch_id = ad.adUnitID
|
||||
model.type = ad.adType.rawValue
|
||||
model.agent_name = ad.adPlatform.rawValue
|
||||
model.alliance_name = ad.networkName
|
||||
model.money = "\(money)"
|
||||
model.scene = .native
|
||||
|
||||
FAStatAPI.requestUploadAdsPrice(model: model)
|
||||
}
|
||||
}
|
||||
|
||||
@ -34,6 +34,8 @@ class FATradPlusNativeAd: NSObject, FANativeAd {
|
||||
return adPlatform.nativeUnitId
|
||||
}
|
||||
|
||||
var networkName: String = ""
|
||||
|
||||
var isReady: Bool {
|
||||
#if canImport(TradPlusAds)
|
||||
return self.nativeAd?.isAdReady ?? false
|
||||
@ -75,28 +77,33 @@ class FATradPlusNativeAd: NSObject, FANativeAd {
|
||||
#if canImport(TradPlusAds)
|
||||
extension FATradPlusNativeAd: TradPlusADNativeDelegate {
|
||||
|
||||
func tpNativeAdStartLoad(_ adInfo: [AnyHashable : Any]) {
|
||||
self.delegate?.fa_nativeAdDidStartLoad(ad: self)
|
||||
}
|
||||
|
||||
func tpNativeAdLoaded(_ adInfo: [AnyHashable : Any]) {
|
||||
self.delegate?.fa_nativeAdDidLoadFinish(nativeAd: self)
|
||||
self.networkName = (adInfo["adNetworkName"] as? String) ?? "unknown"
|
||||
self.delegate?.fa_nativeAdDidLoadFinish(ad: self)
|
||||
}
|
||||
|
||||
func tpNativeAdImpression(_ adInfo: [AnyHashable : Any]) {
|
||||
self.delegate?.fa_nativeAdDidShow(nativeAd: self)
|
||||
self.delegate?.fa_nativeAdDidShow(ad: self, adInfo: adInfo)
|
||||
}
|
||||
|
||||
func tpNativeAdLoadFailWithError(_ error: any Error) {
|
||||
self.delegate?.fa_nativeAd(nativeAd: self, didLoadFail: error)
|
||||
self.delegate?.fa_nativeAd(ad: self, didLoadFail: error)
|
||||
}
|
||||
|
||||
func tpNativeAdShow(_ adInfo: [AnyHashable : Any], didFailWithError error: any Error) {
|
||||
self.delegate?.fa_nativeAd(nativeAd: self, didDisplayFail: error)
|
||||
self.delegate?.fa_nativeAd(ad: self, didDisplayFail: error)
|
||||
}
|
||||
|
||||
func tpNativeAdClicked(_ adInfo: [AnyHashable : Any]) {
|
||||
self.delegate?.fa_nativeAdDidClick(nativeAd: self)
|
||||
self.delegate?.fa_nativeAdDidClick(ad: self)
|
||||
}
|
||||
|
||||
func tpNativeAdClose(_ adInfo: [AnyHashable : Any]) {
|
||||
self.delegate?.fa_nativeAdDidDismiss(nativeAd: self)
|
||||
self.delegate?.fa_nativeAdDidDismiss(ad: self)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -179,7 +179,7 @@ extension FAOpenAdManager: FAOpenAdDelegate {
|
||||
|
||||
func fa_openAdDidStartLoad(ad: any FAOpenAd) {
|
||||
self.startLoadDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: "startLoad")
|
||||
self.uploadAdsHistory(ad: ad, type: .startLoad)
|
||||
}
|
||||
|
||||
func fa_openAd(ad: FAOpenAd, didLoadFail error: Error) {
|
||||
@ -188,14 +188,14 @@ extension FAOpenAdManager: FAOpenAdDelegate {
|
||||
isWaitingToShow = false
|
||||
appOpenAd = nil
|
||||
clearTimer()
|
||||
uploadAdsHistory(ad: ad, type: "load_failed", errorMsg: error.localizedDescription)
|
||||
uploadAdsHistory(ad: ad, type: .loadFailed, errorMsg: error.localizedDescription)
|
||||
delegate?.fa_openAdManager?(manager: self, didLoadFail: error)
|
||||
}
|
||||
|
||||
func fa_openAdDidLoadFinish(ad: FAOpenAd) {
|
||||
self.endLoadDate = Date()
|
||||
isLoadingAd = false
|
||||
self.uploadAdsHistory(ad: ad, type: "endLoad")
|
||||
self.uploadAdsHistory(ad: ad, type: .endLoad)
|
||||
delegate?.fa_openAdManagerDidLoadFinish?(manager: self)
|
||||
|
||||
// 如果之前处于等待展示状态,现在立即展示
|
||||
@ -210,13 +210,13 @@ extension FAOpenAdManager: FAOpenAdDelegate {
|
||||
isWaitingToShow = false
|
||||
appOpenAd = nil
|
||||
clearTimer()
|
||||
uploadAdsHistory(ad: ad, type: "show_failed", errorMsg: error.localizedDescription)
|
||||
uploadAdsHistory(ad: ad, type: .showFailed, errorMsg: error.localizedDescription)
|
||||
delegate?.fa_openAdManager?(manager: self, didDisplayFail: error)
|
||||
}
|
||||
|
||||
func fa_openAdDidShow(ad: any FAOpenAd, adInfo: [AnyHashable : Any]) {
|
||||
self.startShowDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: "start", viewSeconds: 0)
|
||||
self.uploadAdsHistory(ad: ad, type: .show, viewSeconds: 0)
|
||||
self.requestUploadAdsPrice(ad: ad, adInfo: adInfo)
|
||||
delegate?.fa_openAdManagerDidShow?(manager: self)
|
||||
}
|
||||
@ -224,11 +224,7 @@ extension FAOpenAdManager: FAOpenAdDelegate {
|
||||
func fa_openAdDidDismiss(ad: FAOpenAd) {
|
||||
isShowingAd = false
|
||||
appOpenAd = nil
|
||||
var viewSeconds: Int? = nil
|
||||
if let startShowDate = self.startShowDate {
|
||||
viewSeconds = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
self.uploadAdsHistory(ad: ad, type: "close", viewSeconds: viewSeconds)
|
||||
self.uploadAdsHistory(ad: ad, type: .close)
|
||||
|
||||
delegate?.fa_openAdManagerDidDismiss?(manager: self)
|
||||
// 关闭后自动预加载下一条,5秒后开始加载
|
||||
@ -239,11 +235,7 @@ extension FAOpenAdManager: FAOpenAdDelegate {
|
||||
}
|
||||
|
||||
func fa_openAdDidClick(ad: FAOpenAd) {
|
||||
var viewSeconds: Int? = nil
|
||||
if let startShowDate = self.startShowDate {
|
||||
viewSeconds = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
self.uploadAdsHistory(ad: ad, type: "click", viewSeconds: viewSeconds)
|
||||
self.uploadAdsHistory(ad: ad, type: .click)
|
||||
}
|
||||
}
|
||||
|
||||
@ -255,11 +247,7 @@ extension FAOpenAdManager {
|
||||
if !self.isShowingAd { return }
|
||||
guard let ad = self.appOpenAd else { return }
|
||||
|
||||
var viewSeconds: Int? = nil
|
||||
if let startShowDate = self.startShowDate {
|
||||
viewSeconds = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
self.uploadAdsHistory(ad: ad, type: "Interrupt", viewSeconds: viewSeconds)
|
||||
self.uploadAdsHistory(ad: ad, type: .interrupt)
|
||||
}
|
||||
|
||||
@objc private func didBecomeActiveNotification() {
|
||||
@ -269,18 +257,25 @@ extension FAOpenAdManager {
|
||||
}
|
||||
}
|
||||
|
||||
func uploadAdsHistory(ad: any FAOpenAd, type: String, viewSeconds: Int? = nil, errorMsg: String? = nil) {
|
||||
func uploadAdsHistory(ad: any FAOpenAd, type: FAAdManager.StatType, viewSeconds: Int? = nil, errorMsg: String? = nil) {
|
||||
var loadTime: Int?
|
||||
if let startDate = self.startLoadDate, let endDate = self.endLoadDate {
|
||||
loadTime = Int(endDate.timeIntervalSince(startDate))
|
||||
}
|
||||
|
||||
var showTime: Int? = viewSeconds
|
||||
if showTime == nil && (type == .click || type == .interrupt || type == .close) {
|
||||
if let startShowDate = self.startShowDate {
|
||||
showTime = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
}
|
||||
|
||||
let model = FAAdStatModel()
|
||||
model.scene = .open
|
||||
if let loadTime = loadTime {
|
||||
model.loading_time = max(0, loadTime)
|
||||
}
|
||||
model.view_seconds = viewSeconds
|
||||
model.view_seconds = showTime
|
||||
model.ad_type = ad.adType.rawValue
|
||||
model.ads_id = ad.adUnitID
|
||||
model.ad_platform_key = ad.adPlatform
|
||||
|
||||
@ -144,33 +144,33 @@ extension FARewardedAdManager: FARewardedAdDelegate {
|
||||
self.rewardedAd = nil
|
||||
self.endLoadDate = Date()
|
||||
self.isLoadingAd = false
|
||||
self.uploadAdsHistory(ad: ad, type: "load_failed", errorMsg: error.localizedDescription)
|
||||
self.uploadAdsHistory(ad: ad, type: .loadFailed, errorMsg: error.localizedDescription)
|
||||
self.delegate?.fa_rewardedAdManager?(adManager: self, didLoadFail: error)
|
||||
}
|
||||
|
||||
func fa_rewardedAd(ad: any FARewardedAd, didDisplayFail error: any Error) {
|
||||
self.isPlaying = false
|
||||
self.rewardedAd = nil
|
||||
self.uploadAdsHistory(ad: ad, type: "show_failed", errorMsg: error.localizedDescription)
|
||||
self.uploadAdsHistory(ad: ad, type: .showFailed, errorMsg: error.localizedDescription)
|
||||
self.delegate?.fa_rewardedAdManager?(adManager: self, didDisplayFail: error)
|
||||
}
|
||||
|
||||
func fa_rewardedAdDidStartLoad(ad: any FARewardedAd) {
|
||||
self.startLoadDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: "startLoad")
|
||||
self.uploadAdsHistory(ad: ad, type: .startLoad)
|
||||
}
|
||||
|
||||
func fa_rewardedAdDidLoadFinish(ad: any FARewardedAd) {
|
||||
self.isLoadingAd = false
|
||||
self.endLoadDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: "endLoad")
|
||||
self.uploadAdsHistory(ad: ad, type: .endLoad)
|
||||
self.delegate?.fa_rewardedAdManagerDidLoadFinish?(adManager: self)
|
||||
}
|
||||
|
||||
func fa_rewardedAdDidShow(ad: any FARewardedAd, adInfo: [AnyHashable : Any]) {
|
||||
self.isPlaying = true
|
||||
self.startShowDate = Date()
|
||||
self.uploadAdsHistory(ad: ad, type: "start", viewSeconds: 0)
|
||||
self.uploadAdsHistory(ad: ad, type: .show, viewSeconds: 0)
|
||||
self.requestUploadAdsPrice(ad: ad, adInfo: adInfo)
|
||||
self.delegate?.fa_rewardedAdManagerDidShow?(adManager: self)
|
||||
}
|
||||
@ -178,22 +178,14 @@ extension FARewardedAdManager: FARewardedAdDelegate {
|
||||
func fa_rewardedAdDidDismiss(ad: any FARewardedAd) {
|
||||
self.isPlaying = false
|
||||
self.rewardedAd = nil
|
||||
var viewSeconds: Int? = nil
|
||||
if let startShowDate = self.startShowDate {
|
||||
viewSeconds = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
self.uploadAdsHistory(ad: ad, type: "close", viewSeconds: viewSeconds)
|
||||
self.uploadAdsHistory(ad: ad, type: .close)
|
||||
self.delegate?.fa_rewardedAdManagerDidDismiss?(adManager: self, platform: ad.adPlatform.rawValue, adUnitID: ad.adUnitID)
|
||||
//加载新的广告
|
||||
self.load()
|
||||
}
|
||||
|
||||
func fa_rewardedAdDidClick(ad: any FARewardedAd) {
|
||||
var viewSeconds: Int? = nil
|
||||
if let startShowDate = self.startShowDate {
|
||||
viewSeconds = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
self.uploadAdsHistory(ad: ad, type: "click", viewSeconds: viewSeconds)
|
||||
self.uploadAdsHistory(ad: ad, type: .click)
|
||||
self.delegate?.fa_rewardedAdManagerDidClick?(adManager: self)
|
||||
}
|
||||
}
|
||||
@ -202,11 +194,7 @@ extension FARewardedAdManager {
|
||||
@objc private func didEnterBackgroundNotification() {
|
||||
guard let ad = self.rewardedAd, self.isPlaying else { return }
|
||||
|
||||
var viewSeconds: Int? = nil
|
||||
if let startShowDate = self.startShowDate {
|
||||
viewSeconds = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
self.uploadAdsHistory(ad: ad, type: "Interrupt", viewSeconds: viewSeconds)
|
||||
self.uploadAdsHistory(ad: ad, type: .interrupt)
|
||||
}
|
||||
}
|
||||
|
||||
@ -220,18 +208,25 @@ extension FARewardedAdManager {
|
||||
}
|
||||
}
|
||||
|
||||
func uploadAdsHistory(ad: any FARewardedAd, type: String, viewSeconds: Int? = nil, errorMsg: String? = nil) {
|
||||
func uploadAdsHistory(ad: any FARewardedAd, type: FAAdManager.StatType, viewSeconds: Int? = nil, errorMsg: String? = nil) {
|
||||
var loadTime: Int?
|
||||
if let startDate = self.startLoadDate, let endDate = self.endLoadDate {
|
||||
loadTime = Int(endDate.timeIntervalSince(startDate))
|
||||
}
|
||||
|
||||
var showTime: Int? = viewSeconds
|
||||
if showTime == nil && (type == .click || type == .interrupt || type == .close) {
|
||||
if let startShowDate = self.startShowDate {
|
||||
showTime = Int(Date().timeIntervalSince(startShowDate))
|
||||
}
|
||||
}
|
||||
|
||||
let model = FAAdStatModel()
|
||||
model.short_play_id = self.shortPlayId
|
||||
model.short_play_video_id = self.shortPlayVideoId
|
||||
model.scene = self.businessScene
|
||||
model.loading_time = loadTime
|
||||
model.view_seconds = viewSeconds
|
||||
model.view_seconds = showTime
|
||||
model.ad_type = ad.adType.rawValue
|
||||
model.ads_id = ad.adUnitID
|
||||
model.ad_platform_key = ad.adPlatform
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user