From cc918f56d99e5b9bd472270d0590e76222f0d846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B9=96=E5=8C=97=E7=A7=A6=E4=B9=9D?= Date: Tue, 10 Feb 2026 18:05:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BF=80=E5=8A=B1=E5=B9=BF=E5=91=8A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Fableon.xcodeproj/project.pbxproj | 30 ++ Fableon/App/SceneDelegate.swift | 4 +- .../Base/Controller/FAViewController.swift | 4 + Fableon/Object/Base/Request/FAAPI/FAAPI.swift | 8 +- .../Object/Base/Request/FAAPI/FAStatAPI.swift | 22 + .../Class/Player/V/FAPlayerDetailCell.swift | 3 +- .../VC/FAPlayerDetailViewController.swift | 9 + .../Player/VM/FAShortDetailViewModel.swift | 6 +- .../AdManager/Banner/FABannerAdManager.swift | 12 +- .../Object/Libs/AdManager/FAAdManager.swift | 19 +- .../Object/Libs/AdManager/FAAdStatModel.swift | 30 ++ .../AdManager/FAUploadAdsPriceModel.swift | 25 ++ .../AdManager/Native/FANativeAdManager.swift | 19 +- .../Libs/AdManager/Open/FAOpenAdManager.swift | 15 + .../Rewarded/FARewardedAdManager.swift | 144 ++++++- .../Rewarded/FATradPlusInterstitialAd.swift | 6 +- .../Rewarded/FATradPlusRewardedAd.swift | 6 +- Fableon/Object/Libs/FALogin/FAUserInfo.swift | 11 + Fableon/Source/Info.plist | 400 +++++++++--------- Podfile | 56 +-- Podfile.lock | 185 +++++++- 21 files changed, 746 insertions(+), 268 deletions(-) create mode 100644 Fableon/Object/Libs/AdManager/FAAdStatModel.swift create mode 100644 Fableon/Object/Libs/AdManager/FAUploadAdsPriceModel.swift diff --git a/Fableon.xcodeproj/project.pbxproj b/Fableon.xcodeproj/project.pbxproj index 3ced65b..e1f2e2a 100644 --- a/Fableon.xcodeproj/project.pbxproj +++ b/Fableon.xcodeproj/project.pbxproj @@ -55,6 +55,8 @@ 035589502F2AEF3700FAEF4A /* FANativeAdManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0355894F2F2AEF3700FAEF4A /* FANativeAdManager.swift */; }; 035589542F2AF1CB00FAEF4A /* FATradPlusNativeAd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589532F2AF1CB00FAEF4A /* FATradPlusNativeAd.swift */; }; 035589582F2B353200FAEF4A /* FATradPlusNativeAdView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589572F2B353200FAEF4A /* FATradPlusNativeAdView.swift */; }; + 039BE2A92F3B106D00B9D705 /* FAAdStatModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039BE2A82F3B106D00B9D705 /* FAAdStatModel.swift */; }; + 039BE2AB2F3B329E00B9D705 /* FAUploadAdsPriceModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039BE2AA2F3B329E00B9D705 /* FAUploadAdsPriceModel.swift */; }; 039CE6042EAA2621007B5EED /* AppDelegate+FAAdjust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039CE6032EAA2612007B5EED /* AppDelegate+FAAdjust.swift */; }; 039CE6092EAA2F71007B5EED /* FAAdjustStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039CE6082EAA2F62007B5EED /* FAAdjustStateManager.swift */; }; 039CE60B2EAA31CB007B5EED /* FAStatAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039CE60A2EAA31CB007B5EED /* FAStatAPI.swift */; }; @@ -444,6 +446,8 @@ 0355894F2F2AEF3700FAEF4A /* FANativeAdManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FANativeAdManager.swift; sourceTree = ""; }; 035589532F2AF1CB00FAEF4A /* FATradPlusNativeAd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FATradPlusNativeAd.swift; sourceTree = ""; }; 035589572F2B353200FAEF4A /* FATradPlusNativeAdView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FATradPlusNativeAdView.swift; sourceTree = ""; }; + 039BE2A82F3B106D00B9D705 /* FAAdStatModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAAdStatModel.swift; sourceTree = ""; }; + 039BE2AA2F3B329E00B9D705 /* FAUploadAdsPriceModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAUploadAdsPriceModel.swift; sourceTree = ""; }; 039CE6032EAA2612007B5EED /* AppDelegate+FAAdjust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+FAAdjust.swift"; sourceTree = ""; }; 039CE6082EAA2F62007B5EED /* FAAdjustStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAAdjustStateManager.swift; sourceTree = ""; }; 039CE60A2EAA31CB007B5EED /* FAStatAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAStatAPI.swift; sourceTree = ""; }; @@ -813,6 +817,8 @@ 035589382F2319EB00FAEF4A /* Open */, 035589372F2319DD00FAEF4A /* Rewarded */, 035589352F2305D800FAEF4A /* FAAdManager.swift */, + 039BE2A82F3B106D00B9D705 /* FAAdStatModel.swift */, + 039BE2AA2F3B329E00B9D705 /* FAUploadAdsPriceModel.swift */, ); path = AdManager; sourceTree = ""; @@ -2041,6 +2047,7 @@ F3T938414J234X46539JR019 /* Resources */, 4809W21R638Z15866LWB2041 /* [CP] Embed Pods Frameworks */, 03E9A7632EC19101000D1067 /* Embed Foundation Extensions */, + 0E1F49D1E8B4CB4FCFBE75F4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -2160,6 +2167,27 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 0E1F49D1E8B4CB4FCFBE75F4 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + inputPaths = ( + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 4809W21R638Z15866LWB2041 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -2304,6 +2332,7 @@ F39S0H806843N21RM0O95488 /* VARResultController.swift in Sources */, F3D03219Y8NV50N2S66014LX /* GPOOllectionFableon.swift in Sources */, 03E9A74E2EB5E0F7000D1067 /* FALanguageModel.swift in Sources */, + 039BE2A92F3B106D00B9D705 /* FAAdStatModel.swift in Sources */, F399V72654D56W408WQO18D5 /* OOSelectorSection.swift in Sources */, F31RUU6I99967458M4X40V5C /* HNFDramaController.swift in Sources */, F3MIE47471I04686Y131BPU5 /* TGleeScreenView.swift in Sources */, @@ -2329,6 +2358,7 @@ 031FDEC62EB1E4E600F4CAC7 /* FACoinPackTitleView.swift in Sources */, F3K238643L913I6RK4G7S006 /* CSceneRegister.swift in Sources */, F3ZT3I4VAGB5405FWL36UW12 /* ZFGEtworkCell.swift in Sources */, + 039BE2AB2F3B329E00B9D705 /* FAUploadAdsPriceModel.swift in Sources */, F35O71332554S53191121042 /* UOModalCell.swift in Sources */, F3L30772U87770116598U282 /* NLaunchDelegate.swift in Sources */, 039CE62C2EAB5B07007B5EED /* FAStoreCoinsBigCell.swift in Sources */, diff --git a/Fableon/App/SceneDelegate.swift b/Fableon/App/SceneDelegate.swift index 76047b1..9aa392b 100644 --- a/Fableon/App/SceneDelegate.swift +++ b/Fableon/App/SceneDelegate.swift @@ -123,7 +123,9 @@ extension SceneDelegate { FAAdjustStateManager.manager.isOpenApp = true window?.rootViewController = FATabBarController() -// window?.addSubview(FAOpenAdManager.manager.openAdVC.view) +#if canImport(TradPlusAds) + window?.addSubview(FAOpenAdManager.manager.openAdVC.view) +#endif } } diff --git a/Fableon/Object/Base/Controller/FAViewController.swift b/Fableon/Object/Base/Controller/FAViewController.swift index a73eea0..466b32d 100644 --- a/Fableon/Object/Base/Controller/FAViewController.swift +++ b/Fableon/Object/Base/Controller/FAViewController.swift @@ -67,6 +67,10 @@ extension UIViewController { @objc func handleNavigationBack() { self.fa_toLastViewController(animated: true) + if FARewardedAdManager.manager.isAdAvailable { + FARewardedAdManager.manager.businessScene = .detailBack + FARewardedAdManager.manager.show() + } } func fa_toLastViewController(animated: Bool) { diff --git a/Fableon/Object/Base/Request/FAAPI/FAAPI.swift b/Fableon/Object/Base/Request/FAAPI/FAAPI.swift index 6e8104a..b46de02 100644 --- a/Fableon/Object/Base/Request/FAAPI/FAAPI.swift +++ b/Fableon/Object/Base/Request/FAAPI/FAAPI.swift @@ -279,14 +279,14 @@ struct FAAPI { } ///广告解锁 - static func requestAdUnlockVideo(shortPlayId: String, videoId: String, completer: ((_ model: FAVideoUnlockResult?) -> Void)?) { + static func requestAdUnlockVideo(shortPlayId: String, videoId: String, platform: String, adsId: String, completer: ((_ model: FAVideoUnlockResult?) -> Void)?) { let parameters = [ "short_play_id" : shortPlayId, "video_id" : videoId, - "ads_id" : "", - "ads_platform_key" : "", - "trans_id" : "", + "ads_id" : adsId, + "ads_platform_key" : platform, + "trans_id" : adsId, "watch_num" : "1" ] diff --git a/Fableon/Object/Base/Request/FAAPI/FAStatAPI.swift b/Fableon/Object/Base/Request/FAAPI/FAStatAPI.swift index 977da73..3236f23 100644 --- a/Fableon/Object/Base/Request/FAAPI/FAStatAPI.swift +++ b/Fableon/Object/Base/Request/FAAPI/FAStatAPI.swift @@ -164,6 +164,28 @@ class FAStatAPI: NSObject { } } + + ///统计广告历史 + static func requestUploadAdsHistory(model: FAAdStatModel) { + FANetworkManager.manager.request(FABaseURL + "/ad/history", + method: .post, + parameters: model.toDictionary(), + isLoding: false, + isToast: false) { (response: FANetworkManager.Response) in + + } + } + + ///上传广告价值 + static func requestUploadAdsPrice(model: FAUploadAdsPriceModel) { + FANetworkManager.manager.request(FABaseURL + "/ad/watch", + method: .post, + parameters: model.toDictionary(), + isLoding: false, + isToast: false) { (response: FANetworkManager.Response) in + + } + } } extension FAStatAPI { diff --git a/Fableon/Object/Class/Player/V/FAPlayerDetailCell.swift b/Fableon/Object/Class/Player/V/FAPlayerDetailCell.swift index 695f529..9cf2ef5 100644 --- a/Fableon/Object/Class/Player/V/FAPlayerDetailCell.swift +++ b/Fableon/Object/Class/Player/V/FAPlayerDetailCell.swift @@ -55,7 +55,8 @@ class FAPlayerDetailCell: JXPlayerListCell { override init(frame: CGRect) { super.init(frame: frame) - + self.player.player.pausedToKeepAppearState = false + self.player.controlLayerNeedDisappear() fa_setupLayout() } diff --git a/Fableon/Object/Class/Player/VC/FAPlayerDetailViewController.swift b/Fableon/Object/Class/Player/VC/FAPlayerDetailViewController.swift index 11ae3b0..bbfa375 100644 --- a/Fableon/Object/Class/Player/VC/FAPlayerDetailViewController.swift +++ b/Fableon/Object/Class/Player/VC/FAPlayerDetailViewController.swift @@ -97,6 +97,10 @@ class FAPlayerDetailViewController: JXPlayerListViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + let currentVideoInfoModel = (self.fa_viewModel.currentCell as? FAPlayerDetailCell)?.model as? FAVideoInfoModel + FARewardedAdManager.manager.businessScene = .detail + FARewardedAdManager.manager.shortPlayId = currentVideoInfoModel?.short_play_id + FARewardedAdManager.manager.shortPlayVideoId = currentVideoInfoModel?.short_play_video_id FAOpenAdManager.manager.vcAllowedShowAd = false } @@ -215,6 +219,11 @@ extension FAPlayerDetailViewController: JXPlayerListViewControllerDelegate, JXPl func jx_playerListViewController(_ viewController: JXPlayerListViewController, didChangeIndexPathForVisible indexPath: IndexPath) { let model = self.fa_viewModel.dataArr[indexPath.section].episodeList?[indexPath.row] self.epText = "Ep.\(model?.episode ?? "")" + + if !jx_isDidDisappear { + FARewardedAdManager.manager.shortPlayId = model?.short_play_id + FARewardedAdManager.manager.shortPlayVideoId = model?.short_play_video_id + } } func jx_shouldAutoScrollNextEpisode(_ viewController: JXPlayerListViewController) -> Bool { diff --git a/Fableon/Object/Class/Player/VM/FAShortDetailViewModel.swift b/Fableon/Object/Class/Player/VM/FAShortDetailViewModel.swift index 3b91aae..3c84612 100644 --- a/Fableon/Object/Class/Player/VM/FAShortDetailViewModel.swift +++ b/Fableon/Object/Class/Player/VM/FAShortDetailViewModel.swift @@ -283,6 +283,8 @@ extension FAShortDetailViewModel { if manager.isAdAvailable { manager.delegate = self manager.show() + } else { + manager.load() } } @@ -312,12 +314,12 @@ extension FAShortDetailViewModel { //MARK: FARewardedAdManagerDelegate extension FAShortDetailViewModel: FARewardedAdManagerDelegate { - func fa_rewardedAdManagerDidDismiss(adManager: FARewardedAdManager) { + func fa_rewardedAdManagerDidDismiss(adManager: FARewardedAdManager, platform: String, adUnitID: String) { guard let videoInfo = self.currentCell?.model as? FAVideoInfoModel else { return } guard let shortPlayId = videoInfo.short_play_id else { return } guard let videoId = videoInfo.short_play_video_id else { return } - FAAPI.requestAdUnlockVideo(shortPlayId: shortPlayId, videoId: videoId) { [weak self] model in + FAAPI.requestAdUnlockVideo(shortPlayId: shortPlayId, videoId: videoId, platform: platform, adsId: adUnitID) { [weak self] model in guard let self = self else { return } guard model?.status == .success else { return } diff --git a/Fableon/Object/Libs/AdManager/Banner/FABannerAdManager.swift b/Fableon/Object/Libs/AdManager/Banner/FABannerAdManager.swift index f7e038d..2f32f48 100644 --- a/Fableon/Object/Libs/AdManager/Banner/FABannerAdManager.swift +++ b/Fableon/Object/Libs/AdManager/Banner/FABannerAdManager.swift @@ -77,10 +77,20 @@ class FABannerAdManager: NSObject { } var isAdAvailable: Bool { - return bannerAd?.isReady ?? false + if FALogin.manager.userInfo?.user_level == .ad { + return bannerAd?.isReady ?? false + } else { + return false + } } 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 + } + let ad = FATradPlusBannerAd() ad.delegate = self diff --git a/Fableon/Object/Libs/AdManager/FAAdManager.swift b/Fableon/Object/Libs/AdManager/FAAdManager.swift index 608cba2..0e923a0 100644 --- a/Fableon/Object/Libs/AdManager/FAAdManager.swift +++ b/Fableon/Object/Libs/AdManager/FAAdManager.swift @@ -13,11 +13,23 @@ import TradPlusAds class FAAdManager: NSObject { + ///业务场景 + enum BusinessScene: String, SmartCaseDefaultable { + case detail = "detail" + case detailBack = "detail_back" + case main = "main" + case me = "me" + case reward = "reward" + case splash = "splash" + case banner = "banner" + } static func initSdk() { #if canImport(TradPlusAds) #if DEBUG TradPlus.setLogLevel(MSLogLevelAll) +#else + TradPlus.setLogLevel(MSLogLevelOff) #endif TradPlus.initSDK("8C768B1A89BA057E47D752181A7BDA21") { error in if let error = error { @@ -30,9 +42,14 @@ class FAAdManager: NSObject { } + + + } -enum FAAdType { + + +enum FAAdType: String { case rewarded case interstitial case banner diff --git a/Fableon/Object/Libs/AdManager/FAAdStatModel.swift b/Fableon/Object/Libs/AdManager/FAAdStatModel.swift new file mode 100644 index 0000000..2ebb2ed --- /dev/null +++ b/Fableon/Object/Libs/AdManager/FAAdStatModel.swift @@ -0,0 +1,30 @@ +// +// FAAdStatModel.swift +// Fableon +// +// Created by 湖北秦九 on 2026/2/10. +// + +import UIKit +import SmartCodable + +class FAAdStatModel: NSObject, SmartCodable { + + required override init() { } + + + + var type: String? //start click error click show_failed load_failed Interrupt(退到后台) close + var ads_id: String? + var view_seconds: Int? + var loading_time: Int? + var ad_platform_key: FAAdPlatform? + var scene: FAAdManager.BusinessScene? + var short_play_id: String? + var short_play_video_id: String? + var error_msg: String? + var ad_platform_name: FAAdPlatform? + var ag_platform_name: String? + var ad_type: String? + +} diff --git a/Fableon/Object/Libs/AdManager/FAUploadAdsPriceModel.swift b/Fableon/Object/Libs/AdManager/FAUploadAdsPriceModel.swift new file mode 100644 index 0000000..2771b38 --- /dev/null +++ b/Fableon/Object/Libs/AdManager/FAUploadAdsPriceModel.swift @@ -0,0 +1,25 @@ +// +// FAUploadAdsPriceModel.swift +// Fableon +// +// Created by 湖北秦九 on 2026/2/10. +// + +import UIKit +import SmartCodable + +class FAUploadAdsPriceModel: NSObject, SmartCodable { + + required override init() { } + + var short_play_id: String? + var short_play_video_id: String? + var short_play_launch_id: String? + var type: String? + var agent_name: String? + var alliance_name: String? + var money: String? + var scene: FAAdManager.BusinessScene? + + +} diff --git a/Fableon/Object/Libs/AdManager/Native/FANativeAdManager.swift b/Fableon/Object/Libs/AdManager/Native/FANativeAdManager.swift index 2f8c05b..3139a1c 100644 --- a/Fableon/Object/Libs/AdManager/Native/FANativeAdManager.swift +++ b/Fableon/Object/Libs/AdManager/Native/FANativeAdManager.swift @@ -74,7 +74,11 @@ class FANativeAdManager: NSObject { let contentSize: CGSize = .init(width: 300, height: 400) var isAdAvailable: Bool { - return nativeAd?.isReady ?? false + if FALogin.manager.userInfo?.user_level == .ad { + return nativeAd?.isReady ?? false + } else { + return false + } } ///广告是否在加载中 @@ -94,6 +98,11 @@ class FANativeAdManager: NSObject { func load() { + guard FALogin.manager.userInfo?.user_level == .ad else { + let error = NSError(domain: "非广告用户", code: -1) + self.delegate?.fa_nativeAdManager?(manager: self, didLoadFail: error) + return + } guard !self.isLoadingAd else { return } self.isLoadingAd = true @@ -105,7 +114,13 @@ class FANativeAdManager: NSObject { } func show() { - guard !hasShow else { return } + guard FALogin.manager.userInfo?.user_level == .ad else { + let error = NSError(domain: "非广告用户", code: -1) + self.delegate?.fa_nativeAdManager?(manager: self, didDisplayFail: error) + return + } + guard !hasShow, self.isAdAvailable else { return } + self.hasShow = true self.nativeAd?.show() } diff --git a/Fableon/Object/Libs/AdManager/Open/FAOpenAdManager.swift b/Fableon/Object/Libs/AdManager/Open/FAOpenAdManager.swift index b9db6b3..225d5aa 100644 --- a/Fableon/Object/Libs/AdManager/Open/FAOpenAdManager.swift +++ b/Fableon/Object/Libs/AdManager/Open/FAOpenAdManager.swift @@ -82,6 +82,11 @@ class FAOpenAdManager: NSObject { } func loadAd() { + guard FALogin.manager.userInfo?.user_level == .ad else { + let error = NSError(domain: "非广告用户", code: -1) + self.delegate?.fa_openAdManager?(manager: self, didOtherFail: error) + return + } if isLoadingAd || isAdAvailable { return } @@ -92,6 +97,11 @@ class FAOpenAdManager: NSObject { } func showAd() { + guard FALogin.manager.userInfo?.user_level == .ad else { + let error = NSError(domain: "非广告用户", code: -1) + self.delegate?.fa_openAdManager?(manager: self, didOtherFail: error) + return + } guard let ad = appOpenAd, isAdAvailable else { loadAd() return @@ -105,6 +115,11 @@ class FAOpenAdManager: NSObject { /// 外部调用的主要入口 func showAdIfAvailable() { + guard FALogin.manager.userInfo?.user_level == .ad else { + let error = NSError(domain: "非广告用户", code: -1) + self.delegate?.fa_openAdManager?(manager: self, didOtherFail: error) + return + } // 如果正在展示广告,不再重复触发 guard !isShowingAd else { return } diff --git a/Fableon/Object/Libs/AdManager/Rewarded/FARewardedAdManager.swift b/Fableon/Object/Libs/AdManager/Rewarded/FARewardedAdManager.swift index 59d84ff..e317fd9 100644 --- a/Fableon/Object/Libs/AdManager/Rewarded/FARewardedAdManager.swift +++ b/Fableon/Object/Libs/AdManager/Rewarded/FARewardedAdManager.swift @@ -20,7 +20,7 @@ import UIKit ///广告被展示 @objc optional func fa_rewardedAdManagerDidShow(adManager: FARewardedAdManager) ///广告被关闭 - @objc optional func fa_rewardedAdManagerDidDismiss(adManager: FARewardedAdManager) + @objc optional func fa_rewardedAdManagerDidDismiss(adManager: FARewardedAdManager, platform: String, adUnitID: String) ///广告被点击 @objc optional func fa_rewardedAdManagerDidClick(adManager: FARewardedAdManager) ///其它错误 @@ -34,12 +34,14 @@ protocol FARewardedAdDelegate: NSObjectProtocol { // func rewardedAd(ad: BRRewardedAd, userDidEarnReward adInfo: VPAdInfo) ///广告加载失败 func fa_rewardedAd(ad: FARewardedAd, didLoadFail error: Error) + ///开始加载 + func fa_rewardedAdDidStartLoad(ad: FARewardedAd) ///广告加载成功 func fa_rewardedAdDidLoadFinish(ad: FARewardedAd) ///广告展示失败 func fa_rewardedAd(ad: FARewardedAd, didDisplayFail error: Error) ///广告被展示 - func fa_rewardedAdDidShow(ad: FARewardedAd) + func fa_rewardedAdDidShow(ad: FARewardedAd, adInfo: [AnyHashable : Any]) ///广告被关闭 func fa_rewardedAdDidDismiss(ad: FARewardedAd) ///广告被点击 @@ -74,38 +76,59 @@ class FARewardedAdManager: NSObject { } var isAdAvailable: Bool { - return rewardedAd?.isReady ?? false + if FALogin.manager.userInfo?.user_level == .ad { + return rewardedAd?.isReady ?? false + } else { + return false + } } + ///广告是否在加载中 + private(set) var isLoadingAd = false + + private var isPlaying = false + + ///用于数据统计 + var businessScene: FAAdManager.BusinessScene = .main + var shortPlayId: String? + var shortPlayVideoId: String? + private var startShowDate: Date? = nil + private var startLoadDate: Date? + private var endLoadDate: Date? + override init() { super.init() + NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil) } func load() { + guard FALogin.manager.userInfo?.user_level == .ad else { + let error = NSError(domain: "非广告用户", code: -1) + self.delegate?.fa_rewardedAdManager?(adManager: self, didOtherFail: error) + return + } if self.isAdAvailable { return } + if self.isLoadingAd { return } -// if loadAdType != .rewarded { -// loadAdType = .rewarded -// } else { -// loadAdType = .interstitial -// } -// -// if loadAdType == .rewarded { -// self.rewardedAd = FATradPlusRewardedAd() -// } else { - self.rewardedAd = FATradPlusInterstitialAd() -// } + self.isLoadingAd = true + + self.businessScene = .main + + self.rewardedAd = FATradPlusInterstitialAd() self.rewardedAd?.loadAd() -// self.requestAdOverview() } func show() { + guard FALogin.manager.userInfo?.user_level == .ad else { + let error = NSError(domain: "非广告用户", code: -1) + self.delegate?.fa_rewardedAdManager?(adManager: self, didOtherFail: error) + return + } guard self.isAdAvailable else { return } - self.rewardedAd?.showAd() } @@ -117,34 +140,76 @@ extension FARewardedAdManager: FARewardedAdDelegate { func fa_rewardedAd(ad: any FARewardedAd, didLoadFail error: any Error) { self.rewardedAd = nil + self.endLoadDate = Date() + self.isLoadingAd = false + self.uploadAdsHistory(ad: ad, type: "load_failed", errorMsg: error.localizedDescription) self.delegate?.fa_rewardedAdManager?(adManager: self, didLoadFail: error) + self.endLoadDate = nil } 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.delegate?.fa_rewardedAdManager?(adManager: self, didDisplayFail: error) } - func fa_rewardedAdDidLoadFinish(ad: any FARewardedAd) { - self.delegate?.fa_rewardedAdManagerDidLoadFinish?(adManager: self) + func fa_rewardedAdDidStartLoad(ad: any FARewardedAd) { + self.startLoadDate = Date() + self.uploadAdsHistory(ad: ad, type: "startLoad") } - func fa_rewardedAdDidShow(ad: any FARewardedAd) { + func fa_rewardedAdDidLoadFinish(ad: any FARewardedAd) { + self.isLoadingAd = false + self.endLoadDate = Date() + self.uploadAdsHistory(ad: ad, type: "endLoad") + self.delegate?.fa_rewardedAdManagerDidLoadFinish?(adManager: self) + self.endLoadDate = nil + } + + func fa_rewardedAdDidShow(ad: any FARewardedAd, adInfo: [AnyHashable : Any]) { + self.isPlaying = true + self.startShowDate = Date() + self.uploadAdsHistory(ad: ad, type: "start", viewSeconds: 0) + self.requestUploadAdsPrice(ad: ad, adInfo: adInfo) self.delegate?.fa_rewardedAdManagerDidShow?(adManager: self) } func fa_rewardedAdDidDismiss(ad: any FARewardedAd) { + self.isPlaying = false self.rewardedAd = nil - self.delegate?.fa_rewardedAdManagerDidDismiss?(adManager: self) + var viewSeconds: Int? = nil + if let startShowDate = self.startShowDate { + viewSeconds = Int(Date().timeIntervalSince(startShowDate)) + } + self.uploadAdsHistory(ad: ad, type: "close", viewSeconds: viewSeconds) + 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.delegate?.fa_rewardedAdManagerDidClick?(adManager: self) } } +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) + } +} + extension FARewardedAdManager { private func requestAdOverview() { @@ -154,4 +219,43 @@ extension FARewardedAdManager { } } + + func uploadAdsHistory(ad: any FARewardedAd, type: String, viewSeconds: Int? = nil, errorMsg: String? = nil) { + var loadTime: Int? + if let startDate = self.startLoadDate, let endDate = self.endLoadDate { + loadTime = Int(endDate.timeIntervalSince(startDate)) + } + + 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.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 FARewardedAd, 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_id = self.shortPlayId + model.short_play_video_id = self.shortPlayVideoId + 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 = self.businessScene + + FAStatAPI.requestUploadAdsPrice(model: model) + } } diff --git a/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusInterstitialAd.swift b/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusInterstitialAd.swift index af099cb..3eb96dd 100644 --- a/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusInterstitialAd.swift +++ b/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusInterstitialAd.swift @@ -63,13 +63,17 @@ class FATradPlusInterstitialAd: NSObject, FARewardedAd { //MARK: TradPlusADInterstitialDelegate extension FATradPlusInterstitialAd: TradPlusADInterstitialDelegate { + func tpInterstitialAdStartLoad(_ adInfo: [AnyHashable : Any]) { + self.delegate?.fa_rewardedAdDidStartLoad(ad: self) + } + func tpInterstitialAdLoaded(_ adInfo: [AnyHashable : Any]) { self.networkName = (adInfo["adNetworkName"] as? String) ?? "unknown" self.delegate?.fa_rewardedAdDidLoadFinish(ad: self) } func tpInterstitialAdImpression(_ adInfo: [AnyHashable : Any]) { - self.delegate?.fa_rewardedAdDidShow(ad: self) + self.delegate?.fa_rewardedAdDidShow(ad: self, adInfo: adInfo) } func tpInterstitialAdLoadFailWithError(_ error: any Error) { diff --git a/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusRewardedAd.swift b/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusRewardedAd.swift index a9d4240..49a53d8 100644 --- a/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusRewardedAd.swift +++ b/Fableon/Object/Libs/AdManager/Rewarded/FATradPlusRewardedAd.swift @@ -58,6 +58,10 @@ class FATradPlusRewardedAd: NSObject, FARewardedAd { #if canImport(TradPlusAds) extension FATradPlusRewardedAd: TradPlusADRewardedDelegate { + func tpRewardedAdStartLoad(_ adInfo: [AnyHashable : Any]) { + self.delegate?.fa_rewardedAdDidStartLoad(ad: self) + } + func tpRewardedAdLoaded(_ adInfo: [AnyHashable : Any]) { self.networkName = (adInfo["adNetworkName"] as? String) ?? "unknown" self.delegate?.fa_rewardedAdDidLoadFinish(ad: self) @@ -68,7 +72,7 @@ extension FATradPlusRewardedAd: TradPlusADRewardedDelegate { } func tpRewardedAdImpression(_ adInfo: [AnyHashable : Any]) { - self.delegate?.fa_rewardedAdDidShow(ad: self) + self.delegate?.fa_rewardedAdDidShow(ad: self, adInfo: adInfo) } func tpRewardedAdShow(_ adInfo: [AnyHashable : Any], didFailWithError error: any Error) { diff --git a/Fableon/Object/Libs/FALogin/FAUserInfo.swift b/Fableon/Object/Libs/FALogin/FAUserInfo.swift index 921203c..c7dcbaf 100644 --- a/Fableon/Object/Libs/FALogin/FAUserInfo.swift +++ b/Fableon/Object/Libs/FALogin/FAUserInfo.swift @@ -10,6 +10,12 @@ import SmartCodable class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { + enum UserLevel: String, SmartCaseDefaultable { + case high = "high" + case normal = "normal" + case ad = "ad" + } + var id: String? var customer_id: String? var is_tourist: Bool? @@ -19,6 +25,7 @@ class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { var send_coin_left_total: Int? var is_vip: Bool? var vip_end_time: TimeInterval? + var user_level: UserLevel? func getNickName() -> String { if let name = family_name, !name.isEmpty { @@ -48,6 +55,7 @@ class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { coder.encode(send_coin_left_total, forKey: "send_coin_left_total") coder.encode(is_vip, forKey: "is_vip") coder.encode(vip_end_time, forKey: "vip_end_time") + coder.encode(user_level?.rawValue, forKey: "user_level") } required init?(coder: NSCoder) { @@ -61,5 +69,8 @@ class FAUserInfo: NSObject, SmartCodable, NSSecureCoding { send_coin_left_total = coder.decodeObject(of: NSNumber.self, forKey: "send_coin_left_total")?.intValue is_vip = coder.decodeObject(of: NSNumber.self, forKey: "is_vip")?.boolValue vip_end_time = coder.decodeObject(of: NSNumber.self, forKey: "vip_end_time")?.doubleValue + if let user_level = coder.decodeObject(of: NSString.self, forKey: "user_level") as? String { + self.user_level = UserLevel(rawValue: user_level) + } } } diff --git a/Fableon/Source/Info.plist b/Fableon/Source/Info.plist index 8a73d4a..4d40101 100755 --- a/Fableon/Source/Info.plist +++ b/Fableon/Source/Info.plist @@ -3,7 +3,7 @@ GADApplicationIdentifier - ca-app-pub-3940256099942544~1458002511 + ca-app-pub-2769716799986028~4800893663 CFBundleURLTypes @@ -60,204 +60,204 @@ UIDesignRequiresCompatibility - SKAdNetworkItems - - - SKAdNetworkIdentifier - cstr6suwn9.skadnetwork - - - SKAdNetworkIdentifier - 4fzdc2evr5.skadnetwork - - - SKAdNetworkIdentifier - 2fnua5tdw4.skadnetwork - - - SKAdNetworkIdentifier - ydx93a7ass.skadnetwork - - - SKAdNetworkIdentifier - p78axxw29g.skadnetwork - - - SKAdNetworkIdentifier - v72qych5uu.skadnetwork - - - SKAdNetworkIdentifier - ludvb6z3bs.skadnetwork - - - SKAdNetworkIdentifier - cp8zw746q7.skadnetwork - - - SKAdNetworkIdentifier - 3sh42y64q3.skadnetwork - - - SKAdNetworkIdentifier - c6k4g5qg8m.skadnetwork - - - SKAdNetworkIdentifier - s39g8k73mm.skadnetwork - - - SKAdNetworkIdentifier - 3qy4746246.skadnetwork - - - SKAdNetworkIdentifier - f38h382jlk.skadnetwork - - - SKAdNetworkIdentifier - hs6bdukanm.skadnetwork - - - SKAdNetworkIdentifier - mlmmfzh3r3.skadnetwork - - - SKAdNetworkIdentifier - v4nxqhlyqp.skadnetwork - - - SKAdNetworkIdentifier - wzmmz9fp6w.skadnetwork - - - SKAdNetworkIdentifier - su67r6k2v3.skadnetwork - - - SKAdNetworkIdentifier - yclnxrl5pm.skadnetwork - - - SKAdNetworkIdentifier - t38b2kh725.skadnetwork - - - SKAdNetworkIdentifier - 7ug5zh24hu.skadnetwork - - - SKAdNetworkIdentifier - gta9lk7p23.skadnetwork - - - SKAdNetworkIdentifier - vutu7akeur.skadnetwork - - - SKAdNetworkIdentifier - y5ghdn5j9k.skadnetwork - - - SKAdNetworkIdentifier - v9wttpbfk9.skadnetwork - - - SKAdNetworkIdentifier - n38lu8286q.skadnetwork - - - SKAdNetworkIdentifier - 47vhws6wlr.skadnetwork - - - SKAdNetworkIdentifier - kbd757ywx3.skadnetwork - - - SKAdNetworkIdentifier - 9t245vhmpl.skadnetwork - - - SKAdNetworkIdentifier - a2p9lx4jpn.skadnetwork - - - SKAdNetworkIdentifier - 22mmun2rn5.skadnetwork - - - SKAdNetworkIdentifier - 44jx6755aq.skadnetwork - - - SKAdNetworkIdentifier - k674qkevps.skadnetwork - - - SKAdNetworkIdentifier - 4468km3ulz.skadnetwork - - - SKAdNetworkIdentifier - 2u9pt9hc89.skadnetwork - - - SKAdNetworkIdentifier - 8s468mfl3y.skadnetwork - - - SKAdNetworkIdentifier - klf5c3l5u5.skadnetwork - - - SKAdNetworkIdentifier - ppxm28t8ap.skadnetwork - - - SKAdNetworkIdentifier - kbmxgpxpgc.skadnetwork - - - SKAdNetworkIdentifier - uw77j35x4d.skadnetwork - - - SKAdNetworkIdentifier - 578prtvx9j.skadnetwork - - - SKAdNetworkIdentifier - 4dzt52r2t5.skadnetwork - - - SKAdNetworkIdentifier - tl55sbb4fm.skadnetwork - - - SKAdNetworkIdentifier - c3frkrj4fj.skadnetwork - - - SKAdNetworkIdentifier - e5fvkxwrpn.skadnetwork - - - SKAdNetworkIdentifier - 8c4e2ghe7u.skadnetwork - - - SKAdNetworkIdentifier - 3rd42ekr43.skadnetwork - - - SKAdNetworkIdentifier - 97r2b46745.skadnetwork - - - SKAdNetworkIdentifier - 3qcr597p9d.skadnetwork - - + SKAdNetworkItems + + + SKAdNetworkIdentifier + cstr6suwn9.skadnetwork + + + SKAdNetworkIdentifier + 4fzdc2evr5.skadnetwork + + + SKAdNetworkIdentifier + 2fnua5tdw4.skadnetwork + + + SKAdNetworkIdentifier + ydx93a7ass.skadnetwork + + + SKAdNetworkIdentifier + p78axxw29g.skadnetwork + + + SKAdNetworkIdentifier + v72qych5uu.skadnetwork + + + SKAdNetworkIdentifier + ludvb6z3bs.skadnetwork + + + SKAdNetworkIdentifier + cp8zw746q7.skadnetwork + + + SKAdNetworkIdentifier + 3sh42y64q3.skadnetwork + + + SKAdNetworkIdentifier + c6k4g5qg8m.skadnetwork + + + SKAdNetworkIdentifier + s39g8k73mm.skadnetwork + + + SKAdNetworkIdentifier + 3qy4746246.skadnetwork + + + SKAdNetworkIdentifier + f38h382jlk.skadnetwork + + + SKAdNetworkIdentifier + hs6bdukanm.skadnetwork + + + SKAdNetworkIdentifier + mlmmfzh3r3.skadnetwork + + + SKAdNetworkIdentifier + v4nxqhlyqp.skadnetwork + + + SKAdNetworkIdentifier + wzmmz9fp6w.skadnetwork + + + SKAdNetworkIdentifier + su67r6k2v3.skadnetwork + + + SKAdNetworkIdentifier + yclnxrl5pm.skadnetwork + + + SKAdNetworkIdentifier + t38b2kh725.skadnetwork + + + SKAdNetworkIdentifier + 7ug5zh24hu.skadnetwork + + + SKAdNetworkIdentifier + gta9lk7p23.skadnetwork + + + SKAdNetworkIdentifier + vutu7akeur.skadnetwork + + + SKAdNetworkIdentifier + y5ghdn5j9k.skadnetwork + + + SKAdNetworkIdentifier + v9wttpbfk9.skadnetwork + + + SKAdNetworkIdentifier + n38lu8286q.skadnetwork + + + SKAdNetworkIdentifier + 47vhws6wlr.skadnetwork + + + SKAdNetworkIdentifier + kbd757ywx3.skadnetwork + + + SKAdNetworkIdentifier + 9t245vhmpl.skadnetwork + + + SKAdNetworkIdentifier + a2p9lx4jpn.skadnetwork + + + SKAdNetworkIdentifier + 22mmun2rn5.skadnetwork + + + SKAdNetworkIdentifier + 44jx6755aq.skadnetwork + + + SKAdNetworkIdentifier + k674qkevps.skadnetwork + + + SKAdNetworkIdentifier + 4468km3ulz.skadnetwork + + + SKAdNetworkIdentifier + 2u9pt9hc89.skadnetwork + + + SKAdNetworkIdentifier + 8s468mfl3y.skadnetwork + + + SKAdNetworkIdentifier + klf5c3l5u5.skadnetwork + + + SKAdNetworkIdentifier + ppxm28t8ap.skadnetwork + + + SKAdNetworkIdentifier + kbmxgpxpgc.skadnetwork + + + SKAdNetworkIdentifier + uw77j35x4d.skadnetwork + + + SKAdNetworkIdentifier + 578prtvx9j.skadnetwork + + + SKAdNetworkIdentifier + 4dzt52r2t5.skadnetwork + + + SKAdNetworkIdentifier + tl55sbb4fm.skadnetwork + + + SKAdNetworkIdentifier + c3frkrj4fj.skadnetwork + + + SKAdNetworkIdentifier + e5fvkxwrpn.skadnetwork + + + SKAdNetworkIdentifier + 8c4e2ghe7u.skadnetwork + + + SKAdNetworkIdentifier + 3rd42ekr43.skadnetwork + + + SKAdNetworkIdentifier + 97r2b46745.skadnetwork + + + SKAdNetworkIdentifier + 3qcr597p9d.skadnetwork + + diff --git a/Podfile b/Podfile index f88a594..7adbbc3 100755 --- a/Podfile +++ b/Podfile @@ -20,7 +20,7 @@ target 'Fableon' do pod 'YYText' pod 'Alamofire' pod 'SmartCodable' - pod 'JXPlayer', :git => 'https://github.com/zengjuexin/JXPlayer.git', :tag => '0.2.0' + pod 'JXPlayer', :git => 'https://github.com/zengjuexin/JXPlayer.git', :tag => '0.2.5' pod 'Kingfisher' pod 'SnapKit' pod 'FSPagerView' @@ -38,32 +38,32 @@ target 'Fableon' do pod 'Adjust' # 广告SDK AdMob Meta Pangle Liftoff Mintegral InMobi Verve Bigo TaurusX UnityAds AppLovin IronSource -# pod 'TradPlusAdSDK', '14.9.0' -# pod 'TradPlusAdSDK/FacebookAdapter', '14.9.0' -# pod 'FBAudienceNetwork','6.20.1' -# pod 'TradPlusAdSDK/AdMobAdapter', '14.9.0' -# pod 'Google-Mobile-Ads-SDK','12.14.0' -# pod 'TradPlusAdSDK/UnityAdapter', '14.9.0' -# pod 'UnityAds','4.16.4' -# pod 'TradPlusAdSDK/AppLovinAdapter', '14.9.0' -# pod 'AppLovinSDK','13.5.0' -# pod 'TradPlusAdSDK/VungleAdapter', '14.9.0' -# pod 'VungleAds', '7.6.1' -# pod 'TradPlusAdSDK/IronSourceAdapter', '14.9.0' -# pod 'IronSourceSDK','9.2.0' -# pod 'TradPlusAdSDK/InMobiAdapter', '14.9.0' -# pod 'InMobiSDK' ,'11.1.0' -# pod 'TradPlusAdSDK/MintegralAdapter', '14.9.0' -# pod 'MintegralAdSDK' ,'7.7.9' -# pod 'MintegralAdSDK/All','7.7.9' -# pod 'TradPlusAdSDK/PangleAdapter', '14.9.0' -# pod 'Ads-Global', '7.8.0.5' -# pod 'TradPlusAdSDK/TPCrossAdapter', '14.9.0' -# pod 'TradPlusAdSDK/VerveAdapter', '14.9.0' -# pod 'HyBid','3.7.1' -# pod 'TradPlusAdSDK/BigoAdapter', '14.9.0' -# pod 'BigoADS','5.0.0' -# pod 'TradPlusAdSDK/TaurusXAdapter', '14.9.0' -# pod 'TaurusxAdsSDK','1.12.0' + pod 'TradPlusAdSDK', '14.9.0' + pod 'TradPlusAdSDK/FacebookAdapter', '14.9.0' + pod 'FBAudienceNetwork','6.20.1' + pod 'TradPlusAdSDK/AdMobAdapter', '14.9.0' + pod 'Google-Mobile-Ads-SDK','12.14.0' + pod 'TradPlusAdSDK/UnityAdapter', '14.9.0' + pod 'UnityAds','4.16.4' + pod 'TradPlusAdSDK/AppLovinAdapter', '14.9.0' + pod 'AppLovinSDK','13.5.0' + pod 'TradPlusAdSDK/VungleAdapter', '14.9.0' + pod 'VungleAds', '7.6.1' + pod 'TradPlusAdSDK/IronSourceAdapter', '14.9.0' + pod 'IronSourceSDK','9.2.0' + pod 'TradPlusAdSDK/InMobiAdapter', '14.9.0' + pod 'InMobiSDK' ,'11.1.0' + pod 'TradPlusAdSDK/MintegralAdapter', '14.9.0' + pod 'MintegralAdSDK' ,'7.7.9' + pod 'MintegralAdSDK/All','7.7.9' + pod 'TradPlusAdSDK/PangleAdapter', '14.9.0' + pod 'Ads-Global', '7.8.0.5' + pod 'TradPlusAdSDK/TPCrossAdapter', '14.9.0' + pod 'TradPlusAdSDK/VerveAdapter', '14.9.0' + pod 'HyBid','3.7.1' + pod 'TradPlusAdSDK/BigoAdapter', '14.9.0' + pod 'BigoADS','5.0.0' + pod 'TradPlusAdSDK/TaurusXAdapter', '14.9.0' + pod 'TaurusxAdsSDK','1.12.0' end diff --git a/Podfile.lock b/Podfile.lock index d7c7c1b..b3858a8 100755 --- a/Podfile.lock +++ b/Podfile.lock @@ -4,13 +4,47 @@ PODS: - Adjust/Adjust (5.4.5): - AdjustSignature (= 3.47.0) - AdjustSignature (3.47.0) + - Ads-Global (7.8.0.5): + - Ads-Global/BUAdSDK (= 7.8.0.5) + - Ads-Global/BUAdSDK (7.8.0.5): + - Ads-Global/PangleSDK + - Ads-Global/TikTokBusinessSDK + - Ads-Global/PangleSDK (7.8.0.5) + - Ads-Global/TikTokBusinessSDK (7.8.0.5) - Alamofire (5.10.2) + - AppLovinSDK (13.5.0) + - ATOM-Standalone (3.8.0) + - BigoADS (5.0.0) - collection-view-layouts/Core (0.2.2) - collection-view-layouts/TagsLayout (0.2.2): - collection-view-layouts/Core + - FBAudienceNetwork (6.20.1) - FDFullscreenPopGesture (1.1) - FSPagerView (0.8.3) + - Google-Mobile-Ads-SDK (12.14.0): + - GoogleUserMessagingPlatform (>= 1.1) + - GoogleUserMessagingPlatform (3.1.0) - HWPanModal (0.9.9) + - HyBid (3.7.1): + - HyBid/ATOM (= 3.7.1) + - HyBid/Banner (= 3.7.1) + - HyBid/Core (= 3.7.1) + - HyBid/FullScreen (= 3.7.1) + - HyBid/Native (= 3.7.1) + - HyBid/RewardedVideo (= 3.7.1) + - HyBid/ATOM (3.7.1): + - ATOM-Standalone + - HyBid/Core + - HyBid/Banner (3.7.1): + - HyBid/Core + - HyBid/Core (3.7.1) + - HyBid/FullScreen (3.7.1): + - HyBid/Core + - HyBid/Native (3.7.1): + - HyBid/Core + - HyBid/RewardedVideo (3.7.1): + - HyBid/Core + - InMobiSDK (11.1.0) - IQKeyboardCore (1.0.8) - IQKeyboardManagerSwift (8.0.1): - IQKeyboardManagerSwift/Appearance (= 8.0.1) @@ -49,14 +83,69 @@ PODS: - IQKeyboardCore - IQTextView (1.0.5): - IQKeyboardToolbar/Placeholderable + - IronSourceAdQualitySDK (9.1.1) + - IronSourceSDK (9.2.0.0): + - IronSourceSDK/AdQuality (= 9.2.0.0) + - IronSourceSDK/Ads (= 9.2.0.0) + - IronSourceSDK/AdQuality (9.2.0.0): + - IronSourceAdQualitySDK (~> 9.1.1) + - IronSourceSDK/Ads (9.2.0.0) - JXPagingView/Paging (2.1.3) - - JXPlayer (0.2.0): + - JXPlayer (0.2.5): - SJMediaCacheServer (= 2.1.6) - SJVideoPlayer (= 3.4.3) - JXSegmentedView (1.4.1) - Kingfisher (8.5.0) - LYEmptyView (1.3.1) - Masonry (1.1.0) + - MintegralAdSDK (7.7.9): + - MintegralAdSDK/BannerAd (= 7.7.9) + - MintegralAdSDK/BidBannerAd (= 7.7.9) + - MintegralAdSDK/BidInterstitialVideoAd (= 7.7.9) + - MintegralAdSDK/BidNativeAd (= 7.7.9) + - MintegralAdSDK/BidNewInterstitialAd (= 7.7.9) + - MintegralAdSDK/BidRewardVideoAd (= 7.7.9) + - MintegralAdSDK/InterstitialVideoAd (= 7.7.9) + - MintegralAdSDK/NativeAd (= 7.7.9) + - MintegralAdSDK/NewInterstitialAd (= 7.7.9) + - MintegralAdSDK/RewardVideoAd (= 7.7.9) + - MintegralAdSDK/All (7.7.9): + - MintegralAdSDK/BannerAd + - MintegralAdSDK/BidNativeAd + - MintegralAdSDK/InterstitialVideoAd + - MintegralAdSDK/NativeAd + - MintegralAdSDK/NativeAdvancedAd + - MintegralAdSDK/NewInterstitialAd + - MintegralAdSDK/RewardVideoAd + - MintegralAdSDK/SplashAd + - MintegralAdSDK/BannerAd (7.7.9): + - MintegralAdSDK/NativeAd + - MintegralAdSDK/BidBannerAd (7.7.9): + - MintegralAdSDK/BannerAd + - MintegralAdSDK/BidNativeAd + - MintegralAdSDK/BidInterstitialVideoAd (7.7.9): + - MintegralAdSDK/BidNativeAd + - MintegralAdSDK/InterstitialVideoAd + - MintegralAdSDK/BidNativeAd (7.7.9): + - MintegralAdSDK/NativeAd + - MintegralAdSDK/BidNewInterstitialAd (7.7.9): + - MintegralAdSDK/BidNativeAd + - MintegralAdSDK/NewInterstitialAd + - MintegralAdSDK/BidRewardVideoAd (7.7.9): + - MintegralAdSDK/BidNativeAd + - MintegralAdSDK/RewardVideoAd + - MintegralAdSDK/InterstitialVideoAd (7.7.9): + - MintegralAdSDK/NativeAd + - MintegralAdSDK/NativeAd (7.7.9) + - MintegralAdSDK/NativeAdvancedAd (7.7.9): + - MintegralAdSDK/NativeAd + - MintegralAdSDK/NewInterstitialAd (7.7.9): + - MintegralAdSDK/InterstitialVideoAd + - MintegralAdSDK/NativeAd + - MintegralAdSDK/RewardVideoAd (7.7.9): + - MintegralAdSDK/NativeAd + - MintegralAdSDK/SplashAd (7.7.9): + - MintegralAdSDK/NativeAd - MJRefresh (3.7.9) - SJBaseVideoPlayer (3.7.7.1): - Masonry @@ -129,7 +218,30 @@ PODS: - SVProgressHUD (2.3.1): - SVProgressHUD/Core (= 2.3.1) - SVProgressHUD/Core (2.3.1) + - TaurusxAdsSDK (1.12.0): + - TaurusxAdsSDK/TaurusxAds (= 1.12.0) + - TaurusxAdsSDK/TaurusxAds (1.12.0) - Toast (4.1.1) + - TPExchange (13.8.30) + - TradPlusAdSDK (14.9.0): + - TradPlusAdSDK/TradPlusAds (= 14.9.0) + - TradPlusAdSDK/AdMobAdapter (14.9.0) + - TradPlusAdSDK/AppLovinAdapter (14.9.0) + - TradPlusAdSDK/BigoAdapter (14.9.0) + - TradPlusAdSDK/FacebookAdapter (14.9.0) + - TradPlusAdSDK/InMobiAdapter (14.9.0) + - TradPlusAdSDK/IronSourceAdapter (14.9.0) + - TradPlusAdSDK/MintegralAdapter (14.9.0) + - TradPlusAdSDK/PangleAdapter (14.9.0) + - TradPlusAdSDK/TaurusXAdapter (14.9.0) + - TradPlusAdSDK/TPCrossAdapter (14.9.0) + - TradPlusAdSDK/TradPlusAds (14.9.0): + - TPExchange (= 13.8.30) + - TradPlusAdSDK/UnityAdapter (14.9.0) + - TradPlusAdSDK/VerveAdapter (14.9.0) + - TradPlusAdSDK/VungleAdapter (14.9.0) + - UnityAds (4.16.4) + - VungleAds (7.6.1) - YYCategories (1.0.4): - YYCategories/no-arc (= 1.0.4) - YYCategories/no-arc (1.0.4) @@ -141,22 +253,49 @@ PODS: DEPENDENCIES: - Adjust + - Ads-Global (= 7.8.0.5) - Alamofire + - AppLovinSDK (= 13.5.0) + - BigoADS (= 5.0.0) - collection-view-layouts/TagsLayout + - FBAudienceNetwork (= 6.20.1) - FDFullscreenPopGesture - FSPagerView + - Google-Mobile-Ads-SDK (= 12.14.0) - HWPanModal + - HyBid (= 3.7.1) + - InMobiSDK (= 11.1.0) - IQKeyboardManagerSwift + - IronSourceSDK (= 9.2.0) - JXPagingView/Paging - - JXPlayer (from `https://github.com/zengjuexin/JXPlayer.git`, tag `0.2.0`) + - JXPlayer (from `https://github.com/zengjuexin/JXPlayer.git`, tag `0.2.5`) - JXSegmentedView - Kingfisher - LYEmptyView + - MintegralAdSDK (= 7.7.9) + - MintegralAdSDK/All (= 7.7.9) - MJRefresh - SmartCodable - SnapKit - SVProgressHUD + - TaurusxAdsSDK (= 1.12.0) - Toast + - TradPlusAdSDK (= 14.9.0) + - TradPlusAdSDK/AdMobAdapter (= 14.9.0) + - TradPlusAdSDK/AppLovinAdapter (= 14.9.0) + - TradPlusAdSDK/BigoAdapter (= 14.9.0) + - TradPlusAdSDK/FacebookAdapter (= 14.9.0) + - TradPlusAdSDK/InMobiAdapter (= 14.9.0) + - TradPlusAdSDK/IronSourceAdapter (= 14.9.0) + - TradPlusAdSDK/MintegralAdapter (= 14.9.0) + - TradPlusAdSDK/PangleAdapter (= 14.9.0) + - TradPlusAdSDK/TaurusXAdapter (= 14.9.0) + - TradPlusAdSDK/TPCrossAdapter (= 14.9.0) + - TradPlusAdSDK/UnityAdapter (= 14.9.0) + - TradPlusAdSDK/VerveAdapter (= 14.9.0) + - TradPlusAdSDK/VungleAdapter (= 14.9.0) + - UnityAds (= 4.16.4) + - VungleAds (= 7.6.1) - YYCategories - YYText - ZLPhotoBrowser @@ -165,11 +304,20 @@ SPEC REPOS: https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git: - Adjust - AdjustSignature + - Ads-Global - Alamofire + - AppLovinSDK + - ATOM-Standalone + - BigoADS - collection-view-layouts + - FBAudienceNetwork - FDFullscreenPopGesture - FSPagerView + - Google-Mobile-Ads-SDK + - GoogleUserMessagingPlatform - HWPanModal + - HyBid + - InMobiSDK - IQKeyboardCore - IQKeyboardManagerSwift - IQKeyboardNotification @@ -178,11 +326,14 @@ SPEC REPOS: - IQKeyboardToolbarManager - IQTextInputViewNotification - IQTextView + - IronSourceAdQualitySDK + - IronSourceSDK - JXPagingView - JXSegmentedView - Kingfisher - LYEmptyView - Masonry + - MintegralAdSDK - MJRefresh - SJBaseVideoPlayer - SJMediaCacheServer @@ -191,7 +342,12 @@ SPEC REPOS: - SmartCodable - SnapKit - SVProgressHUD + - TaurusxAdsSDK - Toast + - TPExchange + - TradPlusAdSDK + - UnityAds + - VungleAds - YYCategories - YYModel - YYText @@ -200,21 +356,30 @@ SPEC REPOS: EXTERNAL SOURCES: JXPlayer: :git: https://github.com/zengjuexin/JXPlayer.git - :tag: 0.2.0 + :tag: 0.2.5 CHECKOUT OPTIONS: JXPlayer: :git: https://github.com/zengjuexin/JXPlayer.git - :tag: 0.2.0 + :tag: 0.2.5 SPEC CHECKSUMS: Adjust: 010c8b2b582add6ba200469c82c4d8c9e5ddb198 AdjustSignature: d634fc6b66295c38807f3b4e50978c1f72355950 + Ads-Global: f4958eaa8e92b32a05fab125fed7822be81cf878 Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496 + AppLovinSDK: bf8974163120910e6b902e9610e7c5a2c0f577b6 + ATOM-Standalone: ad17f0d0e60b22f67ed99e5a336425d68d324f3e + BigoADS: 789ca51394adb1adb405e7e01ec8e43d3dc14f15 collection-view-layouts: 474ec4cce601a26247737227a97fa6a4eb30213f + FBAudienceNetwork: 08e86d63a05b3a5a59414af12e4af8d756943c80 FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0 FSPagerView: 670405b2f18e2a87fa37f20b00de783e562c25a8 + Google-Mobile-Ads-SDK: 4534fd2dfcd3f705c5485a6633c5188d03d4eed2 + GoogleUserMessagingPlatform: befe603da6501006420c206222acd449bba45a9c HWPanModal: b57a6717d3cdcd666bff44f9dd2a5be9f4d6f5d2 + HyBid: c75fa40e2d209aaed25b60f7bcd0e408d294c19e + InMobiSDK: 43b1d6560bd75c8c382bb54fa8e248f5ed979860 IQKeyboardCore: 8652977ec919cf5351aa2977fedd1a6546476fbc IQKeyboardManagerSwift: 835fc9c6e4732398113406d84900ad2e8f141218 IQKeyboardNotification: eb4910401f5a0e68f97e71c62f8a0c5b7e9d535c @@ -223,12 +388,15 @@ SPEC CHECKSUMS: IQKeyboardToolbarManager: c8a575e8b5fffe5873d0e75312244498a0759473 IQTextInputViewNotification: 3b9fb27a16e7ee8958cc9092cfb07a1a9e1fd559 IQTextView: ae13b4922f22e6f027f62c557d9f4f236b19d5c7 + IronSourceAdQualitySDK: 56314ade811a5226f76dfd377bc09aca0d6610c0 + IronSourceSDK: 66e1483cd62fb63162a965651f6f41c6b91664db JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e - JXPlayer: 3064f658b71cba7f0db4098e618f11f5d8dce61a + JXPlayer: cba8901329a005116828676a0887302f112b8ffe JXSegmentedView: cd73555ce2134d1656db2cb383ba9c2f36fb5078 Kingfisher: ff0d31a1f07bdff6a1ebb3ba08b8e6e567b6500c LYEmptyView: b6d418cfa38b78df0cf243f9a9c25ccbdc399922 Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 + MintegralAdSDK: 054814f99bb7e967b8974fe635d9005b225cbe42 MJRefresh: ff9e531227924c84ce459338414550a05d2aea78 SJBaseVideoPlayer: b3122de12225b27b71bd9a8a1f08f4dcf2f4e5ec SJMediaCacheServer: f6cd08ff32f5c6fc18ff06e676b42d6c17ce4cf1 @@ -237,12 +405,17 @@ SPEC CHECKSUMS: SmartCodable: 545dd052990fe7e80085463b79a1a5e462ee29ff SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22 + TaurusxAdsSDK: 6eed5ca3a64dcaeea3929bd483c7073fd7cf0628 Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e + TPExchange: 41f39ebc014788b277bc78030f6ef2585a5c4460 + TradPlusAdSDK: 980b0feda31e25e1b8ec0f6481d43d7f2be1b39a + UnityAds: 91a5d786c1e79fcbf702c525af4700158aeb36c8 + VungleAds: ab78d62721933672a83efcf7d2de8ae0610494be YYCategories: 6bcd4314c6661a561410dce4a793379ebd306abd YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30 YYText: 5c461d709e24d55a182d1441c41dc639a18a4849 ZLPhotoBrowser: d5928f08485c90a0b349a3a1e804e82c83ccf193 -PODFILE CHECKSUM: 7f9d52a2d48e07bbe3da45c9c5f8da06c21e4c9a +PODFILE CHECKSUM: 9672d978b276fa38f2109ff21ced81fa77aa357c COCOAPODS: 1.16.2