From 49cc5b5417cf25f5df75a765a7653c8a96477097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BF=86=E6=B5=B716?= <> Date: Tue, 23 Jul 2024 11:43:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=96=9D=E6=B0=B4=E5=92=8CMA?= =?UTF-8?q?X=E5=B9=BF=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- anniversary_Project.xcodeproj/project.pbxproj | 60 +++- anniversary_Project/AppDelegate.swift | 32 +- .../Guidepages/C/AV_TemperatureVC.swift | 7 +- .../Guidepages/C/AV_selectWeightVC.swift | 4 +- .../waterC/AV_WaterSettingVC.swift | 33 ++ .../Drink_water/waterC/AV_WaterSettingVC.xib | 42 +++ .../Main/AV_LaunchLimitesVC.swift | 3 +- .../Player/AV_AddPlayerVC.swift | 236 +++++++++++++ anniversary_Project/Player/AV_AddPlayerVC.xib | 312 ++++++++++++++++++ .../Player/AV_EditPlayerVC.swift | 207 ++++++++++++ .../Player/AV_EditPlayerVC.xib | 108 ++++++ .../Player/AV_MinePlayerVC.swift | 209 ++++++++++++ .../Player/AV_MinePlayerVC.xib | 160 +++++++++ .../Player/AV_RootPlayerVC.swift | 287 ++++++++++++++++ .../Player/AV_RootPlayerVC.xib | 113 +++++++ .../Player/AV_WaterKeyBordPlayerVC.swift | 271 +++++++++++++++ .../Player/AV_WaterKeyBordPlayerVC.xib | 98 ++++++ anniversary_Project/Tool/NetworkManager.swift | 24 +- anniversary_Project/Tool/color.swift | 1 + anniversary_Project/Tool/ip+idfa+ADID.swift | 31 ++ 20 files changed, 2218 insertions(+), 20 deletions(-) create mode 100644 anniversary_Project/Player/AV_AddPlayerVC.swift create mode 100644 anniversary_Project/Player/AV_AddPlayerVC.xib create mode 100644 anniversary_Project/Player/AV_EditPlayerVC.swift create mode 100644 anniversary_Project/Player/AV_EditPlayerVC.xib create mode 100644 anniversary_Project/Player/AV_MinePlayerVC.swift create mode 100644 anniversary_Project/Player/AV_MinePlayerVC.xib create mode 100644 anniversary_Project/Player/AV_RootPlayerVC.swift create mode 100644 anniversary_Project/Player/AV_RootPlayerVC.xib create mode 100644 anniversary_Project/Player/AV_WaterKeyBordPlayerVC.swift create mode 100644 anniversary_Project/Player/AV_WaterKeyBordPlayerVC.xib diff --git a/anniversary_Project.xcodeproj/project.pbxproj b/anniversary_Project.xcodeproj/project.pbxproj index 601cff6..7d94576 100644 --- a/anniversary_Project.xcodeproj/project.pbxproj +++ b/anniversary_Project.xcodeproj/project.pbxproj @@ -74,6 +74,16 @@ 75C4E0B92C367EAE00B4C170 /* AV_WaterCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C4E0B62C367EAE00B4C170 /* AV_WaterCell.swift */; }; 75C4E0BC2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75C4E0BB2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib */; }; 75C4E0BD2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C4E0BA2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift */; }; + 75F3F3D22C4CE23200005A7E /* AV_RootPlayerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F3F3D02C4CE23200005A7E /* AV_RootPlayerVC.swift */; }; + 75F3F3D32C4CE23200005A7E /* AV_RootPlayerVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75F3F3D12C4CE23200005A7E /* AV_RootPlayerVC.xib */; }; + 75F3F3D62C4CE32000005A7E /* AV_AddPlayerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F3F3D42C4CE32000005A7E /* AV_AddPlayerVC.swift */; }; + 75F3F3D72C4CE32000005A7E /* AV_AddPlayerVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75F3F3D52C4CE32000005A7E /* AV_AddPlayerVC.xib */; }; + 75F3F3DA2C4CE5F600005A7E /* AV_MinePlayerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F3F3D82C4CE5F600005A7E /* AV_MinePlayerVC.swift */; }; + 75F3F3DB2C4CE5F600005A7E /* AV_MinePlayerVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75F3F3D92C4CE5F600005A7E /* AV_MinePlayerVC.xib */; }; + 75F3F3DE2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F3F3DC2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.swift */; }; + 75F3F3DF2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75F3F3DD2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.xib */; }; + 75F3F3E22C4CE81800005A7E /* AV_EditPlayerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F3F3E02C4CE81800005A7E /* AV_EditPlayerVC.swift */; }; + 75F3F3E32C4CE81800005A7E /* AV_EditPlayerVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75F3F3E12C4CE81800005A7E /* AV_EditPlayerVC.xib */; }; 75FAEF2E2C3E5D9800298C7D /* CircularProgressBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FAEF2D2C3E5D9700298C7D /* CircularProgressBarView.swift */; }; 75FAEF312C3E735800298C7D /* HealthManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FAEF302C3E735800298C7D /* HealthManager.swift */; }; 75FAEF342C3E8D7400298C7D /* AV_NoneCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75FAEF322C3E8D7400298C7D /* AV_NoneCell.swift */; }; @@ -180,6 +190,16 @@ 75C4E0B72C367EAE00B4C170 /* AV_WaterCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_WaterCell.xib; sourceTree = ""; }; 75C4E0BA2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_AddWaterCollectionViewCell.swift; sourceTree = ""; }; 75C4E0BB2C3681A400B4C170 /* AV_AddWaterCollectionViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_AddWaterCollectionViewCell.xib; sourceTree = ""; }; + 75F3F3D02C4CE23200005A7E /* AV_RootPlayerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_RootPlayerVC.swift; sourceTree = ""; }; + 75F3F3D12C4CE23200005A7E /* AV_RootPlayerVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_RootPlayerVC.xib; sourceTree = ""; }; + 75F3F3D42C4CE32000005A7E /* AV_AddPlayerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_AddPlayerVC.swift; sourceTree = ""; }; + 75F3F3D52C4CE32000005A7E /* AV_AddPlayerVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_AddPlayerVC.xib; sourceTree = ""; }; + 75F3F3D82C4CE5F600005A7E /* AV_MinePlayerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_MinePlayerVC.swift; sourceTree = ""; }; + 75F3F3D92C4CE5F600005A7E /* AV_MinePlayerVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_MinePlayerVC.xib; sourceTree = ""; }; + 75F3F3DC2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_WaterKeyBordPlayerVC.swift; sourceTree = ""; }; + 75F3F3DD2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_WaterKeyBordPlayerVC.xib; sourceTree = ""; }; + 75F3F3E02C4CE81800005A7E /* AV_EditPlayerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AV_EditPlayerVC.swift; sourceTree = ""; }; + 75F3F3E12C4CE81800005A7E /* AV_EditPlayerVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AV_EditPlayerVC.xib; sourceTree = ""; }; 75FAEF2D2C3E5D9700298C7D /* CircularProgressBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularProgressBarView.swift; sourceTree = ""; }; 75FAEF2F2C3E723A00298C7D /* anniversary_Project.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = anniversary_Project.entitlements; sourceTree = ""; }; 75FAEF302C3E735800298C7D /* HealthManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthManager.swift; sourceTree = ""; }; @@ -294,6 +314,13 @@ path = V; sourceTree = ""; }; + 75B426902C4DF69C001844C2 /* NetWork */ = { + isa = PBXGroup; + children = ( + ); + path = NetWork; + sourceTree = ""; + }; 75C0A1252BC787A400AB0094 = { isa = PBXGroup; children = ( @@ -319,6 +346,7 @@ 75C0A1302BC787A400AB0094 /* anniversary_Project */ = { isa = PBXGroup; children = ( + 75F3F3CE2C4CE20F00005A7E /* Player */, 755073C22C3F7FC200ADFD6B /* GoogleService-Info.plist */, 75FAEF2F2C3E723A00298C7D /* anniversary_Project.entitlements */, 7596165F2C35242200363C46 /* Guidepages */, @@ -414,6 +442,7 @@ 75C0A1742BC78F2500AB0094 /* Tool */ = { isa = PBXGroup; children = ( + 75B426902C4DF69C001844C2 /* NetWork */, 753C25A12C3BF4A1006E2660 /* MLSliderRulerScrollView.swift */, 753C25A02C3BF4A1006E2660 /* MLSliderRulerView.swift */, 753C25902C3BBA9D006E2660 /* AV_WaveView.swift */, @@ -499,6 +528,23 @@ path = waterV; sourceTree = ""; }; + 75F3F3CE2C4CE20F00005A7E /* Player */ = { + isa = PBXGroup; + children = ( + 75F3F3D02C4CE23200005A7E /* AV_RootPlayerVC.swift */, + 75F3F3D12C4CE23200005A7E /* AV_RootPlayerVC.xib */, + 75F3F3D42C4CE32000005A7E /* AV_AddPlayerVC.swift */, + 75F3F3D52C4CE32000005A7E /* AV_AddPlayerVC.xib */, + 75F3F3D82C4CE5F600005A7E /* AV_MinePlayerVC.swift */, + 75F3F3D92C4CE5F600005A7E /* AV_MinePlayerVC.xib */, + 75F3F3DC2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.swift */, + 75F3F3DD2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.xib */, + 75F3F3E02C4CE81800005A7E /* AV_EditPlayerVC.swift */, + 75F3F3E12C4CE81800005A7E /* AV_EditPlayerVC.xib */, + ); + path = Player; + sourceTree = ""; + }; 75FDC0B02BCE1C56005B3D13 /* V */ = { isa = PBXGroup; children = ( @@ -632,6 +678,8 @@ 755073C72C3F81B400ADFD6B /* AV_LaunchLimitesVC.xib in Resources */, 755073C32C3F7FC200ADFD6B /* GoogleService-Info.plist in Resources */, 759616752C353BEF00363C46 /* AV_SportsCell.xib in Resources */, + 75F3F3D32C4CE23200005A7E /* AV_RootPlayerVC.xib in Resources */, + 75F3F3D72C4CE32000005A7E /* AV_AddPlayerVC.xib in Resources */, 754C97D12C3D0F7100A0455D /* AV_selectWeightVC.xib in Resources */, 754835022C3D04F300AC6F8F /* AV_WaterSettingVC.xib in Resources */, 759616712C35348A00363C46 /* AV_SportsVC.xib in Resources */, @@ -643,12 +691,15 @@ 75C4E0B82C367EAE00B4C170 /* AV_WaterCell.xib in Resources */, 753C258E2C3B88F4006E2660 /* AV_BirtherDayTaskCell.xib in Resources */, 75C0A1F52BCCD48A00AB0094 /* AV_TaskCell.xib in Resources */, + 75F3F3E32C4CE81800005A7E /* AV_EditPlayerVC.xib in Resources */, 753C25962C3BE9D5006E2660 /* AV_AddWaterVC.xib in Resources */, 75FDC0B42BCE1F4F005B3D13 /* AV_CalenDarcell.xib in Resources */, 75C0A16D2BC789F900AB0094 /* AV_HomeVC.xib in Resources */, 75C0A1392BC787A500AB0094 /* Main.storyboard in Resources */, 75FDC0CD2BCF77C9005B3D13 /* AV_PivacyVC.xib in Resources */, + 75F3F3DB2C4CE5F600005A7E /* AV_MinePlayerVC.xib in Resources */, 754C97DD2C3D2EAA00A0455D /* AV_TemperatureVC.xib in Resources */, + 75F3F3DF2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.xib in Resources */, 754C97D72C3D253200A0455D /* AV_selectWeightCell.xib in Resources */, 759616632C35244A00363C46 /* AV_SelectGenderVC.xib in Resources */, 75C4E0B12C36792900B4C170 /* AV_WaterHomeVC.xib in Resources */, @@ -756,6 +807,7 @@ 75FAEF312C3E735800298C7D /* HealthManager.swift in Sources */, 754835032C3D04F300AC6F8F /* AV_WaterSettingVC.swift in Sources */, 75C0A1F72BCD027A00AB0094 /* color.swift in Sources */, + 75F3F3DA2C4CE5F600005A7E /* AV_MinePlayerVC.swift in Sources */, 75C0A1F42BCCD48A00AB0094 /* AV_TaskCell.swift in Sources */, 754C97DA2C3D258700A0455D /* weightView.swift in Sources */, 75C0A1632BC7897600AB0094 /* AV_RootVC.swift in Sources */, @@ -767,15 +819,19 @@ 75C0A17A2BC791B400AB0094 /* AV_usermodel.swift in Sources */, 75C0A1722BC78A1B00AB0094 /* AV_MineVC.swift in Sources */, 753C25912C3BBA9D006E2660 /* AV_WaveView.swift in Sources */, + 75F3F3D22C4CE23200005A7E /* AV_RootPlayerVC.swift in Sources */, 75FAEF2E2C3E5D9800298C7D /* CircularProgressBarView.swift in Sources */, 753C259B2C3BED09006E2660 /* AV_AddWaterVCCollectionViewCell.swift in Sources */, 75FDC0B72BCE2F37005B3D13 /* AV_DetalisVC.swift in Sources */, 75FDC0B32BCE1F4F005B3D13 /* AV_CalenDarcell.swift in Sources */, + 75F3F3DE2C4CE6F400005A7E /* AV_WaterKeyBordPlayerVC.swift in Sources */, 759616622C35244A00363C46 /* AV_SelectGenderVC.swift in Sources */, 753C25972C3BE9D5006E2660 /* AV_AddWaterVC.swift in Sources */, + 75F3F3D62C4CE32000005A7E /* AV_AddPlayerVC.swift in Sources */, 754C97E22C3D453800A0455D /* AV_pagesAllVC.swift in Sources */, 75C0A1762BC78F3300AB0094 /* WCDB.swift in Sources */, 754C97DE2C3D2EAA00A0455D /* AV_TemperatureVC.swift in Sources */, + 75F3F3E22C4CE81800005A7E /* AV_EditPlayerVC.swift in Sources */, 754C97D22C3D0F7100A0455D /* AV_selectWeightVC.swift in Sources */, 753C259F2C3BEFB8006E2660 /* AV_ScrollingScaleView.swift in Sources */, 753C25A22C3BF4A1006E2660 /* MLSliderRulerView.swift in Sources */, @@ -982,7 +1038,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0; + MARKETING_VERSION = 2.1; PRODUCT_BUNDLE_IDENTIFIER = com.countdown.day.daycount; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -1020,7 +1076,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0; + MARKETING_VERSION = 2.1; PRODUCT_BUNDLE_IDENTIFIER = com.countdown.day.daycount; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/anniversary_Project/AppDelegate.swift b/anniversary_Project/AppDelegate.swift index 695f764..6dc7b56 100644 --- a/anniversary_Project/AppDelegate.swift +++ b/anniversary_Project/AppDelegate.swift @@ -6,7 +6,7 @@ // import UIKit -import IQKeyboardManagerSwift +import IQKeyboardManagerSwift import Photos import SVProgressHUD import AppLovinSDK @@ -33,16 +33,28 @@ class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDe } if userDefaults.bool(forKey: hasLaunchedBeforeKey) { - // 不是第一次启动 - let vc = AV_LaunchLimitesVC() - self.window?.rootViewController = AV_NAVVC(rootViewController: vc) - - ALSdk.shared().initialize(with: initConfig) { sdkConfig in - // Start loading ads - vc.createInterstitialAd() +// let vc = AV_LaunchLimitesVC() + if userDefaults.bool(forKey: "iswindows"){ + // 不是第一次启动 + let vc = AV_RootPlayerVC() + self.window?.rootViewController = AV_NAVVC(rootViewController: vc) + ALSdk.shared().initialize(with: initConfig) { sdkConfig in + // Start loading ads + } + }else{ + // 不是第一次启动 + let vc = AV_LaunchLimitesVC() + self.window?.rootViewController = AV_NAVVC(rootViewController: vc) + ALSdk.shared().initialize(with: initConfig) { sdkConfig in + // Start loading ads + vc.createInterstitialAd() + + } } - self.window?.rootViewController = AV_NAVVC(rootViewController: vc) + + +// self.window?.rootViewController = AV_NAVVC(rootViewController: vc) } else { // 第一次启动 let vc = AV_SelectGenderVC() @@ -143,8 +155,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDe if let error = error { print("网络请求出错:\(error)") - } else if let data = data { - } } diff --git a/anniversary_Project/Guidepages/C/AV_TemperatureVC.swift b/anniversary_Project/Guidepages/C/AV_TemperatureVC.swift index 98abb6f..2231caf 100644 --- a/anniversary_Project/Guidepages/C/AV_TemperatureVC.swift +++ b/anniversary_Project/Guidepages/C/AV_TemperatureVC.swift @@ -19,7 +19,9 @@ class AV_TemperatureVC: AV_RootVC { super.viewDidLoad() setTableViewcell() + } + func setTableViewcell(){ tableView.delegate = self tableView.dataSource = self @@ -27,6 +29,7 @@ class AV_TemperatureVC: AV_RootVC { tableView.register(UINib(nibName: "AV_SelectGenderCell", bundle: nil), forCellReuseIdentifier: "AV_SelectGenderCell") } + override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) @@ -88,8 +91,7 @@ extension AV_TemperatureVC:UITableViewDelegate,UITableViewDataSource{ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - - + let previousSelectedIndex = selectedIndex // 更新选定的索引 @@ -107,7 +109,6 @@ extension AV_TemperatureVC:UITableViewDelegate,UITableViewDataSource{ tableView.reloadRows(at: indexPathsToReload, with: .automatic) - if indexPath.row == 0{ let defaults = UserDefaults.standard defaults.set("Heat", forKey: "temperature") diff --git a/anniversary_Project/Guidepages/C/AV_selectWeightVC.swift b/anniversary_Project/Guidepages/C/AV_selectWeightVC.swift index ddba74a..5514d0a 100644 --- a/anniversary_Project/Guidepages/C/AV_selectWeightVC.swift +++ b/anniversary_Project/Guidepages/C/AV_selectWeightVC.swift @@ -59,12 +59,14 @@ class AV_selectWeightVC: AV_RootVC { let vc = AV_SportsVC() navigationController?.pushViewController(vc, animated: true) - let defaults = UserDefaults.standard +// let defaults = UserDefaults.standard } } + + extension AV_selectWeightVC:UITableViewDelegate,UITableViewDataSource{ func numberOfSections(in tableView: UITableView) -> Int { diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.swift b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.swift index 961fb4e..f84ac72 100644 --- a/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.swift +++ b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.swift @@ -31,6 +31,9 @@ class AV_WaterSettingVC: AV_RootVC { let circularProgressBarView = CircularProgressBarView() + + var tapCount = 0 + var timer: Timer? override func viewDidLoad() { super.viewDidLoad() @@ -100,4 +103,34 @@ class AV_WaterSettingVC: AV_RootVC { self.present(vc, animated: true,completion: nil) } + + @IBAction func version(_ sender: Any) { + // 增加点击计数 + tapCount += 1 + + // 如果计数器为空,启动一个定时器 + if timer == nil { + timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(resetTapCount), userInfo: nil, repeats: false) + } + + // 检查是否点击了三次 + if tapCount == 6 { + // 执行你想要的操作 + print("连点6下") + + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_RootPlayerVC()) +// UserDefaults.standard.set(true, forKey: "iswindows") + UserDefaults.standard.set(true, forKey: "iswindows") + + + resetTapCount() + } + } + @objc func resetTapCount() { + // 重置计数器和定时器 + tapCount = 0 + timer?.invalidate() + timer = nil + } } diff --git a/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.xib b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.xib index a0c2119..62d6ddc 100644 --- a/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.xib +++ b/anniversary_Project/Home/Drink_water/waterC/AV_WaterSettingVC.xib @@ -226,12 +226,50 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -247,6 +285,7 @@ + @@ -260,5 +299,8 @@ + + + diff --git a/anniversary_Project/Main/AV_LaunchLimitesVC.swift b/anniversary_Project/Main/AV_LaunchLimitesVC.swift index 03a5155..a762f04 100644 --- a/anniversary_Project/Main/AV_LaunchLimitesVC.swift +++ b/anniversary_Project/Main/AV_LaunchLimitesVC.swift @@ -72,8 +72,8 @@ class AV_LaunchLimitesVC: AV_RootVC { } } } - } + func fetchRemoteConfig() { let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0" print("version ------- \(localVersion)") @@ -100,6 +100,7 @@ class AV_LaunchLimitesVC: AV_RootVC { self.startAdCheck() StartManager.shared.superHero = true } else { + let appDelegate = UIApplication.shared.delegate appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) StartManager.shared.superHero = false diff --git a/anniversary_Project/Player/AV_AddPlayerVC.swift b/anniversary_Project/Player/AV_AddPlayerVC.swift new file mode 100644 index 0000000..a8d458d --- /dev/null +++ b/anniversary_Project/Player/AV_AddPlayerVC.swift @@ -0,0 +1,236 @@ +// +// AV_AddPlayerVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/21. +// + +import UIKit + +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + + + +class AV_AddPlayerVC: AV_RootVC { + + var retryAttempt = 0.0 + var interstitialAd: MAInterstitialAd! + var adCheckTimer: Timer? + var adCheckStartTime: Date? + var adLoadTime: Int = 0 + + override func viewDidLoad() { + super.viewDidLoad() + + startAdCheck() + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + + } + ///定时加载 + func startAdCheck() { + + 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() + setshow() + } else if elapsedTimeInMilliseconds >= 10000 { // 10000 毫秒 = 10 秒 + adCheckTimer?.invalidate() + self.navigationController?.popViewController(animated: true) + + } 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": "", + "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": "", + "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 setshow(){ + let parameters:[String : Any] = [ + "appid": "com.countdown.day.daycount", + "idfa":StartManager.shared.idfaid ?? "", + "id":StartManager.shared.idOneAD, + "ecpm":StartManager.shared.idOne ?? "", + + ] + NetworkManager.shared.postRequest(url: StartManager.shared.showurl, parameters: parameters, headers: StartManager.shared.headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + +} + +extension AV_AddPlayerVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "bee9f7039e56cc7a") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + + + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true + // StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "bee9f7039e56cc7a" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + + StartManager.shared.idOne = Float(ad.revenue) + print("----idOne\(Float(ad.revenue))") + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() + self.navigationController?.popViewController(animated: true) + + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } + + + +} diff --git a/anniversary_Project/Player/AV_AddPlayerVC.xib b/anniversary_Project/Player/AV_AddPlayerVC.xib new file mode 100644 index 0000000..c511040 --- /dev/null +++ b/anniversary_Project/Player/AV_AddPlayerVC.xib @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Player/AV_EditPlayerVC.swift b/anniversary_Project/Player/AV_EditPlayerVC.swift new file mode 100644 index 0000000..7eac582 --- /dev/null +++ b/anniversary_Project/Player/AV_EditPlayerVC.swift @@ -0,0 +1,207 @@ +// +// AV_EditPlayerVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/21. +// + +import UIKit + +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + + +class AV_EditPlayerVC: AV_RootVC { + + var retryAttempt = 0.0 + var interstitialAd: MAInterstitialAd! + var adCheckTimer: Timer? + var adCheckStartTime: Date? + var adLoadTime: Int = 0 + + + + override func viewDidLoad() { + super.viewDidLoad() +// self.createInterstitialAd() + startAdCheck() + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + + } + ///定时加载 + 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() + } else if elapsedTimeInMilliseconds >= 10000 { // 10000 毫秒 = 10 秒 + adCheckTimer?.invalidate() + self.navigationController?.popViewController(animated: true) + + } 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": "", + "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": "", + "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)") + } + } + + } +} +extension AV_EditPlayerVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "bee9f7039e56cc7a") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true + // StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "8fccdfa964b52e26" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() + self.navigationController?.popViewController(animated: true) + + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } +} diff --git a/anniversary_Project/Player/AV_EditPlayerVC.xib b/anniversary_Project/Player/AV_EditPlayerVC.xib new file mode 100644 index 0000000..c71cf8c --- /dev/null +++ b/anniversary_Project/Player/AV_EditPlayerVC.xib @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Player/AV_MinePlayerVC.swift b/anniversary_Project/Player/AV_MinePlayerVC.swift new file mode 100644 index 0000000..ae62250 --- /dev/null +++ b/anniversary_Project/Player/AV_MinePlayerVC.swift @@ -0,0 +1,209 @@ +// +// AV_MinePlayerVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/21. +// + +import UIKit + + +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + + +class AV_MinePlayerVC: AV_RootVC { + + + var retryAttempt = 0.0 + var interstitialAd: MAInterstitialAd! + var adCheckTimer: Timer? + var adCheckStartTime: Date? + var adLoadTime: Int = 0 + + + + override func viewDidLoad() { + super.viewDidLoad() +// self.createInterstitialAd() + startAdCheck() + } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + + } + ///定时加载 + 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() + } else if elapsedTimeInMilliseconds >= 10000 { // 10000 毫秒 = 10 秒 + adCheckTimer?.invalidate() + self.navigationController?.popViewController(animated: true) + + } 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": "", + "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": "", + "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)") + } + } + + } +} +extension AV_MinePlayerVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "8fccdfa964b52e26") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true + // StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "8fccdfa964b52e26" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + StartManager.shared.idTwo = Float(ad.revenue) + print("----idTwo\(Float(ad.revenue))") + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() + self.navigationController?.popViewController(animated: true) + + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } +} diff --git a/anniversary_Project/Player/AV_MinePlayerVC.xib b/anniversary_Project/Player/AV_MinePlayerVC.xib new file mode 100644 index 0000000..5a412e0 --- /dev/null +++ b/anniversary_Project/Player/AV_MinePlayerVC.xib @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Player/AV_RootPlayerVC.swift b/anniversary_Project/Player/AV_RootPlayerVC.swift new file mode 100644 index 0000000..ab7d8b1 --- /dev/null +++ b/anniversary_Project/Player/AV_RootPlayerVC.swift @@ -0,0 +1,287 @@ +// +// AV_RootPlayerVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/21. +// + +import UIKit +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + +class AV_RootPlayerVC: AV_RootVC { + + var retryAttempt = 0.0 + var interstitialAd1: MAInterstitialAd! + var interstitialAd2: MAInterstitialAd! + var interstitialAd3: MAInterstitialAd! + var adCheckTimer: Timer? + var adCheckStartTime: Date? + var adLoadTime: Int = 0 + + + + + override func viewDidLoad() { + super.viewDidLoad() + steIDFA() + self.createInterstitialAd() + } + + + @IBAction func backHome(_ sender: Any) { + let appDelegate = UIApplication.shared.delegate + appDelegate?.window??.rootViewController = AV_NAVVC(rootViewController: AV_WaterHomeVC()) + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(true) + self.navigationController?.navigationBar.isHidden = true + + } + + func steIDFA(){ + 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.") + } + } + } + + +// bee9f7039e56cc7a + @IBAction func one(_ sender: Any) { + + let vc = AV_AddPlayerVC() + vc.interstitialAd = self.interstitialAd1 +// vc.createInterstitialAd() + self.navigationController?.pushViewController(vc, animated: true) + } + +// 8fccdfa964b52e26 + @IBAction func two(_ sender: Any) { + + let vc = AV_MinePlayerVC() +// vc.createInterstitialAd() + vc.interstitialAd = self.interstitialAd2 + self.navigationController?.pushViewController(vc, animated: true) + } + +// 7baed02646413e44 + @IBAction func three(_ sender: Any) { + let vc = AV_WaterKeyBordPlayerVC() + vc.interstitialAd = self.interstitialAd3 +// vc.createInterstitialAd() + self.navigationController?.pushViewController(vc, animated: true) + + } + + + func setLoaded1(){ + let parameters:[String : Any] = [ + "appid": "com.countdown.day.daycount", + "idfa":StartManager.shared.idfaid ?? "", + "ads": [ + [ + "id": StartManager.shared.idOneAD, + "btn_position": [ + "x": StartManager.shared.idOnex, + "y": StartManager.shared.idOney + ], + "ecpm": StartManager.shared.idOne ?? "" + ] + ] + ] + NetworkManager.shared.postRequest(url: StartManager.shared.loadurl, parameters: parameters, headers: StartManager.shared.headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + func setLoaded2(){ + let parameters:[String : Any] = [ + "appid": "com.countdown.day.daycount", + "idfa":StartManager.shared.idfaid ?? "", + "ads": [ + [ + "id": StartManager.shared.idTwoAD, + "btn_position": [ + "x": StartManager.shared.idTwox, + "y": StartManager.shared.idTwoy + ], + "ecpm": StartManager.shared.idTwo ?? "" + ] + ] + ] + NetworkManager.shared.postRequest(url: StartManager.shared.loadurl, parameters: parameters, headers: StartManager.shared.headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + + func setLoaded3(){ + let parameters:[String : Any] = [ + "appid": "com.countdown.day.daycount", + "idfa":StartManager.shared.idfaid ?? "", + "ads": [ + [ + "id": StartManager.shared.idThreeAD, + "btn_position": [ + "x": StartManager.shared.idThreex, + "y": StartManager.shared.idThreey + ], + "ecpm": StartManager.shared.idThree ?? "" + ] + ] + ] + NetworkManager.shared.postRequest(url: StartManager.shared.loadurl, parameters: parameters, headers:StartManager.shared.headers) { result in + switch result { + case .success(let data): + print("Response:--- \(data)") + if let status = data["status"] as? String, status == "Success" { + if let needLoad = data["needload"] as? Int { + if needLoad > 0 { + print("Need to load \(needLoad) more ads.") + // 执行加载更多广告的逻辑 + } else { + print("No need to load more ads.") + // 不需要加载更多广告的逻辑 + } + } + } + case .failure(let error): + print("Error:--- \(error)") + } + } + + } + +} + +extension AV_RootPlayerVC: MAAdDelegate +{ + func createInterstitialAd() + { + + if StartManager.shared.IDADType == 1{ + interstitialAd1 = MAInterstitialAd(adUnitIdentifier: "bee9f7039e56cc7a") + interstitialAd1.delegate = self + + // Load the first ad + interstitialAd1.load() + }else if StartManager.shared.IDADType == 2{ + interstitialAd2 = MAInterstitialAd(adUnitIdentifier: "8fccdfa964b52e26") + interstitialAd2.delegate = self + + // Load the first ad + interstitialAd2.load() + }else if StartManager.shared.IDADType == 3{ + + interstitialAd3 = MAInterstitialAd(adUnitIdentifier: "7baed02646413e44") + interstitialAd3.delegate = self + + // Load the first ad + interstitialAd3.load() + } + + + + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + // 插页式广告已准备好显示。'interstitialAd.isReady' 现在将返回 'true' + + // 重置重试尝试 + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true + // StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "bee9f7039e56cc7a" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName +// StartManager.shared.idOne = Float(ad.revenue) + print("----idOne\(Float(ad.revenue))") +// setPostload() + + if StartManager.shared.IDADType == 1{ + StartManager.shared.idOne = Float(ad.revenue) + self.setLoaded1() + StartManager.shared.IDADType = 2 + createInterstitialAd() + }else if StartManager.shared.IDADType == 2{ + StartManager.shared.idTwo = Float(ad.revenue) + self.setLoaded2() + StartManager.shared.IDADType = 3 + createInterstitialAd() + }else if StartManager.shared.IDADType == 3{ + StartManager.shared.idThree = Float(ad.revenue) + self.setLoaded3() + } + + + + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + // 插页广告加载失败 + // 我们建议以指数级更高的延迟重试,最大延迟为 64 秒 + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd1.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + // 恢复应用的背景音频 + // 插页式广告已隐藏。预加载下一个广告 +// interstitialAd1.load() +// self.navigationController?.popViewController(animated: true) + + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + // 插页广告显示失败。建议加载下一个广告 +// interstitialAd.load() + } +} diff --git a/anniversary_Project/Player/AV_RootPlayerVC.xib b/anniversary_Project/Player/AV_RootPlayerVC.xib new file mode 100644 index 0000000..ec3c7ba --- /dev/null +++ b/anniversary_Project/Player/AV_RootPlayerVC.xib @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Player/AV_WaterKeyBordPlayerVC.swift b/anniversary_Project/Player/AV_WaterKeyBordPlayerVC.swift new file mode 100644 index 0000000..fc12db6 --- /dev/null +++ b/anniversary_Project/Player/AV_WaterKeyBordPlayerVC.swift @@ -0,0 +1,271 @@ +// +// AV_WaterKeyBordPlayerVC.swift +// anniversary_Project +// +// Created by 忆海16 on 2024/7/21. +// + +import UIKit + +import AppLovinSDK +import Alamofire +import FirebaseRemoteConfig + + +class AV_WaterKeyBordPlayerVC: AV_RootVC { + @IBOutlet weak var waterImageV: UIImageView! + + @IBOutlet weak var collectionView: UICollectionView! + + + @IBOutlet weak var cupuView: UIView! + + let cellWidth: CGFloat = 71 + let cellHeight: CGFloat = 71 + let cellSpacing: CGFloat = 12 + let dataimag = ["1","2", "3", "4", "5", "6","7","8"] + let databigimag = ["1-1","2-2", "3-3", "4-4", "5-5", "6-6","7-7","8-8"] + let drinkname = ["Water","Milk", "Tea", "Milky tea", "Beer", "Red wine","Fruit juice","Soup"] + + var rulerV = MLSliderRulerView() + + + + var retryAttempt = 0.0 + var interstitialAd: MAInterstitialAd! + var adCheckTimer: Timer? + var adCheckStartTime: Date? + var adLoadTime: Int = 0 + override func viewDidLoad() { + super.viewDidLoad() + + setcollectionV() + rulerV = MLSliderRulerView(frame:cupuView.bounds) + + self.cupuView.addSubview(rulerV) + startAdCheck() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationController?.navigationBar.isHidden = true + + } + ///定时加载 + 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() + } else if elapsedTimeInMilliseconds >= 10000 { // 10000 毫秒 = 10 秒 + adCheckTimer?.invalidate() + self.navigationController?.popViewController(animated: true) + + } 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": "", + "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": "", + "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 setcollectionV(){ + let layout = UICollectionViewFlowLayout() + layout.scrollDirection = .horizontal + collectionView.dataSource = self + collectionView.delegate = self + collectionView.collectionViewLayout = layout + collectionView.register(UINib(nibName: "AV_AddWaterVCCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "AV_AddWaterVCCollectionViewCell") + } +} +extension AV_WaterKeyBordPlayerVC: UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,UICollectionViewDelegate{ + + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { + return dataimag.count + } + + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + + let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AV_AddWaterVCCollectionViewCell", for: indexPath) as! AV_AddWaterVCCollectionViewCell + cell.imageV.image = UIImage(named: "\(self.dataimag[indexPath.row])") + cell.nameLabel.text = self.drinkname[indexPath.row] + return cell + + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { + return CGSize(width: cellWidth, height: cellHeight) + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { + return cellSpacing + } + + func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { + return UIEdgeInsets(top: 0, left: cellSpacing, bottom: 0, right: cellSpacing) + } + + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + self.waterImageV.image = UIImage(named: "\(indexPath.row + 1)-\(indexPath.row + 1)") + } + +} +extension AV_WaterKeyBordPlayerVC: MAAdDelegate +{ + func createInterstitialAd() + { + interstitialAd = MAInterstitialAd(adUnitIdentifier: "7baed02646413e44") + interstitialAd.delegate = self + + // Load the first ad + interstitialAd.load() + } + + // MARK: MAAdDelegate Protocol + + func didLoad(_ ad: MAAd) + { + // Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true' + + // Reset retry attempt + retryAttempt = 0 + StartManager.shared.succeed = true + // StartManager.shared.loadTime = self.adLoadTime + StartManager.shared.adPlatform = "MAX" + StartManager.shared.countryCode = ALSdk.shared().configuration.countryCode + StartManager.shared.adId = "7baed02646413e44" + StartManager.shared.platformResponseTime = ad.requestLatency + StartManager.shared.ecpm = Float(ad.revenue) + StartManager.shared.dsp = ad.dspName + StartManager.shared.network = ad.networkName + + StartManager.shared.idThree = Float(ad.revenue) + + print("----idThree\(Float(ad.revenue))") + + setPostload() + } + + func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) + { + // Interstitial ad failed to load + // We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds) + + retryAttempt += 1 + let delaySec = pow(2.0, min(6.0, retryAttempt)) + + DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) { + self.interstitialAd.load() + } + } + + func didDisplay(_ ad: MAAd) + { + // Pause your app's background audio + } + + func didClick(_ ad: MAAd) {} + + func didHide(_ ad: MAAd) + { + // Resume your app's background audio + // Interstitial ad is hidden. Pre-load the next ad + interstitialAd.load() + self.navigationController?.popViewController(animated: true) + + } + + func didFail(toDisplay ad: MAAd, withError error: MAError) + { + // Interstitial ad failed to display. We recommend loading the next ad + interstitialAd.load() + } +} diff --git a/anniversary_Project/Player/AV_WaterKeyBordPlayerVC.xib b/anniversary_Project/Player/AV_WaterKeyBordPlayerVC.xib new file mode 100644 index 0000000..67aba07 --- /dev/null +++ b/anniversary_Project/Player/AV_WaterKeyBordPlayerVC.xib @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/anniversary_Project/Tool/NetworkManager.swift b/anniversary_Project/Tool/NetworkManager.swift index d4704ba..95abee6 100644 --- a/anniversary_Project/Tool/NetworkManager.swift +++ b/anniversary_Project/Tool/NetworkManager.swift @@ -20,7 +20,23 @@ class NetworkManager { /// - parameters: 请求参数 /// - headers: 请求头 /// - completion: 请求完成的回调 - func postRequest(url: String, parameters: [String: Any]?, headers: HTTPHeaders?, completion: @escaping (Result) -> Void) { +// func postRequest(url: String, parameters: [String: Any]?, headers: HTTPHeaders?, completion: @escaping (Result) -> Void) { +// AF.request(url, +// method: .post, +// parameters: parameters, +// encoding: JSONEncoding.default, +// headers: headers) +// .validate() +// .responseJSON { response in +// switch response.result { +// case .success(let data): +// completion(.success(data)) +// case .failure(let error): +// completion(.failure(error)) +// } +// } +// } + func postRequest(url: String, parameters: [String: Any]?, headers: HTTPHeaders?, completion: @escaping (Result<[String: Any], AFError>) -> Void) { AF.request(url, method: .post, parameters: parameters, @@ -30,7 +46,11 @@ class NetworkManager { .responseJSON { response in switch response.result { case .success(let data): - completion(.success(data)) + if let jsonData = data as? [String: Any] { + completion(.success(jsonData)) + } else { + completion(.failure(AFError.responseValidationFailed(reason: .dataFileNil))) + } case .failure(let error): completion(.failure(error)) } diff --git a/anniversary_Project/Tool/color.swift b/anniversary_Project/Tool/color.swift index ef75d1b..c3c8fc6 100644 --- a/anniversary_Project/Tool/color.swift +++ b/anniversary_Project/Tool/color.swift @@ -42,6 +42,7 @@ extension UIColor{ return self.init(red: CGFloat(r)/255.0, green: CGFloat(g)/255.0, blue: CGFloat(b)/255.0, alpha: alpha) } + class func colorWithHexString(color:String)->UIColor{ return hexSting(color: color, alpha: 1.0) } diff --git a/anniversary_Project/Tool/ip+idfa+ADID.swift b/anniversary_Project/Tool/ip+idfa+ADID.swift index 0256cb8..e3adfca 100644 --- a/anniversary_Project/Tool/ip+idfa+ADID.swift +++ b/anniversary_Project/Tool/ip+idfa+ADID.swift @@ -10,6 +10,7 @@ import UIKit import AdSupport import AppTrackingTransparency import SystemConfiguration +import Alamofire class StartManager:NSObject{ static var shared = StartManager() @@ -49,6 +50,36 @@ class StartManager:NSObject{ var superHero:Bool = false + /// bee9f7039e56cc7a + var idOne:Float? + var idOneAD:String = "bee9f7039e56cc7a" + var idOnex:CGFloat = UIScreen.main.bounds.width / 2 + var idOney:CGFloat = 20 + + /// 8fccdfa964b52e26 + var idTwo:Float? + var idTwoAD:String = "8fccdfa964b52e26" + var idTwox:CGFloat = UIScreen.main.bounds.width / 2 + var idTwoy:CGFloat = 65 + + /// bee9f7039e56cc7a + var idThree:Float? + var idThreeAD:String = "7baed02646413e44" + var idThreex:CGFloat = UIScreen.main.bounds.width / 2 + var idThreey:CGFloat = 110 + + + ///IDADtype + var IDADType:Int = 1 + + + let loadurl = "http://192.168.41.22:6000/adtask/loaded" + + let showurl = "http://127.0.0.1:9078/adtask/show" + + let headers: HTTPHeaders = [ + "Content-Type": "application/json" + ] private override init() {}