398 lines
14 KiB
Swift
398 lines
14 KiB
Swift
//
|
||
// WA_limitsVCViewController.swift
|
||
// wallpaper_project
|
||
|
||
|
||
import UIKit
|
||
import SVProgressHUD
|
||
import Photos
|
||
import Alamofire
|
||
import AppLovinSDK
|
||
import FirebaseAnalytics
|
||
import FirebaseRemoteConfig
|
||
import MTGSDKNewInterstitial
|
||
import MTGSDKBidding
|
||
import MTGSDK
|
||
import AnyThinkInterstitial
|
||
|
||
|
||
class WA_limitsVCViewController: WA_RootVC {
|
||
@IBOutlet weak var retryBtn: UIButton!
|
||
let activityView = UIActivityIndicatorView()
|
||
|
||
@IBOutlet weak var resourceLabel: UILabel!
|
||
|
||
var interstitialAd: MAInterstitialAd!
|
||
var retryAttempt = 0.0
|
||
|
||
var adCheckTimer: Timer?
|
||
var adCheckStartTime: Date?
|
||
var adLoadTime: Int = 0
|
||
|
||
var idad:String?
|
||
var remoteConfig: RemoteConfig!
|
||
|
||
var failureCount = 0
|
||
|
||
private var retryTimer: Timer?
|
||
private var retryAttempts = 0
|
||
private let maxRetryAttempts = 3
|
||
private let retryInterval: TimeInterval = 3
|
||
|
||
// var ivAadManager:MTGNewInterstitialAdManager!
|
||
var bidToken:String?
|
||
var ecpmprice:Double?
|
||
var newInterstitialAdManager:MTGNewInterstitialBidAdManager?
|
||
|
||
|
||
var idstring:String = "n66bdc1e78a5d9"
|
||
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
|
||
requestPhotoLibraryPermission()
|
||
|
||
// 初始化 Remote Config
|
||
remoteConfig = RemoteConfig.remoteConfig()
|
||
|
||
|
||
self.idstring = getRandomString() ?? "n66bdc1e78a5d9"
|
||
// 设置最小获取间隔(开发期间可以设置较小的值)
|
||
let settings = RemoteConfigSettings()
|
||
settings.minimumFetchInterval = 0
|
||
remoteConfig.configSettings = settings
|
||
// Fetch 配置值
|
||
remoteConfig.setDefaults(fromPlist: "isopen")
|
||
|
||
|
||
self.resourceLabel.isHidden = false
|
||
activityView.center = CGPoint(x: self.view.center.x + 10, y: self.view.bounds.size.height - 100 )
|
||
// 停止后,隐藏菊花
|
||
activityView.hidesWhenStopped = true
|
||
activityView.color = .black;
|
||
activityView.style = UIActivityIndicatorView.Style.whiteLarge
|
||
|
||
self.view.addSubview(activityView)
|
||
|
||
self.activityView.startAnimating()
|
||
|
||
|
||
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 3) {
|
||
self.loadTopAD()
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
func loadTopAD(){
|
||
let extra: [String: Any] = [
|
||
kATAdLoadingExtraMediaExtraKey: "custom_values"
|
||
]
|
||
ATAdManager.shared().loadAD(withPlacementID: self.idstring, extra: extra, delegate: self)
|
||
self.fetchRemoteConfig()
|
||
|
||
}
|
||
|
||
|
||
|
||
override func viewWillAppear(_ animated: Bool) {
|
||
super.viewWillAppear(animated)
|
||
self.retryBtn.isHidden = true
|
||
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
|
||
// 请求跟踪授权
|
||
requestTrackingAuthorization { idfa in
|
||
if let idfa = idfa {
|
||
print("IDFA: \(idfa)")
|
||
StartManager.shared.idfaid = idfa
|
||
print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")")
|
||
} else {
|
||
print("IDFA is not available or tracking authorization denied.")
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
override func viewDidAppear(_ animated: Bool) {
|
||
super.viewDidAppear(animated)
|
||
|
||
|
||
DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
|
||
// 请求跟踪授权
|
||
requestTrackingAuthorization { idfa in
|
||
if let idfa = idfa {
|
||
print("IDFA: \(idfa)")
|
||
StartManager.shared.idfaid = idfa
|
||
print("Stored IDFA: \(StartManager.shared.idfaid ?? "N/A")")
|
||
} else {
|
||
print("IDFA is not available or tracking authorization denied.")
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
func fetchRemoteConfig() {
|
||
let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0"
|
||
print("version ------- \(localVersion)")
|
||
|
||
remoteConfig.fetch { [weak self] (status, error) in
|
||
guard let self = self else { return }
|
||
|
||
if status == .success {
|
||
self.retryAttempts = 0
|
||
print("Config fetched!")
|
||
self.remoteConfig.activate { changed, error in
|
||
if error == nil {
|
||
let js = self.remoteConfig.configValue(forKey: "isopen").jsonValue as! [String: Any]
|
||
let valueopen = js["isadopen"] as! Bool
|
||
let valueversion = js["version"] as! String
|
||
let tt = UserDefaults.standard
|
||
print("-------\(tt.bool(forKey: "iswindows"))")
|
||
DispatchQueue.main.async {
|
||
if valueversion == localVersion {
|
||
let userDefaults = UserDefaults.standard
|
||
if userDefaults.bool(forKey: "iswindows"){
|
||
|
||
let appDelegate = UIApplication.shared.delegate
|
||
appDelegate?.window??.rootViewController = WA_RootNAV(rootViewController: WA_playerVC())
|
||
}else{
|
||
|
||
|
||
WA_TabbarCommon.TabBarController()
|
||
}
|
||
StartManager.shared.superHero = false
|
||
} else {
|
||
if valueopen {
|
||
// self.newInterstitialAdManager?.loadAd(withBidToken:self.bidToken!)
|
||
self.startAdCheck()
|
||
StartManager.shared.superHero = true
|
||
} else {
|
||
let userDefaults = UserDefaults.standard
|
||
if userDefaults.bool(forKey: "iswindows"){
|
||
let appDelegate = UIApplication.shared.delegate
|
||
appDelegate?.window??.rootViewController = WA_RootNAV(rootViewController: WA_playerVC())
|
||
}else{
|
||
|
||
|
||
|
||
WA_TabbarCommon.TabBarController()
|
||
}
|
||
StartManager.shared.superHero = false
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
} else {
|
||
print("Config not fetched")
|
||
|
||
if let error = error {
|
||
print("Error: \(error.localizedDescription)")
|
||
}
|
||
|
||
self.retryAttempts += 1
|
||
if self.retryAttempts <= self.maxRetryAttempts {
|
||
// 取消之前的定时器
|
||
self.retryTimer?.invalidate()
|
||
// 启动新的定时器
|
||
self.retryTimer = Timer.scheduledTimer(withTimeInterval: self.retryInterval, repeats: false) { [weak self] _ in
|
||
self?.fetchRemoteConfig()
|
||
}
|
||
} else {
|
||
print("Max retry attempts reached. Stopping retries.")
|
||
let userDefaults = UserDefaults.standard
|
||
if userDefaults.bool(forKey: "iswindows"){
|
||
let appDelegate = UIApplication.shared.delegate
|
||
appDelegate?.window??.rootViewController = WA_RootNAV(rootViewController: WA_playerVC())
|
||
}else{
|
||
|
||
|
||
WA_TabbarCommon.TabBarController()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// /定时加载
|
||
func startAdCheck() {
|
||
// createInterstitialAd()
|
||
// newInterstitialAdManager?.loadAd(withBidToken:self.bidToken!)
|
||
|
||
adCheckStartTime = Date()
|
||
adCheckTimer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(checkAdStatus), userInfo: nil, repeats: true)
|
||
}
|
||
|
||
@objc func checkAdStatus() {
|
||
let elapsedTime = Date().timeIntervalSince(adCheckStartTime!)
|
||
let elapsedTimeInMilliseconds = Int(elapsedTime * 1000)
|
||
// self.newInterstitialAdManager?.loadAd(withBidToken:self.bidToken!)
|
||
// let issureready = newInterstitialAdManager!.isAdReady()
|
||
if ATAdManager.shared().interstitialReady(forPlacementID: self.idstring)
|
||
{
|
||
ATAdManager.shared().showInterstitial(withPlacementID: self.idstring, in: self, delegate: self)
|
||
adLoadTime = elapsedTimeInMilliseconds // 记录加载
|
||
adCheckTimer?.invalidate()
|
||
self.activityView.stopAnimating()
|
||
if StartManager.shared.idfaid == ""{
|
||
self.fetchIDFAUntilSuccess()
|
||
}else{
|
||
setPostSHOW()
|
||
StartManager.shared.shelfNumber = "开屏show"
|
||
}
|
||
}else if elapsedTimeInMilliseconds >= 10000{
|
||
adCheckTimer?.invalidate()
|
||
let userDefaults = UserDefaults.standard
|
||
if userDefaults.bool(forKey: "iswindows"){
|
||
let appDelegate = UIApplication.shared.delegate
|
||
appDelegate?.window??.rootViewController = WA_RootNAV(rootViewController: WA_playerVC())
|
||
}else{
|
||
|
||
|
||
WA_TabbarCommon.TabBarController()
|
||
}
|
||
Analytics.logEvent("open_load_fail", parameters: nil)
|
||
self.activityView.stopAnimating()
|
||
}else{
|
||
print("广告未准备好,继续检查...")
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
///获取相册权限
|
||
func requestPhotoLibraryPermission() {
|
||
|
||
// 检查相册权限状态
|
||
let status = PHPhotoLibrary.authorizationStatus()
|
||
// 根据权限状态进行处理
|
||
switch status {
|
||
case .authorized:
|
||
// 用户已授权访问相册
|
||
print("相册权限已授权")
|
||
case .denied, .restricted:
|
||
// 用户已拒绝访问相册或权限受限
|
||
print("相册权限已拒绝或受限,请在设置中开启权限")
|
||
case .notDetermined:
|
||
// 用户尚未作出选择,请求相册权限
|
||
PHPhotoLibrary.requestAuthorization { [weak self] (newStatus) in
|
||
DispatchQueue.main.async {
|
||
if newStatus == .authorized {
|
||
// 用户授权访问相册
|
||
print("用户已授权访问相册")
|
||
} else {
|
||
// 用户未授权访问相册
|
||
print("用户未授权访问相册")
|
||
}
|
||
}
|
||
}
|
||
@unknown default:
|
||
// 处理未知权限状态
|
||
print("未知的相册权限状态")
|
||
}
|
||
}
|
||
|
||
|
||
func fetchIDFAUntilSuccess() {
|
||
DispatchQueue.global(qos: .background).async {
|
||
var idfaObtained = false
|
||
|
||
while !idfaObtained {
|
||
let semaphore = DispatchSemaphore(value: 0)
|
||
|
||
requestIDFA { idfa in
|
||
if let idfa = idfa {
|
||
print("Got IDFA: \(idfa)")
|
||
// 执行成功获取 IDFA 后的处理方法
|
||
// self.performActionWithIDFA(idfa)
|
||
StartManager.shared.idfaid = idfa
|
||
// self.setPostSHOW()
|
||
idfaObtained = true
|
||
} else {
|
||
print("Failed to get IDFA, retrying...")
|
||
DispatchQueue.global(qos: .background).asyncAfter(deadline: .now() + 1.0) {
|
||
semaphore.signal()
|
||
}
|
||
}
|
||
}
|
||
|
||
semaphore.wait()
|
||
}
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
extension WA_limitsVCViewController:ATInterstitialDelegate{
|
||
func didFinishLoadingAD(withPlacementID placementID: String!) {
|
||
print("----")
|
||
}
|
||
|
||
|
||
// 插页广告展示成功
|
||
func interstitialDidShow(forPlacementID placementID: String, extra: [AnyHashable : Any]) {
|
||
|
||
print("----成功")
|
||
|
||
}
|
||
|
||
/// 插页广告被点击
|
||
func interstitialDidClick(forPlacementID placementID: String, extra: [AnyHashable : Any]) {
|
||
print("----点击")
|
||
}
|
||
// 插页广告已关闭
|
||
func interstitialDidClose(forPlacementID placementID: String, extra: [AnyHashable : Any]) {
|
||
print("----关闭")
|
||
|
||
WA_TabbarCommon.TabBarController()
|
||
}
|
||
// 完成加载广告
|
||
func didFinishLoadingADSource(withPlacementID placementID: String!,extra: [AnyHashable : Any]?) {
|
||
|
||
let networkID = extra?["network_firm_id"]
|
||
|
||
let ecpm = extra?["adsource_price"]
|
||
|
||
let country = extra?["country"]
|
||
|
||
|
||
if let adsourcePriceString = extra?["adsource_price"] as? String,
|
||
let adsourcePrice = Double(adsourcePriceString) {
|
||
StartManager.shared.ecpm = Float(adsourcePrice) / 1000
|
||
print("-----ecpm ID: \(StartManager.shared.ecpm)")
|
||
} else {
|
||
print("无法获取 adsource_price 或类型不匹配")
|
||
}
|
||
|
||
StartManager.shared.countryCode = country as? String
|
||
StartManager.shared.network = network(networkID as! Int)
|
||
StartManager.shared.shelfNumber = "开屏load"
|
||
StartManager.shared.adId = self.idstring
|
||
setPostload()
|
||
|
||
|
||
|
||
|
||
|
||
print("ATInterstitialViewController::didFailToLoadADWithPlacementID:\(placementID)")
|
||
|
||
}
|
||
|
||
// load失败
|
||
func didFailToLoadAD(withPlacementID placementID: String!, error: (any Error)!) {
|
||
print("----load失败")
|
||
print("ATInterstitialViewController::didFailToLoadADWithPlacementID:\(String(describing: placementID))---error\(String(describing: error))")
|
||
|
||
}
|
||
}
|