Day_Count_Memory_Days/anniversary_Project/Main/AV_LaunchLimitesVC.swift
2024-07-23 11:43:51 +08:00

367 lines
14 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// AV_LaunchLimitesVC.swift
// anniversary_Project
//
// Created by 16 on 2024/7/11.
//
import UIKit
import SVProgressHUD
import Photos
import Alamofire
import AppLovinSDK
//import FirebaseAnalytics
import FirebaseRemoteConfig
class AV_LaunchLimitesVC: AV_RootVC {
let activityView = UIActivityIndicatorView()
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
override func viewDidLoad() {
super.viewDidLoad()
remoteConfig = RemoteConfig.remoteConfig()
//
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 0
remoteConfig.configSettings = settings
// Fetch
remoteConfig.setDefaults(fromPlist: "isopen")
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()
fetchRemoteConfig()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.isHidden = true
// createInterstitialAd()
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 {
let appDelegate = UIApplication.shared.delegate
appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC())
StartManager.shared.superHero = false
} else {
if valueopen {
self.startAdCheck()
StartManager.shared.superHero = true
} else {
let appDelegate = UIApplication.shared.delegate
appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC())
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 appDelegate = UIApplication.shared.delegate
appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC())
}
}
}
}
///
func startAdCheck() {
createInterstitialAd()
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)
if interstitialAd.isReady {
interstitialAd.show()
adLoadTime = elapsedTimeInMilliseconds //
adCheckTimer?.invalidate()
self.activityView.stopAnimating()
if StartManager.shared.idfaid == ""{
self.fetchIDFAUntilSuccess()
}else{
self.setPostSHOW()
}
} else if elapsedTimeInMilliseconds >= 10000 { // 10000 = 10
adCheckTimer?.invalidate()
let appDelegate = UIApplication.shared.delegate
appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC())
self.activityView.stopAnimating()
} else {
print("广告未准备好,继续检查...")
}
}
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.countdown.day.daycount",
"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.countdown.day.daycount",
"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 AV_LaunchLimitesVC: MAAdDelegate
{
func createInterstitialAd() {
let randomString = getRandomString()
if StartManager.shared.adId == nil{
StartManager.shared.adId = randomString ?? "bee9f7039e56cc7a"
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
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()
let appDelegate = UIApplication.shared.delegate
appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC())
}
/// 广
func didFail(toDisplay ad: MAAd, withError error: MAError) {
// 广广
interstitialAd.load()
}
}