广告事件统计

This commit is contained in:
湖北秦九 2026-02-12 11:29:04 +08:00
parent 5d8529dd95
commit e0160146e3
8 changed files with 266 additions and 78 deletions

View File

@ -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)
}
}

View File

@ -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]) {

View File

@ -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() {

View File

@ -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?

View File

@ -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)
}
}

View File

@ -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)
}
}

View File

@ -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

View File

@ -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