diff --git a/Fableon.xcodeproj/project.pbxproj b/Fableon.xcodeproj/project.pbxproj index a8babdc..754806a 100644 --- a/Fableon.xcodeproj/project.pbxproj +++ b/Fableon.xcodeproj/project.pbxproj @@ -41,6 +41,9 @@ 031FDEEC2EB35DF600F4CAC7 /* FACoinsPackAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031FDEEB2EB35DF600F4CAC7 /* FACoinsPackAlert.swift */; }; 031FDEEE2EB3682000F4CAC7 /* FAVipRetainAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031FDEED2EB3682000F4CAC7 /* FAVipRetainAlert.swift */; }; 035589332F161E6E00FAEF4A /* FAPayRetainAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589322F161E6E00FAEF4A /* FAPayRetainAlert.swift */; }; + 035589362F2305D800FAEF4A /* FAAdManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589352F2305D800FAEF4A /* FAAdManager.swift */; }; + 0355893A2F234B3E00FAEF4A /* FAOpenAdManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589392F234B3E00FAEF4A /* FAOpenAdManager.swift */; }; + 0355893C2F234C8300FAEF4A /* FATradPlusOpenAd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0355893B2F234C8300FAEF4A /* FATradPlusOpenAd.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 */; }; @@ -416,6 +419,9 @@ 031FDEEB2EB35DF600F4CAC7 /* FACoinsPackAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACoinsPackAlert.swift; sourceTree = ""; }; 031FDEED2EB3682000F4CAC7 /* FAVipRetainAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAVipRetainAlert.swift; sourceTree = ""; }; 035589322F161E6E00FAEF4A /* FAPayRetainAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAPayRetainAlert.swift; sourceTree = ""; }; + 035589352F2305D800FAEF4A /* FAAdManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAAdManager.swift; sourceTree = ""; }; + 035589392F234B3E00FAEF4A /* FAOpenAdManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAOpenAdManager.swift; sourceTree = ""; }; + 0355893B2F234C8300FAEF4A /* FATradPlusOpenAd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FATradPlusOpenAd.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 = ""; }; @@ -777,6 +783,32 @@ path = Alert; sourceTree = ""; }; + 035589342F2304B800FAEF4A /* AdManager */ = { + isa = PBXGroup; + children = ( + 035589382F2319EB00FAEF4A /* Open */, + 035589372F2319DD00FAEF4A /* Rewarded */, + 035589352F2305D800FAEF4A /* FAAdManager.swift */, + ); + path = AdManager; + sourceTree = ""; + }; + 035589372F2319DD00FAEF4A /* Rewarded */ = { + isa = PBXGroup; + children = ( + ); + path = Rewarded; + sourceTree = ""; + }; + 035589382F2319EB00FAEF4A /* Open */ = { + isa = PBXGroup; + children = ( + 035589392F234B3E00FAEF4A /* FAOpenAdManager.swift */, + 0355893B2F234C8300FAEF4A /* FATradPlusOpenAd.swift */, + ); + path = Open; + sourceTree = ""; + }; 039CE6072EAA2F37007B5EED /* AdjustStateManager */ = { isa = PBXGroup; children = ( @@ -1302,6 +1334,7 @@ 03E23A962EAA1A65004A8CEC /* Libs */ = { isa = PBXGroup; children = ( + 035589342F2304B800FAEF4A /* AdManager */, 03E9A78E2EC1AFEA000D1067 /* ActivityManager */, 031FDEE22EB3487700F4CAC7 /* Alert */, 039CE6122EAB0DE1007B5EED /* FAIap */, @@ -1959,6 +1992,7 @@ F3T938414J234X46539JR019 /* Resources */, 4809W21R638Z15866LWB2041 /* [CP] Embed Pods Frameworks */, 03E9A7632EC19101000D1067 /* Embed Foundation Extensions */, + 7A6DD8DBCA1DA3FCAC271812 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -2099,6 +2133,27 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 7A6DD8DBCA1DA3FCAC271812 /* [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; + }; 9E12479709584PQ64999OJ92 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -2164,6 +2219,7 @@ 031FDEB62EB0B77F00F4CAC7 /* FACoinPackConfirmItemView.swift in Sources */, F35S8138Z362EG3435ME1455 /* CSGleeView.swift in Sources */, 031FDEB42EB0AD7D00F4CAC7 /* FACoinPackConfirmView.swift in Sources */, + 035589362F2305D800FAEF4A /* FAAdManager.swift in Sources */, F31451S3X15B941342J922Q3 /* TConfigCell.swift in Sources */, F3670DZ2KI89TBO3L9L36P57 /* XLoginView.swift in Sources */, F3V24670CK2EGR4595CDQ261 /* AWUModalMageCell.swift in Sources */, @@ -2173,6 +2229,7 @@ 031FDEE12EB344AB00F4CAC7 /* FALogin+Facebook.swift in Sources */, F30E153206675C3SJ3974VL1 /* OJQUnechoSectionView.swift in Sources */, F381909BQ5JWXYI119A49469 /* DREychainCell.swift in Sources */, + 0355893A2F234B3E00FAEF4A /* FAOpenAdManager.swift in Sources */, F39R66F983517825QO331145 /* QCenterEfineView.swift in Sources */, F3II3AF834346F516W51V693 /* GAMainRecommendedView.swift in Sources */, 031FDEAE2EB093B100F4CAC7 /* FABuyRecordsModel.swift in Sources */, @@ -2388,6 +2445,7 @@ 03E239972EAA1A29004A8CEC /* FANetworkManager.swift in Sources */, 03E239982EAA1A29004A8CEC /* UIScrollView+FARefresh.swift in Sources */, 03E239992EAA1A29004A8CEC /* FANavigationController.swift in Sources */, + 0355893C2F234C8300FAEF4A /* FATradPlusOpenAd.swift in Sources */, 03E2399A2EAA1A29004A8CEC /* FAViewController.swift in Sources */, 03E2399B2EAA1A29004A8CEC /* FAWebMessageModel.swift in Sources */, 03E2399C2EAA1A29004A8CEC /* FAGradientButton.swift in Sources */, diff --git a/Fableon/App/AppDelegate+FAConfig.swift b/Fableon/App/AppDelegate+FAConfig.swift index bbcf3a2..e6132bb 100644 --- a/Fableon/App/AppDelegate+FAConfig.swift +++ b/Fableon/App/AppDelegate+FAConfig.swift @@ -36,6 +36,7 @@ extension AppDelegate { func fa_registThirdparty(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) { ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions) + FAAdManager.initSdk() } } diff --git a/Fableon/App/SceneDelegate.swift b/Fableon/App/SceneDelegate.swift index 70886c2..c546579 100644 --- a/Fableon/App/SceneDelegate.swift +++ b/Fableon/App/SceneDelegate.swift @@ -25,6 +25,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { FATool.windowScene = windowScene window = UIWindow(windowScene: windowScene) + window?.makeKeyAndVisible() startApp() onLineTimer = Timer.scheduledTimer(timeInterval: 60 * 10, target: YYTextWeakProxy(target: self), selector: #selector(handleOnLine), userInfo: nil, repeats: true) @@ -38,6 +39,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { requestFirebase() requestApns() + FAOpenAdManager.manager.showAdIfAvailable() } func sceneDidDisconnect(_ scene: UIScene) { diff --git a/Fableon/Object/Libs/AdManager/FAAdManager.swift b/Fableon/Object/Libs/AdManager/FAAdManager.swift new file mode 100644 index 0000000..508fe25 --- /dev/null +++ b/Fableon/Object/Libs/AdManager/FAAdManager.swift @@ -0,0 +1,62 @@ +// +// FAAdManager.swift +// Fableon +// +// Created by 湖北秦九 on 2026/1/23. +// + +import UIKit +#if canImport(TradPlusAds) +import TradPlusAds +#endif + + +class FAAdManager: NSObject { + + static func initSdk() { +#if canImport(TradPlusAds) +#if DEBUG + TradPlus.setLogLevel(MSLogLevelAll) +#endif + TradPlus.initSDK("8C768B1A89BA057E47D752181A7BDA21") { error in + if let error = error { + debugLog(error) + } else { + debugLog("TradPlus 初始化成功") + } + } +#endif + + } + +} + + +enum FAAdPlatform { + case tradPlus + + ///激励广告单元Id + var rewardedUnitId: String { + switch self { + case .tradPlus: + return "E35A9B622C1125CB6EDFC288F22CDB22" + } + } + + ///开屏广告单元Id + var openUnitId: String { + switch self { + case .tradPlus: + return "67B5E393DF8D80325B0CC1055B5A2122" + } + } + + ///横幅广告单元Id + var bannerUnitId: String { + switch self { + case .tradPlus: + return "E92BEE12E188BCD15834075F5A32A922" + } + } + +} diff --git a/Fableon/Object/Libs/AdManager/Open/FAOpenAdManager.swift b/Fableon/Object/Libs/AdManager/Open/FAOpenAdManager.swift new file mode 100644 index 0000000..b3916a0 --- /dev/null +++ b/Fableon/Object/Libs/AdManager/Open/FAOpenAdManager.swift @@ -0,0 +1,221 @@ +// +// FAOpenAdManager.swift +// Fableon +// +// Created by 湖北秦九 on 2026/1/23. +// + +import UIKit + +@objc protocol FAOpenAdManagerDelegate: NSObjectProtocol { + /// 广告加载失败 + @objc optional func fa_openAdManager(manager: FAOpenAdManager, didLoadFail error: Error) + /// 广告加载成功 + @objc optional func fa_openAdManagerDidLoadFinish(manager: FAOpenAdManager) + /// 广告展示失败 + @objc optional func fa_openAdManager(manager: FAOpenAdManager, didDisplayFail error: Error) + /// 广告被展示 + @objc optional func fa_openAdManagerDidShow(manager: FAOpenAdManager) + /// 广告被关闭 + @objc optional func fa_openAdManagerDidDismiss(manager: FAOpenAdManager) + /// 其它错误 + @objc optional func fa_openAdManager(manager: FAOpenAdManager, didOtherFail error: Error) +} + +protocol FAOpenAdDelegate: NSObjectProtocol { + func fa_openAd(ad: FAOpenAd, didLoadFail error: Error) + func fa_openAdDidLoadFinish(ad: FAOpenAd) + func fa_openAd(ad: FAOpenAd, didDisplayFail error: Error) + func fa_openAdDidShow(ad: FAOpenAd) + func fa_openAdDidDismiss(ad: FAOpenAd) + func fa_openAdDidClick(ad: FAOpenAd) +} + +protocol FAOpenAd: NSObjectProtocol { + var delegate: FAOpenAdDelegate? { get set } + var adPlatform: FAAdPlatform { get } + var adUnitID: String { get } + var isReady: Bool { get } + + func loadAd() + func showAd() +} + +class FAOpenAdManager: NSObject { + + static let manager = FAOpenAdManager() + + weak var delegate: FAOpenAdManagerDelegate? + + private var appOpenAd: FAOpenAd? { + didSet { + oldValue?.delegate = nil + appOpenAd?.delegate = self + } + } + + private(set) var isLoadingAd = false + private(set) var isShowingAd = false + /// 标记是否在等待广告加载完成后自动展示 + private var isWaitingToShow = false + private var timeOutTimer: Timer? + + deinit { + NotificationCenter.default.removeObserver(self) + } + + private override init() { + super.init() + NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActiveNotification), name: UIApplication.didBecomeActiveNotification, object: nil) + } + + func loadAd() { + if isLoadingAd || isAdAvailable() { + return + } + isLoadingAd = true + + appOpenAd = FATradPlusOpenAd() + appOpenAd?.loadAd() + } + + func showAd() { + guard let ad = appOpenAd, isAdAvailable() else { + loadAd() + return + } + + isWaitingToShow = false + isShowingAd = true + ad.showAd() + } + + /// 外部调用的主要入口 + func showAdIfAvailable() { + // 如果正在展示广告,不再重复触发 + guard !isShowingAd else { return } + + // 1. 如果广告已就绪,直接展示 + if isAdAvailable() { + showAd() + return + } + + // 2. 如果没有就绪,标记等待并开始加载,同时开启超时保护 + isWaitingToShow = true + startTimeoutTimer() + loadAd() + } + + private func isAdAvailable() -> Bool { + return appOpenAd?.isReady ?? false + } + + // MARK: - Timer (防止加载时间过长,用户已进入首页后突然弹出广告) + private func startTimeoutTimer() { + clearTimer() +// timeOutTimer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { [weak self] _ in +// Task { @MainActor in +// self?.handleTimeOut() +// } +// } + } + + @objc private func handleTimeOut() { + if isWaitingToShow { + isWaitingToShow = false + let error = NSError(domain: "time-out", code: -1) + delegate?.fa_openAdManager?(manager: self, didOtherFail: error) + } + clearTimer() + } + + private func clearTimer() { + timeOutTimer?.invalidate() + timeOutTimer = nil + } + + + +} + +// MARK: - BRAppOpenAdDelegate +extension FAOpenAdManager: FAOpenAdDelegate { + + func fa_openAd(ad: FAOpenAd, didLoadFail error: Error) { + isLoadingAd = false + isWaitingToShow = false + appOpenAd = nil + clearTimer() + requestStatAd(type: "load_failed", errorMsg: error.localizedDescription) + delegate?.fa_openAdManager?(manager: self, didLoadFail: error) + delegate = nil + } + + func fa_openAdDidLoadFinish(ad: FAOpenAd) { + isLoadingAd = false + delegate?.fa_openAdManagerDidLoadFinish?(manager: self) + + // 如果之前处于等待展示状态,现在立即展示 + if isWaitingToShow { + clearTimer() + showAd() + } + } + + func fa_openAd(ad: FAOpenAd, didDisplayFail error: Error) { + isShowingAd = false + isWaitingToShow = false + appOpenAd = nil + clearTimer() + requestStatAd(type: "show_failed", errorMsg: error.localizedDescription) + delegate?.fa_openAdManager?(manager: self, didDisplayFail: error) + delegate = nil + } + + func fa_openAdDidShow(ad: FAOpenAd) { + requestStatAd(type: "start", errorMsg: nil) + delegate?.fa_openAdManagerDidShow?(manager: self) + } + + func fa_openAdDidDismiss(ad: FAOpenAd) { + isShowingAd = false + appOpenAd = nil + delegate?.fa_openAdManagerDidDismiss?(manager: self) + // 关闭后自动预加载下一条,提高下次展示成功率 + loadAd() + delegate = nil + } + + func fa_openAdDidClick(ad: FAOpenAd) { + requestStatAd(type: "click", errorMsg: nil) + } +} + +// MARK: - Statistics +extension FAOpenAdManager { + private func requestStatAd(type: String, errorMsg: String?) { + guard let appOpenAd = appOpenAd else { return } + + // let model = SPStatAdModel() + // model.type = type + // model.ads_id = appOpenAd.adUnitID + // model.ad_platform_key = SPAdPlatformKey(rawValue: appOpenAd.adPlatformKey) + // model.error_msg = errorMsg + // model.scene = .splash + // + // SPStatAPI.requestStatAd(model: model) + } + + + @objc private func didEnterBackgroundNotification() { + if !self.isShowingAd { return } + + self.requestStatAd(type: "Interrupt", errorMsg: nil) + } + + @objc private func didBecomeActiveNotification() { + showAdIfAvailable() + } +} diff --git a/Fableon/Object/Libs/AdManager/Open/FATradPlusOpenAd.swift b/Fableon/Object/Libs/AdManager/Open/FATradPlusOpenAd.swift new file mode 100644 index 0000000..0ad9fe6 --- /dev/null +++ b/Fableon/Object/Libs/AdManager/Open/FATradPlusOpenAd.swift @@ -0,0 +1,104 @@ +// +// BRTradPlusOpenAd.swift +// Fableon +// +// Created by 湖北秦九 on 2026/1/23. +// + +import UIKit +#if canImport(TradPlusAds) +import TradPlusAds +#endif + +class FATradPlusOpenAd: NSObject, FAOpenAd { + +#if canImport(TradPlusAds) + private var appOpenAd: TradPlusAdSplash? +#endif + + weak var delegate: FAOpenAdDelegate? + + var adPlatform: FAAdPlatform { + return .tradPlus + } + + var adUnitID: String { + return self.adPlatform.openUnitId + } + + var isReady: Bool { +#if canImport(TradPlusAds) + return self.appOpenAd?.isAdReady ?? false +#else + return false +#endif + } + + func loadAd() { + appOpenAd = nil + + guard let targetWindow = FATool.keyWindow else { + let error = NSError(domain: "com.beereel.ad", + code: -2, + userInfo: [NSLocalizedDescriptionKey: "TradPlus failed: No active window found"]) + self.delegate?.fa_openAd(ad: self, didLoadFail: error) + return + } +#if canImport(TradPlusAds) + // 3. 初始化并配置 + let splash = TradPlusAdSplash() + splash.setAdUnitID(adUnitID) + splash.delegate = self + self.appOpenAd = splash + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + splash.loadAd(with: targetWindow, bottomView: nil) + } +#endif + } + + func showAd() { + if isReady { +#if canImport(TradPlusAds) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in + guard let self = self else { return } + self.appOpenAd?.show() + } +#endif + } + } + +} + +#if canImport(TradPlusAds) +// MARK: - TradPlusADSplashDelegate +extension FATradPlusOpenAd: TradPlusADSplashDelegate { + + func tpSplashAdLoaded(_ adInfo: [AnyHashable : Any]) { + self.delegate?.fa_openAdDidLoadFinish(ad: self) + } + + func tpSplashAdLoadFailWithError(_ error: Error, adInfo: [AnyHashable : Any]) { + self.appOpenAd = nil + self.delegate?.fa_openAd(ad: self, didLoadFail: error) + } + + func tpSplashAdImpression(_ adInfo: [AnyHashable : Any]) { + self.delegate?.fa_openAdDidShow(ad: self) + } + + func tpSplashAdShow(_ adInfo: [AnyHashable : Any], didFailWithError error: Error) { + self.appOpenAd = nil + self.delegate?.fa_openAd(ad: self, didDisplayFail: error) + } + + func tpSplashAdClicked(_ adInfo: [AnyHashable : Any]) { + self.delegate?.fa_openAdDidClick(ad: self) + } + + func tpSplashAdDismissed(_ adInfo: [AnyHashable : Any]) { + self.appOpenAd = nil + self.delegate?.fa_openAdDidDismiss(ad: self) + } +} +#endif diff --git a/Fableon/Source/Info.plist b/Fableon/Source/Info.plist index 0fa6392..8a73d4a 100755 --- a/Fableon/Source/Info.plist +++ b/Fableon/Source/Info.plist @@ -2,6 +2,8 @@ + GADApplicationIdentifier + ca-app-pub-3940256099942544~1458002511 CFBundleURLTypes @@ -21,6 +23,11 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + FacebookAppID 1309643747870828 FacebookClientToken @@ -53,5 +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 + + diff --git a/Podfile b/Podfile index d7c6b9e..1daaf0e 100755 --- a/Podfile +++ b/Podfile @@ -1,16 +1,16 @@ -platform :ios, '13.0' +platform :ios, '15.0' source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git' post_install do |installer| installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['ENABLE_BITCODE'] = 'NO' - config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" - config.build_settings['EXCLUDED_ARCHITECTURES'] = 'i386' - config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0' - end - end + target.build_configurations.each do |config| + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0' + config.build_settings.delete('EXCLUDED_ARCHS[sdk=iphonesimulator*]') + config.build_settings.delete('EXCLUDED_ARCHITECTURES') + config.build_settings['ENABLE_BITCODE'] = 'NO' + end + end end target 'Fableon' do @@ -36,5 +36,34 @@ target 'Fableon' do pod 'JXPagingView/Paging' pod 'JXSegmentedView' 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' end diff --git a/Podfile.lock b/Podfile.lock index f382bfd..014c05d 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,6 +83,13 @@ 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): - SJMediaCacheServer (= 2.1.6) @@ -57,6 +98,54 @@ PODS: - 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`) - 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 @@ -210,11 +366,20 @@ CHECKOUT OPTIONS: 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 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: cd32c414c77ca06ddc270e513eb703e621fcdcff +PODFILE CHECKSUM: cbaf80f809461e9694f391ef939aeca544e90607 COCOAPODS: 1.16.2