广告bug修复,1.0.8提审

This commit is contained in:
湖北秦九 2026-02-28 09:35:05 +08:00
parent e0160146e3
commit bddd0142a6
13 changed files with 87 additions and 31 deletions

View File

@ -2881,7 +2881,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.7; MARKETING_VERSION = 1.0.8;
PRODUCT_BUNDLE_IDENTIFIER = com.hn.qinjiu.fableon; PRODUCT_BUNDLE_IDENTIFIER = com.hn.qinjiu.fableon;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@ -2923,7 +2923,7 @@
"$(inherited)", "$(inherited)",
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.7; MARKETING_VERSION = 1.0.8;
PRODUCT_BUNDLE_IDENTIFIER = com.hn.qinjiu.fableon; PRODUCT_BUNDLE_IDENTIFIER = com.hn.qinjiu.fableon;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";

View File

@ -67,10 +67,6 @@ extension UIViewController {
@objc func handleNavigationBack() { @objc func handleNavigationBack() {
self.fa_toLastViewController(animated: true) self.fa_toLastViewController(animated: true)
if FARewardedAdManager.manager.isAdAvailable {
FARewardedAdManager.manager.businessScene = .detailBack
FARewardedAdManager.manager.show()
}
} }
func fa_toLastViewController(animated: Bool) { func fa_toLastViewController(animated: Bool) {

View File

@ -133,6 +133,11 @@ class FACoinPackViewController: FAViewController {
self.fa_setNavigationStyle() self.fa_setNavigationStyle()
} }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
FAOpenAdManager.manager.vcAllowedShowAd = false
}
private func updateLayout() { private func updateLayout() {
stackView.fa_removeAllArrangedSubview() stackView.fa_removeAllArrangedSubview()

View File

@ -25,7 +25,8 @@ class FAPlayerDetailControlView: JXPlayerListControlView {
override var model: Any? { override var model: Any? {
didSet { didSet {
let model = self.model as? FAVideoInfoModel let model = self.model as? FAVideoInfoModel
self.bannerAdManager.shortPlayId = model?.short_play_id
self.bannerAdManager.shortPlayVideoId = model?.short_play_video_id
updateEp() updateEp()
} }
} }
@ -56,8 +57,12 @@ class FAPlayerDetailControlView: JXPlayerListControlView {
didSet { didSet {
playButton.setNeedsUpdateConfiguration() playButton.setNeedsUpdateConfiguration()
if isCurrent { if isCurrent {
self.bannerAdManager.loadAd() let model = self.model as? FAVideoInfoModel
if model?.is_lock == false {
self.bannerAdManager.loadAd()
}
} else { } else {
self.bannerAdManager.uploadCloseAdsHistory()
self.bannerAdManager.cleanAd() self.bannerAdManager.cleanAd()
} }
self.updateBannerAdLayout() self.updateBannerAdLayout()
@ -167,6 +172,7 @@ class FAPlayerDetailControlView: JXPlayerListControlView {
}() }()
deinit { deinit {
self.bannerAdManager.uploadCloseAdsHistory()
NotificationCenter.default.removeObserver(self) NotificationCenter.default.removeObserver(self)
} }

View File

@ -83,8 +83,6 @@ class FAPlayerDetailViewController: JXPlayerListViewController {
requestDetailList() requestDetailList()
self.fa_viewModel.loadNativeAd()
fa_setupLayout() fa_setupLayout()
self.fa_viewModel.requestRecommandData() self.fa_viewModel.requestRecommandData()
@ -168,6 +166,15 @@ class FAPlayerDetailViewController: JXPlayerListViewController {
// self.handleNavigationBack() // self.handleNavigationBack()
} }
override func handleNavigationBack() {
super.handleNavigationBack()
if FARewardedAdManager.manager.isAdAvailable {
FARewardedAdManager.manager.businessScene = .detailBack
FARewardedAdManager.manager.show()
}
}
} }
extension FAPlayerDetailViewController { extension FAPlayerDetailViewController {
@ -224,6 +231,8 @@ extension FAPlayerDetailViewController: JXPlayerListViewControllerDelegate, JXPl
FARewardedAdManager.manager.shortPlayId = model?.short_play_id FARewardedAdManager.manager.shortPlayId = model?.short_play_id
FARewardedAdManager.manager.shortPlayVideoId = model?.short_play_video_id FARewardedAdManager.manager.shortPlayVideoId = model?.short_play_video_id
} }
self.fa_viewModel.nativeAdManager.shortPlayId = model?.short_play_id
self.fa_viewModel.nativeAdManager.shortPlayVideoId = model?.short_play_video_id
} }
func jx_shouldAutoScrollNextEpisode(_ viewController: JXPlayerListViewController) -> Bool { func jx_shouldAutoScrollNextEpisode(_ viewController: JXPlayerListViewController) -> Bool {
@ -242,8 +251,7 @@ extension FAPlayerDetailViewController {
private func requestDetailList() { private func requestDetailList() {
self.fa_viewModel.requestDetailData { [weak self] code in self.fa_viewModel.requestDetailData { [weak self] code in
guard let self = self else { return } guard let self = self else { return }
self.fa_viewModel.loadNativeAd()
} }
} }
} }

View File

@ -61,6 +61,9 @@ class FAShortDetailViewModel: JXPlayerListViewModel, ObservableObject {
return manager return manager
}() }()
deinit {
self.nativeAdManager.uploadCloseAdsHistory()
}
func requestDetailData(indexPath: IndexPath? = nil, completer: ((_ code: Int) -> Void)?) { func requestDetailData(indexPath: IndexPath? = nil, completer: ((_ code: Int) -> Void)?) {
isShowRecommand = false isShowRecommand = false
@ -290,6 +293,8 @@ extension FAShortDetailViewModel {
///广 ///广
func loadNativeAd() { func loadNativeAd() {
if self.nativeAdManager.hasShow || self.nativeAdManager.isAdAvailable { return }
self.nativeAdManager.load() self.nativeAdManager.load()
} }

View File

@ -113,6 +113,11 @@ class FAStoreViewController: FAViewController {
fa_setNavigationStyle() fa_setNavigationStyle()
} }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
FAOpenAdManager.manager.vcAllowedShowAd = false
}
private func buyFinish() { private func buyFinish() {
self.requestPayData() self.requestPayData()
} }

View File

@ -79,6 +79,9 @@ class FABannerAdManager: NSObject {
} }
} }
var shortPlayId: String?
var shortPlayVideoId: String?
private var startShowDate: Date? private var startShowDate: Date?
private var startLoadDate: Date? private var startLoadDate: Date?
private var endLoadDate: Date? private var endLoadDate: Date?
@ -99,7 +102,7 @@ class FABannerAdManager: NSObject {
override init() { override init() {
super.init() super.init()
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil) // NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil)
} }
func loadAd() { func loadAd() {
@ -124,6 +127,7 @@ class FABannerAdManager: NSObject {
self.isShowingAd = false self.isShowingAd = false
self.startLoadDate = nil self.startLoadDate = nil
self.endLoadDate = nil self.endLoadDate = nil
self.startShowDate = nil
} }
private func updateLayout() { private func updateLayout() {
@ -133,6 +137,13 @@ class FABannerAdManager: NSObject {
adView.autoresizingMask = [.flexibleWidth, .flexibleHeight] adView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
} }
} }
///广
func uploadCloseAdsHistory() {
guard let ad = self.bannerAd else { return }
guard self.isShowingAd else { return }
self.uploadAdsHistory(ad: ad, type: .close)
}
} }
@ -170,7 +181,7 @@ extension FABannerAdManager: FABannerAdDelegate {
} }
func fa_bannerAdDidDismiss(ad: any FABannerAd) { func fa_bannerAdDidDismiss(ad: any FABannerAd) {
self.uploadAdsHistory(ad: ad, type: .close) self.uploadCloseAdsHistory()
self.delegate?.fa_bannerAdManagerDidDismiss?(manager: self) self.delegate?.fa_bannerAdManagerDidDismiss?(manager: self)
} }
@ -211,6 +222,8 @@ extension FABannerAdManager {
model.loading_time = max(0, loadTime) model.loading_time = max(0, loadTime)
} }
model.view_seconds = showTime model.view_seconds = showTime
model.short_play_id = self.shortPlayId
model.short_play_video_id = self.shortPlayVideoId
model.ad_type = ad.adType.rawValue model.ad_type = ad.adType.rawValue
model.ads_id = ad.adUnitID model.ads_id = ad.adUnitID
model.ad_platform_key = ad.adPlatform model.ad_platform_key = ad.adPlatform
@ -226,6 +239,8 @@ extension FABannerAdManager {
let money = (NSNumber(string: ecpm)?.doubleValue ?? 0) / 1000 let money = (NSNumber(string: ecpm)?.doubleValue ?? 0) / 1000
let model = FAUploadAdsPriceModel() let model = FAUploadAdsPriceModel()
model.short_play_id = self.shortPlayId
model.short_play_video_id = self.shortPlayVideoId
model.short_play_launch_id = ad.adUnitID model.short_play_launch_id = ad.adUnitID
model.type = ad.adType.rawValue model.type = ad.adType.rawValue
model.agent_name = ad.adPlatform.rawValue model.agent_name = ad.adPlatform.rawValue

View File

@ -21,9 +21,9 @@ class FAAdManager: NSObject {
case me = "me" case me = "me"
case reward = "reward" case reward = "reward"
case splash = "splash" case splash = "splash"
case banner = "banner" case banner = "detail_landscape"
case open = "open" case open = "open"
case native = "native" case native = "detail_stop"
} }
enum StatType: String, SmartCaseDefaultable { enum StatType: String, SmartCaseDefaultable {

View File

@ -84,6 +84,9 @@ class FANativeAdManager: NSObject {
} }
} }
var shortPlayId: String?
var shortPlayVideoId: String?
///广 ///广
private(set) var isLoadingAd = false private(set) var isLoadingAd = false
///广 ///广
@ -105,12 +108,12 @@ class FANativeAdManager: NSObject {
} }
deinit { deinit {
NotificationCenter.default.removeObserver(self) // NotificationCenter.default.removeObserver(self)
} }
override init() { override init() {
super.init() super.init()
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil) // NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil)
} }
@ -122,7 +125,11 @@ class FANativeAdManager: NSObject {
} }
guard !self.isLoadingAd else { return } guard !self.isLoadingAd else { return }
self.startLoadDate = nil
self.endLoadDate = nil
self.startShowDate = nil
self.isLoadingAd = true self.isLoadingAd = true
self.nativeAd = FATradPlusNativeAd() self.nativeAd = FATradPlusNativeAd()
self.nativeAd?.adSize = self.contentSize self.nativeAd?.adSize = self.contentSize
self.nativeAd?.adView = contentView self.nativeAd?.adView = contentView
@ -143,6 +150,13 @@ class FANativeAdManager: NSObject {
self.nativeAd?.show() self.nativeAd?.show()
} }
///广
func uploadCloseAdsHistory() {
guard let ad = self.nativeAd else { return }
guard self.isShowingAd else { return }
self.uploadAdsHistory(ad: ad, type: .close)
}
} }
extension FANativeAdManager: FANativeAdDelegate { extension FANativeAdManager: FANativeAdDelegate {
@ -179,7 +193,7 @@ extension FANativeAdManager: FANativeAdDelegate {
} }
func fa_nativeAdDidDismiss(ad: any FANativeAd) { func fa_nativeAdDidDismiss(ad: any FANativeAd) {
self.uploadAdsHistory(ad: ad, type: .close) self.uploadCloseAdsHistory()
self.delegate?.fa_nativeAdManagerDidDismiss?(manager: self) self.delegate?.fa_nativeAdManagerDidDismiss?(manager: self)
} }
@ -218,6 +232,8 @@ extension FANativeAdManager {
if let loadTime = loadTime { if let loadTime = loadTime {
model.loading_time = max(0, loadTime) model.loading_time = max(0, loadTime)
} }
model.short_play_id = self.shortPlayId
model.short_play_video_id = self.shortPlayVideoId
model.view_seconds = showTime model.view_seconds = showTime
model.ad_type = ad.adType.rawValue model.ad_type = ad.adType.rawValue
model.ads_id = ad.adUnitID model.ads_id = ad.adUnitID
@ -234,6 +250,8 @@ extension FANativeAdManager {
let money = (NSNumber(string: ecpm)?.doubleValue ?? 0) / 1000 let money = (NSNumber(string: ecpm)?.doubleValue ?? 0) / 1000
let model = FAUploadAdsPriceModel() let model = FAUploadAdsPriceModel()
model.short_play_id = self.shortPlayId
model.short_play_video_id = self.shortPlayVideoId
model.short_play_launch_id = ad.adUnitID model.short_play_launch_id = ad.adUnitID
model.type = ad.adType.rawValue model.type = ad.adType.rawValue
model.agent_name = ad.adPlatform.rawValue model.agent_name = ad.adPlatform.rawValue

View File

@ -52,6 +52,8 @@ class FATradPlusNativeAd: NSObject, FANativeAd {
self.nativeAd?.setTemplateRenderSize(adSize) self.nativeAd?.setTemplateRenderSize(adSize)
self.nativeAd?.delegate = self self.nativeAd?.delegate = self
self.nativeAd?.loadAd() self.nativeAd?.loadAd()
self.delegate?.fa_nativeAdDidStartLoad(ad: self)
#endif #endif
} }
@ -78,7 +80,7 @@ class FATradPlusNativeAd: NSObject, FANativeAd {
extension FATradPlusNativeAd: TradPlusADNativeDelegate { extension FATradPlusNativeAd: TradPlusADNativeDelegate {
func tpNativeAdStartLoad(_ adInfo: [AnyHashable : Any]) { func tpNativeAdStartLoad(_ adInfo: [AnyHashable : Any]) {
self.delegate?.fa_nativeAdDidStartLoad(ad: self) // self.delegate?.fa_nativeAdDidStartLoad(ad: self)
} }
func tpNativeAdLoaded(_ adInfo: [AnyHashable : Any]) { func tpNativeAdLoaded(_ adInfo: [AnyHashable : Any]) {

View File

@ -97,8 +97,12 @@ class FAOpenAdManager: NSObject {
if isLoadingAd || isAdAvailable { if isLoadingAd || isAdAvailable {
return return
} }
startLoadDate = nil
endLoadDate = nil
startShowDate = nil
isLoadingAd = true isLoadingAd = true
appOpenAd = FATradPlusOpenAd() appOpenAd = FATradPlusOpenAd()
appOpenAd?.loadAd() appOpenAd?.loadAd()
} }
@ -135,8 +139,7 @@ class FAOpenAdManager: NSObject {
showAd() showAd()
return return
} }
self.startLoadDate = nil
self.endLoadDate = nil
// 2. // 2.
isWaitingToShow = true isWaitingToShow = true

View File

@ -114,10 +114,11 @@ class FARewardedAdManager: NSObject {
if self.isLoadingAd { return } if self.isLoadingAd { return }
self.startLoadDate = nil self.startLoadDate = nil
self.endLoadDate = nil self.endLoadDate = nil
self.startShowDate = nil
self.isLoadingAd = true self.isLoadingAd = true
self.businessScene = .main // self.businessScene = .main
self.rewardedAd = FATradPlusInterstitialAd() self.rewardedAd = FATradPlusInterstitialAd()
self.rewardedAd?.loadAd() self.rewardedAd?.loadAd()
@ -200,14 +201,6 @@ extension FARewardedAdManager {
extension FARewardedAdManager { extension FARewardedAdManager {
private func requestAdOverview() {
FAAPI.requestRewardedAdOverview { [weak self] list in
guard let self = self else { return }
}
}
func uploadAdsHistory(ad: any FARewardedAd, type: FAAdManager.StatType, viewSeconds: Int? = nil, errorMsg: String? = nil) { func uploadAdsHistory(ad: any FARewardedAd, type: FAAdManager.StatType, viewSeconds: Int? = nil, errorMsg: String? = nil) {
var loadTime: Int? var loadTime: Int?
if let startDate = self.startLoadDate, let endDate = self.endLoadDate { if let startDate = self.startLoadDate, let endDate = self.endLoadDate {