584 lines
21 KiB
Swift
584 lines
21 KiB
Swift
//
|
||
// WA_limitsVCViewController.swift
|
||
// wallpaper_project
|
||
//
|
||
// Created by 忆海16 on 2024/3/18.
|
||
//
|
||
|
||
import UIKit
|
||
import SVProgressHUD
|
||
import Photos
|
||
import Alamofire
|
||
import AppLovinSDK
|
||
import FirebaseAnalytics
|
||
import FirebaseRemoteConfig
|
||
import MTGSDKNewInterstitial
|
||
import MTGSDKBidding
|
||
import MTGSDK
|
||
|
||
|
||
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 newInterstitialAdManager:MTGNewInterstitialBidAdManager?
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
|
||
requestPhotoLibraryPermission()
|
||
|
||
// 初始化 Remote Config
|
||
remoteConfig = RemoteConfig.remoteConfig()
|
||
|
||
|
||
|
||
// 设置最小获取间隔(开发期间可以设置较小的值)
|
||
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()
|
||
let param = MTGBiddingRequestParameter(placementId: "1638986", unitId: "3504682", basePrice: nil)
|
||
|
||
MTGBiddingRequest.getBidWith(param) { bidResponse in
|
||
if bidResponse.success{
|
||
self.bidToken = bidResponse.bidToken
|
||
bidResponse.notifyWin()
|
||
self.newInterstitialAdManager = MTGNewInterstitialBidAdManager(placementId: "1638986", unitId: "3504682", delegate: self)
|
||
self.newInterstitialAdManager?.loadAd(withBidToken:self.bidToken!)
|
||
self.fetchRemoteConfig()
|
||
|
||
}else{
|
||
WA_TabbarCommon.TabBarController()
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
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)
|
||
|
||
if UserDefaults.standard.object(forKey: "iswindows") != nil {
|
||
if UserDefaults.standard.bool(forKey: "iswindows") {
|
||
AppDelegate.shared.showOverlayWindow()
|
||
} else {
|
||
UserDefaults.standard.set(false, forKey: "iswindows")
|
||
}
|
||
} else {
|
||
UserDefaults.standard.set(false, forKey: "iswindows")
|
||
}
|
||
|
||
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
|
||
|
||
DispatchQueue.main.async {
|
||
if valueversion == localVersion {
|
||
WA_TabbarCommon.TabBarController()
|
||
StartManager.shared.superHero = false
|
||
} else {
|
||
if valueopen {
|
||
// self.newInterstitialAdManager?.loadAd(withBidToken:self.bidToken!)
|
||
self.startAdCheck()
|
||
StartManager.shared.superHero = true
|
||
} 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.")
|
||
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 issureready {
|
||
// interstitialAd.show()
|
||
newInterstitialAdManager?.show(from: self)
|
||
Analytics.logEvent("open_load_success", parameters: nil)
|
||
adLoadTime = elapsedTimeInMilliseconds // 记录加载
|
||
adCheckTimer?.invalidate()
|
||
self.activityView.stopAnimating()
|
||
// if StartManager.shared.idfaid == ""{
|
||
// self.fetchIDFAUntilSuccess()
|
||
// }else{
|
||
// self.setPostSHOW()
|
||
// }
|
||
} else if elapsedTimeInMilliseconds >= 10000 { // 10000 毫秒 = 10 秒
|
||
adCheckTimer?.invalidate()
|
||
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 stopListeningNetwork() {
|
||
// NetworkReachabilityManager.default?.stopListening()
|
||
// }
|
||
|
||
|
||
|
||
|
||
|
||
|
||
// func setPostload(){
|
||
// let url = "http://111.9.47.226:38080/top_selection/save_ad_load_log"
|
||
// let parameters:[String : Any] = [
|
||
// "deviceId": StartManager.shared.devicID ?? "",
|
||
// "localIp": StartManager.shared.localIP ?? "",
|
||
// "remoteIp": StartManager.shared.publicIP ?? "",
|
||
// "linkId": "",
|
||
// "packageName": "com.wallpapaer.hd.live.app",
|
||
// "gaid": StartManager.shared.idfaid ?? "",
|
||
// "dataId": "",
|
||
// "shelfNumber":"开屏加载",
|
||
// "succeed": StartManager.shared.succeed,
|
||
// "loadTime":StartManager.shared.loadTime ?? "",
|
||
// "adPlatform": StartManager.shared.adPlatform ?? "",
|
||
// "countryCode": StartManager.shared.countryCode ?? "",
|
||
// "adId": StartManager.shared.adId ?? "",
|
||
// "platformResponseTime": StartManager.shared.platformResponseTime ?? "",
|
||
// "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "",
|
||
// "ecpm": StartManager.shared.ecpm ?? "",
|
||
// "dsp": StartManager.shared.dsp ?? "",
|
||
// "network": StartManager.shared.network ?? "",
|
||
// "showStatus": 0,
|
||
// "washParam": true,
|
||
// ]
|
||
//
|
||
//
|
||
// let headers: HTTPHeaders = [
|
||
// "Content-Type": "application/json"
|
||
// ]
|
||
//
|
||
// NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in
|
||
// switch result {
|
||
// case .success(let data):
|
||
// print("Response:--- \(data)")
|
||
// case .failure(let error):
|
||
// print("Error:--- \(error)")
|
||
// }
|
||
// }
|
||
//
|
||
// }
|
||
//
|
||
//
|
||
// func setPostSHOW(){
|
||
// let url = "http://111.9.47.226:38080/top_selection/save_ad_show_log"
|
||
// let parameters:[String : Any] = [
|
||
// "deviceId": StartManager.shared.devicID ?? "",
|
||
// "localIp": StartManager.shared.localIP ?? "",
|
||
// "remoteIp": StartManager.shared.publicIP ?? "",
|
||
// "linkId": "",
|
||
// "packageName": "com.wallpapaer.hd.live.app",
|
||
// "gaid": StartManager.shared.idfaid ?? "",
|
||
// "dataId": "",
|
||
// "shelfNumber":"开屏展示",
|
||
// "succeed": StartManager.shared.succeed,
|
||
// "loadTime":StartManager.shared.loadTime ?? "",
|
||
// "adPlatform": StartManager.shared.adPlatform ?? "",
|
||
// "countryCode": StartManager.shared.countryCode ?? "",
|
||
// "adId": StartManager.shared.adId ?? "",
|
||
// "platformResponseTime": StartManager.shared.platformResponseTime ?? "",
|
||
// "getIpResponseTime": StartManager.shared.getIpResponseTime ?? "",
|
||
// "ecpm": StartManager.shared.ecpm ?? "",
|
||
// "dsp": StartManager.shared.dsp ?? "",
|
||
// "network": StartManager.shared.network ?? "",
|
||
// ]
|
||
//
|
||
// let headers: HTTPHeaders = [
|
||
// "Content-Type": "application/json"
|
||
// ]
|
||
//
|
||
// NetworkManager.shared.postRequest(url: url, parameters: parameters, headers: headers) { result in
|
||
// switch result {
|
||
// case .success(let data):
|
||
// print("Response:--- \(data)")
|
||
// case .failure(let error):
|
||
// print("Error:--- \(error)")
|
||
// }
|
||
// }
|
||
//
|
||
// }
|
||
//
|
||
//
|
||
// 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:MTGNewInterstitialBidAdDelegate{
|
||
|
||
// func newInterstitialBidAdShowSuccess(_ adManager: MTGNewInterstitialBidAdManager) {
|
||
// print("广告展示成功")
|
||
// }
|
||
|
||
func newInterstitialBidAdResourceLoadSuccess(_ adManager: MTGNewInterstitialBidAdManager) {
|
||
print("资源加载成功,表示可播放状态")
|
||
}
|
||
|
||
func newInterstitialBidAdLoadSuccess(_ adManager: MTGNewInterstitialBidAdManager) {
|
||
print("广告加载成功")
|
||
}
|
||
|
||
|
||
func newInterstitialBidAdLoadFail(_ error: any Error, adManager: MTGNewInterstitialBidAdManager) {
|
||
|
||
print("-----\(error)")
|
||
// print(" 广告加载失败")
|
||
}
|
||
|
||
func newInterstitialBidAdShowSuccess(withBidToken bidToken: String, adManager: MTGNewInterstitialBidAdManager) {
|
||
|
||
print("广告展示成功")
|
||
}
|
||
|
||
|
||
func newInterstitialBidAdShowFail(_ error: any Error, adManager: MTGNewInterstitialBidAdManager) {
|
||
print("广告展示失败")
|
||
}
|
||
|
||
func newInterstitialBidAdPlayCompleted(_ adManager: MTGNewInterstitialBidAdManager) {
|
||
|
||
print("广告播放完全播放回调")
|
||
}
|
||
|
||
|
||
func newInterstitialBidAdEndCardShowSuccess(_ adManager: MTGNewInterstitialBidAdManager) {
|
||
print("视频播放完成后展示结果页")
|
||
}
|
||
|
||
func newInterstitialBidAdClicked(_ adManager: MTGNewInterstitialBidAdManager) {
|
||
|
||
print("广告被点击")
|
||
}
|
||
|
||
// 广告被关闭
|
||
func newInterstitialBidAdDidClosed(_ adManager: MTGNewInterstitialBidAdManager) {
|
||
// print("广告被关闭")
|
||
WA_TabbarCommon.TabBarController()
|
||
}
|
||
|
||
//
|
||
// /**
|
||
// * 在取消展示广告后并将控件返回到您的应用时调用
|
||
// * @param converted - 视频是否播放完整
|
||
// */
|
||
// func newInterstitialAdDismissed(withConverted converted: Bool, adManager: MTGNewInterstitialAdManager) {
|
||
//// log(NSStringFromSelector(#function))
|
||
// }
|
||
//
|
||
// // 广告被关闭
|
||
// func newInterstitialAdDidClosed(_ adManager: MTGNewInterstitialAdManager) {
|
||
//// log(NSStringFromSelector(#function))
|
||
// }
|
||
//
|
||
// /**
|
||
// * 如果设置了插屏奖励,您将收到此回调
|
||
// * @param rewardedOrNot 是否达到了可奖励状态
|
||
// * @param alertWindowStatus 支持的类型列表
|
||
// * 注意:您可以根据该回调决定是否给予奖励
|
||
// */
|
||
// func newInterstitialAdRewarded(_ rewardedOrNot: Bool, alertWindowStatus: MTGNIAlertWindowStatus, adManager: MTGNewInterstitialAdManager) {
|
||
//// log(NSStringFromSelector(#function))
|
||
// }
|
||
|
||
}
|
||
|
||
|
||
//extension WA_limitsVCViewController: MAAdDelegate
|
||
//{
|
||
// func createInterstitialAd() {
|
||
//
|
||
// let randomString = getRandomString()
|
||
//
|
||
// if StartManager.shared.adId == nil{
|
||
// StartManager.shared.adId = randomString ?? "789b377f3ac14010e"
|
||
// interstitialAd = MAInterstitialAd(adUnitIdentifier: StartManager.shared.adId!)
|
||
// print("adid-----\(StartManager.shared.adId ?? "gggg")")
|
||
// }else{
|
||
// interstitialAd = MAInterstitialAd(adUnitIdentifier: StartManager.shared.adId!)
|
||
// print("adid-----\(StartManager.shared.adId ?? "gggg")")
|
||
// }
|
||
//
|
||
// interstitialAd.delegate = self
|
||
// self.idad = randomString
|
||
//
|
||
// // Load the first ad
|
||
// interstitialAd.load()
|
||
// }
|
||
//
|
||
//
|
||
// // MARK: MAAdDelegate Protocol
|
||
//
|
||
// /// 当广告加载成功时调用的方法
|
||
// func didLoad(_ ad: MAAd) {
|
||
// // 重试尝试次数重置为0
|
||
// retryAttempt = 0
|
||
// // 记录广告加载成功的相关信息
|
||
// // StartManager.shared.shelfNumber = "开屏加载"
|
||
// StartManager.shared.succeed = true
|
||
// StartManager.shared.loadTime = self.adLoadTime
|
||
// StartManager.shared.adPlatform = "MAX"
|
||
// StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode
|
||
// StartManager.shared.adId = self.idad
|
||
// StartManager.shared.platformResponseTime = ad.requestLatency
|
||
// StartManager.shared.ecpm = Float(ad.revenue)
|
||
// StartManager.shared.dsp = ad.dspName
|
||
// StartManager.shared.network = ad.networkName
|
||
//
|
||
// let logMessage = """
|
||
// deviceId: \(StartManager.shared.devicID ?? "")
|
||
// localIp: \(StartManager.shared.localIP ?? "")
|
||
// "remoteIp": \(StartManager.shared.publicIP ?? ""),
|
||
// "linkId": "",
|
||
// "packageName": "com.wallpapaer.hd.live.app",
|
||
// "gaid": \(StartManager.shared.idfaid ?? ""),
|
||
// "dataId": "",
|
||
// "shelfNumber": "开屏展示",
|
||
// "succeed": \(StartManager.shared.succeed),
|
||
// "loadTime": \(StartManager.shared.loadTime ?? 0),
|
||
// "adPlatform": \(StartManager.shared.adPlatform ?? ""),
|
||
// "countryCode": \(StartManager.shared.countryCode ?? ""),
|
||
// "adId": \(StartManager.shared.adId ?? ""),
|
||
// "platformResponseTime": \(StartManager.shared.platformResponseTime ?? 0.0),
|
||
// "getIpResponseTime": \(StartManager.shared.getIpResponseTime ?? 0.0),
|
||
// "ecpm": \(StartManager.shared.ecpm ?? 0.0),
|
||
// "dsp": \(StartManager.shared.dsp ?? ""),
|
||
// "network": \(StartManager.shared.network ?? "")
|
||
// """
|
||
//
|
||
// AppDelegate.shared.addLogMessage(logMessage)
|
||
//
|
||
// self.setPostload()
|
||
//
|
||
// }
|
||
//
|
||
// /// 当广告加载失败时调用的方法
|
||
// func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) {
|
||
// // 广告加载失败,建议进行重试
|
||
// // 使用指数递增的延迟时间进行重试,最大延迟时间为 64 秒
|
||
// retryAttempt += 1
|
||
// let delaySec = pow(2.0, min(6.0, retryAttempt))
|
||
// DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) {
|
||
// self.interstitialAd.load()
|
||
// }
|
||
// }
|
||
//
|
||
// /// 当广告显示时调用的方法
|
||
// func didDisplay(_ ad: MAAd) {
|
||
// // 暂停您的应用的背景音频
|
||
// }
|
||
//
|
||
// /// 当用户点击广告时调用的方法
|
||
// func didClick(_ ad: MAAd) {
|
||
// // 用户点击广告
|
||
// }
|
||
//
|
||
// /// 当广告隐藏时调用的方法
|
||
// func didHide(_ ad: MAAd) {
|
||
// // 恢复您的应用的背景音频
|
||
// // 广告隐藏后,预加载下一个广告
|
||
// interstitialAd.load()
|
||
// WA_TabbarCommon.TabBarController()
|
||
// }
|
||
//
|
||
//
|
||
// /// 当广告无法显示时调用的方法
|
||
// func didFail(toDisplay ad: MAAd, withError error: MAError) {
|
||
// // 广告无法显示,建议加载下一个广告
|
||
// interstitialAd.load()
|
||
// }
|
||
//
|
||
//
|
||
//
|
||
//
|
||
//}
|
||
|