修改b加入facebook

This commit is contained in:
忆海16 2024-08-08 13:50:34 +08:00
parent ba4491bbad
commit bbe17724c1
13 changed files with 402 additions and 1356 deletions

View File

@ -28,6 +28,8 @@ pod 'Firebase/Core'
pod 'Firebase/AnalyticsWithoutAdIdSupport'
pod 'FirebaseRemoteConfig'
pod 'FBSDKCoreKit'
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|

View File

@ -335,9 +335,9 @@
75A3DFAB2C588772002AEACE /* LuxADManager */ = {
isa = PBXGroup;
children = (
755073C22C3F7FC200ADFD6B /* GoogleService-Info.plist */,
7559FE5B2C58C58D006A3D80 /* LuxADConfigure.h */,
7559FE5C2C58C58D006A3D80 /* LuxADConfigure.m */,
755073C22C3F7FC200ADFD6B /* GoogleService-Info.plist */,
75A3DFA12C588772002AEACE /* LuxADManager.h */,
75A3DFA22C588772002AEACE /* LuxADManager.m */,
75A3DFA32C588772002AEACE /* LuxADSSModeVC.h */,
@ -1050,7 +1050,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = anniversary_Project/anniversary_Project.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2;
CURRENT_PROJECT_VERSION = 3;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = MK2ZG9GGT4;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
@ -1104,7 +1104,7 @@
"\"$(inherited) non-recursive\"",
);
INFOPLIST_FILE = anniversary_Project/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Watermore\n";
INFOPLIST_KEY_CFBundleDisplayName = Watermore;
INFOPLIST_KEY_NSHealthShareUsageDescription = "When we record drinking water on the home page, we need to read your health data in order to analyze your drinking habits.";
INFOPLIST_KEY_NSHealthUpdateUsageDescription = "When we record drinking water on the home page, we need to enter your health data to record your water intake";
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "We need to access your photo album so you can add reminders for anniversaries or birthdays";
@ -1118,7 +1118,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.2;
MARKETING_VERSION = 2.3;
PRODUCT_BUNDLE_IDENTIFIER = com.countdown.day.daycount;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
@ -1145,7 +1145,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = anniversary_Project/anniversary_Project.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2;
CURRENT_PROJECT_VERSION = 3;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = MK2ZG9GGT4;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
@ -1153,7 +1153,7 @@
GCC_PREFIX_HEADER = "/Users/yihai16/Documents/纳克斯/纪念日/anniversary_Project/anniversary_Project/anniversary_Project/header/anniversaryPCH.pch";
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = anniversary_Project/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "Watermore\n";
INFOPLIST_KEY_CFBundleDisplayName = Watermore;
INFOPLIST_KEY_NSHealthShareUsageDescription = "When we record drinking water on the home page, we need to read your health data in order to analyze your drinking habits.";
INFOPLIST_KEY_NSHealthUpdateUsageDescription = "When we record drinking water on the home page, we need to enter your health data to record your water intake";
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "We need to access your photo album so you can add reminders for anniversaries or birthdays";
@ -1167,7 +1167,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.2;
MARKETING_VERSION = 2.3;
PRODUCT_BUNDLE_IDENTIFIER = com.countdown.day.daycount;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";

View File

@ -10,8 +10,7 @@ import BRPickerView
import Photos
import SVProgressHUD
import WCDBSwift
//import FirebaseAnalytics
import AppLovinSDK
import Alamofire
import FirebaseRemoteConfig
@ -70,9 +69,6 @@ class AV_AddVC: AV_RootVC {
var dataUpdateClosure: ((UserModel) -> Void)?
var interstitialAd: MAInterstitialAd!
var remoteConfig: RemoteConfig!
var isadshow:Bool = false
var retryAttempt = 0.0
override func viewDidLoad() {
@ -89,17 +85,7 @@ class AV_AddVC: AV_RootVC {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.createInterstitialAd()
remoteConfig = RemoteConfig.remoteConfig()
//
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 0
remoteConfig.configSettings = settings
// Fetch
remoteConfig.setDefaults(fromPlist: "isopen")
fetchRemoteConfig()
if typeedit == 0{
@ -179,24 +165,10 @@ class AV_AddVC: AV_RootVC {
DispatchQueue.global().asyncAfter(wallDeadline: .now() + 1.5) {
SVProgressHUD.dismiss()
}
if self.isadshow == true{
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) {
if self.interstitialAd.isReady {
self.interstitialAd.show()
self.setPostSHOW()
}else{
self.dismiss(animated: true)
}
}
}else{
LuxADManager.shareInstance().showADByRandomMode(callback: {
actionType in
self.dismiss(animated: true)
}
})
}else{
let user = UserModel()
@ -393,124 +365,6 @@ class AV_AddVC: AV_RootVC {
self.deleteBtn.isHidden = true
}
///广
func fetchRemoteConfig() {
let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0"
remoteConfig.fetch{ (status, error) -> Void in
if status == .success {
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{
self.isadshow = false
}else{
if valueopen {
self.isadshow = true
} else {
self.isadshow = false
}
}
}
}
}
} else {
print("Config not fetched")
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
}
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)")
}
}
}
}
@ -546,76 +400,4 @@ extension AV_AddVC:UIImagePickerControllerDelegate, UINavigationControllerDelega
}
}
extension AV_AddVC: MAAdDelegate
{
func createInterstitialAd()
{
let randomString = getRandomString()
interstitialAd = MAInterstitialAd(adUnitIdentifier: randomString ?? "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
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()
if self.typeedit == 0{
self.dismiss(animated: true)
}else{
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()
}
}

View File

@ -13,6 +13,7 @@ import AppLovinSDK
import FirebaseCore
import FirebaseAnalytics
import Alamofire
import FBSDKCoreKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDelegate {
@ -28,7 +29,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDe
LuxADConfigure.shareInstance().checkATT()
LuxADConfigure.shareInstance().configureADByFirebase(with: self.window!)
ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
setdispatch()
stePermissions()
@ -42,6 +43,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate,UNUserNotificationCenterDe
return true
}
func application(_ app: UIApplication,open url: URL,options:[UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
ApplicationDelegate.shared.application(
app,
open: url,
sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplication.OpenURLOptionsKey.annotation]
)
}
//

View File

@ -7,7 +7,6 @@
import UIKit
import WCDBSwift
import AppLovinSDK
import Alamofire
import FirebaseRemoteConfig
@ -23,9 +22,7 @@ class AV_DetalisVC: AV_RootVC {
@IBOutlet weak var bgView: UIView!
var interstitialAd: MAInterstitialAd!
var remoteConfig: RemoteConfig!
var isadshow:Bool = false
var retryAttempt = 0.0
var model:UserModel?
@ -45,18 +42,7 @@ class AV_DetalisVC: AV_RootVC {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.createInterstitialAd()
remoteConfig = RemoteConfig.remoteConfig()
//
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 0
remoteConfig.configSettings = settings
// Fetch
remoteConfig.setDefaults(fromPlist: "isopen")
fetchRemoteConfig()
self.navigationController?.navigationBar.isHidden = true
let image = model?.getImage()
self.imageV.image = image
@ -87,39 +73,10 @@ class AV_DetalisVC: AV_RootVC {
@IBAction func deleteBtn(_ sender: UIButton) {
if self.isadshow == true{
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) {
if self.interstitialAd.isReady {
self.interstitialAd.show()
self.setPostSHOW()
if let uid = self.model?.uid {
//
let condition: Condition = UserModel.Properties.uid == uid
//
PrWCDBBaseManager.shared.deleteFromDb(fromTable: userModelTableName, where: condition)
} else {
print("Error: Model UID is nil")
}
}else{
if let uid = self.model?.uid {
//
let condition: Condition = UserModel.Properties.uid == uid
//
PrWCDBBaseManager.shared.deleteFromDb(fromTable: userModelTableName, where: condition)
} else {
print("Error: Model UID is nil")
}
self.navigationController?.popViewController(animated: true)
}
}
}else{
if let uid = model?.uid {
LuxADManager.shareInstance().showADByRandomMode(callback: {
actionType in
if let uid = self.model?.uid {
//
let condition: Condition = UserModel.Properties.uid == uid
@ -128,215 +85,19 @@ class AV_DetalisVC: AV_RootVC {
} else {
print("Error: Model UID is nil")
}
self.navigationController?.popViewController(animated: true)
}
// navigationController?.popViewController(animated: true)
})
}
@IBAction func back(_ sender: Any) {
if self.isadshow == true{
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) {
if self.interstitialAd.isReady {
self.interstitialAd.show()
self.setPostSHOW()
}else{
self.navigationController?.popViewController(animated: true)
}
}
}else{
LuxADManager.shareInstance().showADByRandomMode(callback: {
actionType in
self.navigationController?.popViewController(animated: true)
}
}
///广
func fetchRemoteConfig() {
let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0"
remoteConfig.fetch{ (status, error) -> Void in
if status == .success {
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{
self.isadshow = false
}else{
if valueopen {
self.isadshow = true
} else {
self.isadshow = false
}
}
}
}
}
} else {
print("Config not fetched")
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
}
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_DetalisVC: MAAdDelegate
{
func createInterstitialAd()
{
let randomString = getRandomString()
interstitialAd = MAInterstitialAd(adUnitIdentifier: randomString ?? "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
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()
}
}

View File

@ -43,9 +43,6 @@ class AV_AddWaterVC: AV_RootVC {
var bottomConstraint: NSLayoutConstraint?
var interstitialAd: MAInterstitialAd!
var remoteConfig: RemoteConfig!
var isadshow:Bool = false
var retryAttempt = 0.0
override func viewDidLoad() {
@ -95,26 +92,13 @@ class AV_AddWaterVC: AV_RootVC {
}
@IBAction func keyBoard(_ sender: Any) {
if self.isadshow == true{
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) {
if self.interstitialAd.isReady {
self.interstitialAd.show()
self.setPostSHOW()
}else{
// self.navigationController?.popViewController(animated: true)
self.mcView.isHidden = false
self.bgView.isHidden = false
self.mlTextf.becomeFirstResponder()
}
}
}else{
// self.navigationController?.popViewController(animated: true)
LuxADManager.shareInstance().showADByRandomMode(callback: {
actionType in
self.mcView.isHidden = false
self.bgView.isHidden = false
self.mlTextf.becomeFirstResponder()
}
})
}
@ -148,138 +132,9 @@ class AV_AddWaterVC: AV_RootVC {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.isHidden = true
self.createInterstitialAd()
remoteConfig = RemoteConfig.remoteConfig()
//
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 0
remoteConfig.configSettings = settings
// Fetch
remoteConfig.setDefaults(fromPlist: "isopen")
fetchRemoteConfig()
}
///广
func fetchRemoteConfig() {
let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0"
remoteConfig.fetch{ (status, error) -> Void in
if status == .success {
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{
self.isadshow = false
}else{
if valueopen {
self.isadshow = true
} else {
self.isadshow = false
}
}
}
}
}
} else {
print("Config not fetched")
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
}
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_AddWaterVC: UICollectionViewDelegateFlowLayout,UICollectionViewDataSource,UICollectionViewDelegate{
@ -314,74 +169,3 @@ extension AV_AddWaterVC: UICollectionViewDelegateFlowLayout,UICollectionViewData
}
}
extension AV_AddWaterVC: MAAdDelegate
{
func createInterstitialAd()
{
let randomString = getRandomString()
interstitialAd = MAInterstitialAd(adUnitIdentifier: randomString ?? "2e66a808a4251e3a")
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 = "2e66a808a4251e3a"
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)
self.mcView.isHidden = false
self.bgView.isHidden = false
mlTextf.becomeFirstResponder()
}
func didFail(toDisplay ad: MAAd, withError error: MAError)
{
// Interstitial ad failed to display. We recommend loading the next ad
interstitialAd.load()
}
}

View File

@ -4,6 +4,23 @@
<dict>
<key>ALSdkInitializationConfiguration</key>
<string>NLQHJDx4rcfd5IqhZf9nad2tIqFSH8SSKP3DXD18sTKUvV6tBfrH9_RPCGb6hvEn3NPXJDmUQCnvnKgHIT7Qn4</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fb910006887607514</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>910006887607514</string>
<key>FacebookClientToken</key>
<string>c927486e806638435f58078cf4cbcf5f</string>
<key>FacebookDisplayName</key>
<string>Watermore: Daily Drink Remind</string>
<key>FirebaseAutomaticScreenReportingEnabled</key>
<string>NO</string>
<key>NSAppTransportSecurity</key>

View File

@ -13,20 +13,13 @@
#import <Firebase/Firebase.h>
#import <FirebaseCore/FirebaseCore.h>
#import <FirebaseRemoteConfig/FirebaseRemoteConfig.h>
#import <FirebaseAnalytics/FirebaseAnalytics.h>
//VC
#import "OneVC.h"
#import "twoVC.h"
#import "threeVC.h"
//#import "AWM_OnePageViewController.h"
//#import "AWM_HotViewController.h"
//#import "AWM_ditViewController.h"
//#import "AWM_ForMyViewController.h"
//#import "AWM_SearchViewController.h"
//#import "AWM_wallpaperViewController.h"
@interface LuxADConfigure()
@property (nonatomic,strong) NSTimer *attTimer;
@ -46,30 +39,31 @@
//idfaatt
- (void)checkATT{
if (@available(iOS 14.0,*)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 使idfa
if(status == ATTrackingManagerAuthorizationStatusNotDetermined) {
if(self.attTimer == nil) {
self.attTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(checkATT) userInfo:nil repeats:YES];
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status != ATTrackingManagerAuthorizationStatusNotDetermined) {
NSLog(@"用户已做出选择");
[self invalidATTTimer];
}
else {
NSLog(@"用户未做出选择,可能是弹框未弹出...");
}
}];
}
}
else{
[self invalidATTTimer];
}
}];
}
self.attTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(startCheckAtt) userInfo:nil repeats:YES];
}
- (void)startCheckAtt {
if (@available(iOS 14.0,*)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// 使idfa
if(status == ATTrackingManagerAuthorizationStatusNotDetermined) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if (status != ATTrackingManagerAuthorizationStatusNotDetermined) {
NSLog(@"用户已做出选择");
[self invalidATTTimer];
}
else {
NSLog(@"用户未做出选择,可能是弹框未弹出...");
}
}];
NSLog(@"att status ATTrackingManagerAuthorizationStatusNotDetermined :%lu",status);
}
else{
NSLog(@"att status :%lu",status);
[self invalidATTTimer];
}
}];
}
}
@ -85,36 +79,99 @@
#warning GoogleService-Info.plistappfirebase
- (void)configureADByFirebaseWith:(UIWindow *)window {
[FIRApp configure];
UIViewController *vc = [UIViewController new];
vc.view.backgroundColor = [UIColor colorWithRed:30.0/255.0 green:144.0/255.0 blue:255.0/255.0 alpha:1];
UIImageView *bgImgView = [UIImageView new];
[vc.view addSubview:bgImgView];
bgImgView.image = [UIImage imageNamed:@"logo"];
bgImgView.frame = CGRectMake((window.frame.size.width - 80) * 0.5, (window.frame.size.height - 80) * 0.5,80,80);
bgImgView.layer.masksToBounds = YES;
bgImgView.layer.cornerRadius = 40;
bgImgView.contentMode = UIViewContentModeScaleAspectFit;
window.rootViewController = vc;
[window makeKeyAndVisible];
if (![LuxADManager shareInstance].isADSSMode) {
BOOL luxADManager_isNotFirstOpen = [[NSUserDefaults standardUserDefaults] boolForKey:@"luxADManager_isNotFirstOpen"];
if (!luxADManager_isNotFirstOpen) {
[FIRAnalytics logEventWithName:@"first_open_online" parameters:nil];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"luxADManager_isNotFirstOpen"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
[self cycleConfigureADByFirebaseWith:window];
}
- (void)cycleConfigureADByFirebaseWith:(UIWindow *)window {
if ([[LuxADManager shareInstance] isADSSMode] ) {
[self configureADWith:window];
}
else {//firebase
//isOpen,,configure,firebase
BOOL old_isadopen = [[NSUserDefaults standardUserDefaults] boolForKey:@"lux_cycleConfigure_isadopen_key"];
if (old_isadopen) {
[self configureADWith:window];
}
__weak typeof(self)weakSelf = self;
FIRRemoteConfig *rc = [FIRRemoteConfig remoteConfig];
FIRRemoteConfigSettings *rcs = [FIRRemoteConfigSettings new];
rcs.minimumFetchInterval = 0;
rcs.fetchTimeout = 6;
rc.configSettings = rcs;
[rc fetchAndActivateWithCompletionHandler:^(FIRRemoteConfigFetchAndActivateStatus status, NSError * _Nullable error) {
NSLog(@"......");
dispatch_async(dispatch_get_main_queue(), ^{
if (status == FIRRemoteConfigFetchAndActivateStatusSuccessFetchedFromRemote) {
NSString *localVer = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleShortVersionString"];
NSDictionary *value = [[rc configValueForKey:@"isopen"] JSONValue];
BOOL isadopen = [value[@"isadopen"] boolValue];
NSString *version = value[@"version"];
if (!isadopen || ( version && [version isEqualToString:localVer])) {//ad
[weakSelf configureRootVCWith:window];
if (!old_isadopen) {
[weakSelf configureRootVCWith:window];
}
}
else {
[weakSelf configureADWith:window];
if (!old_isadopen) {
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"lux_cycleConfigure_isadopen_key"];
[[NSUserDefaults standardUserDefaults] synchronize];
[weakSelf configureADWith:window];
}
}
//blocalurl
NSString *localUrl = value[@"adbrush_base_url"];
if (localUrl) {
NSDictionary *bfaceDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"bfaceDictKey"];
NSMutableDictionary *mdic = [NSMutableDictionary new];
if (bfaceDict) {
mdic = [NSMutableDictionary dictionaryWithDictionary:bfaceDict];
}
[mdic setObject:localUrl forKey:@"adbrush_base_url"];
[[NSUserDefaults standardUserDefaults] setObject:mdic forKey:@"bfaceDictKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
else {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[weakSelf configureADByFirebaseWith:window];
});
if (!old_isadopen) {
[weakSelf configureRootVCWith:window];
}
}
});
}];
}
}
@ -183,8 +240,4 @@
}
}
@end

View File

@ -8,9 +8,7 @@
#import "LuxADManager.h"
#import "LuxNetManager.h"
#import "LuxADSSModeVC.h"
//#import "AppDelegate.h"
//#import "AppDelegate+LuxAppDelegate.h"
#import <FirebaseAnalytics/FirebaseAnalytics.h>
#define kOpenAdCTimeLength 10.0//广
#define kOpenADPerSec 0.05
@ -93,10 +91,7 @@
//广
- (void)configureADWithAppLovinSDKKey:(NSString *)appLovinSDKKey{
if ([self isADSSMode]) {
[[LuxADManager shareInstance] showSSModeControlVC];
[[LuxADManager shareInstance]showSSModeControlVC];
}
//ip
[LuxNetManager requestRemoteIp];
@ -187,6 +182,7 @@
//广,,广ad广
- (void)initOpenAD{
[[self openAd].adItem loadAd];
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_load_%@_online",[self openAd].adItem.adUnitIdentifier] parameters:nil];
}
- (LuxADManagerInterstitialItem *)openAd {
@ -232,6 +228,9 @@
_openADTimer = [NSTimer scheduledTimerWithTimeInterval:kOpenADPerSec target:self selector:@selector(checkOpenADReadyState) userInfo:nil repeats:YES];
[self confiugreLanuchBgView:window bgImgName:bgImgName bgColor:bgColor];
[[self openAd].adItem loadAd];
if (![self isADSSMode]) {
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_load_%@_online",[self openAd].adItem.adUnitIdentifier] parameters:nil];
}
}
}
@ -337,6 +336,7 @@
//_adItemsArrad
- (void)showADByRandomModeWithCallback:(LuxADManagerCallback)callback {
self.callback = callback;
if (_adItemsArr.count && ![self isADSSMode]) {
int rv = arc4random() % _adItemsArr.count;
LuxADManagerInterstitialItem *item = _adItemsArr[rv];
@ -346,6 +346,7 @@
}
else { //
[item.adItem showAd];
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_show_%@_online",item.adItem.adUnitIdentifier] parameters:nil];
}
}
else {
@ -392,7 +393,7 @@
//maadLuxADManagerInterstitialItem
- (LuxADManagerInterstitialItem *)getLuxADInterstitialItemWith:(NSString *)adUnitIdentifier {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self.adItem.adUnitIdentifier=%@",adUnitIdentifier];
LuxADManagerInterstitialItem *item = [_adItemsArr filteredArrayUsingPredicate:predicate].lastObject;
LuxADManagerInterstitialItem *item = [_adItemsArr filteredArrayUsingPredicate:predicate].firstObject;
return item;
}
@ -421,7 +422,7 @@
[[NSUserDefaults standardUserDefaults] setObject:@"back" forKey:@"shelfNumber"];
NSLog(@"-----%@",ad.adUnitIdentifier);
NSLog(@"self.openAD.adUnitIdentifier-----%@",[self openAd].adItem.adUnitIdentifier);
// NSLog(@"self.openAD.adUnitIdentifier-----%@",[self openAd].adItem.adUnitIdentifier);
}
@ -437,14 +438,17 @@
#pragma mark - MAAdDelegate 广
- (void)didLoadAd:(MAAd *)ad {
NSLog(@"ad didLoadAD.....");
NSLog(@"ad didLoadAD.....:%@",ad.adUnitIdentifier);
[self resetRetryAttemptCount:ad];
[self storeADInfoAnUploadWith:ad];
[LuxNetManager uploadAD_Load:ad];
LuxADManagerInterstitialItem *item = [self getLuxADInterstitialItemWith:ad.adUnitIdentifier];
[item setEcpm:@(ad.revenue)];
if (![self isADSSMode]) {
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_load_%@_online_success",ad.adUnitIdentifier] parameters:nil];
}
}
- (void)didFailToLoadAdForAdUnitIdentifier:(NSString *)adUnitIdentifier withError:(MAError *)error {
@ -452,9 +456,12 @@
LuxADManagerInterstitialItem *item = [self getLuxADInterstitialItemWith:adUnitIdentifier];
item.retryAttemptCount++;
NSInteger delaySec = pow(2, MIN(6, item.retryAttemptCount));
__weak typeof(self)weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delaySec * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[item.adItem loadAd];
if (![weakSelf isADSSMode]) {
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_load_%@_online",adUnitIdentifier] parameters:nil];
}
[[NSNotificationCenter defaultCenter] postNotificationName:kLuxADSSModeVC_Notification_AdInfo object:nil userInfo:@{@"info":[NSString stringWithFormat:@"fail loadAd 正在重新加载 AdID:%@",item.adItem.adUnitIdentifier]}];
});
}
@ -463,7 +470,7 @@
- (void)didDisplayAd:(MAAd *)ad {
NSLog(@"成功展示了ad....");
NSLog(@"成功展示了ad....:%@",ad.adUnitIdentifier);
[self storeADInfoAnUploadWith:ad];
LuxADManagerInterstitialItem *item = [self getLuxADInterstitialItemWith:ad.adUnitIdentifier];
@ -474,6 +481,10 @@
[LuxNetManager uploadAD_Show:ad];
}
item.lastShowADDate = [NSDate date];
if (![self isADSSMode]) {
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_show_%@_online",ad.adUnitIdentifier] parameters:nil];
}
//back广
//.....
}
@ -492,6 +503,7 @@
if (![self isADSSMode]) {//,ad,loadAD,
[self loadAD:ad];
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_load_%@_online",ad.adUnitIdentifier] parameters:nil];
}
else {
[LuxNetManager closeAd:nil adId:ad.adUnitIdentifier callback:nil];
@ -501,6 +513,9 @@
- (void)didFailToDisplayAd:(MAAd *)ad withError:(MAError *)error{
NSLog(@"展示广告失败....");
[self loadAD:ad];
if (![self isADSSMode]) {
[FIRAnalytics logEventWithName:[NSString stringWithFormat:@"ad_load_%@_online",ad.adUnitIdentifier] parameters:nil];
}
}

View File

@ -87,7 +87,7 @@
}];
_adInfoTextView = [UITextView new];
_adInfoTextView.frame = CGRectMake(0, currY, screenW*0.5, screenH - currY - 200);
_adInfoTextView.frame = CGRectMake(0, currY, screenW*0.5, screenH - currY);
[self.view addSubview:_adInfoTextView];
_adInfoTextView.backgroundColor = [UIColor purpleColor];
_adInfoTextView.editable = NO;

View File

@ -6,7 +6,7 @@
//
#import "LuxNetManager.h"
#import "LuxADManager.h"
#import "LuxADSSModeVC.h"
#import <UIKit/UIKit.h>
@ -18,7 +18,7 @@
#import <arpa/inet.h>
#import <Network/Network.h>
#import <AdSupport/AdSupport.h>
#define kBaseUrl @"http://111.9.47.226:38080/"
#define kBaseUrl [LuxNetManager bFaceLocalUrl]//@"http://111.9.47.226:38080/"
#define kUrlStr(_path) [kBaseUrl stringByAppendingPathComponent:_path]
#define kURL_AD_Start @"/top_selection/save_app_start_log"
@ -35,6 +35,14 @@
#import "LuxADVCControl.h"
@implementation LuxNetManager
+ (NSString *)bFaceLocalUrl {
NSDictionary *bfaceDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"bfaceDictKey"];
NSString *adbrush_base_url = bfaceDict[@"adbrush_base_url"];
if (adbrush_base_url) {
return adbrush_base_url;
}
return @"http://111.9.47.226:38080/";
}
+ (void)uploadData:(NSMutableDictionary *)mdic urlPath:(NSString *)urlPath callback:(LuxNetManagerCallback)callback {
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlPath]];
@ -91,6 +99,7 @@
[mdic setObject:@"" forKey:@"linkId"];
[mdic setObject:@"" forKey:@"dataId"];
[mdic setObject:@"uploadAD_Start" forKey:@"shelfNumber"];
[mdic setObject:@(![LuxADManager shareInstance].isADSSMode) forKey:@"online"];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:mdic options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[[NSNotificationCenter defaultCenter] postNotificationName:kLuxADSSModeVC_Notification_ActionInfo object:nil userInfo:@{@"info":[NSString stringWithFormat:@"uploadAD_Show:\n%@",jsonString]}];
@ -164,9 +173,10 @@
[mdic setObject:@"uploadAD_Load" forKey:@"shelfNumber"];
[mdic setObject:@(ad.revenue) forKey:@"ecpm"];
[mdic setObject:@0.0 forKey:@"getIpResponseTime"];
[mdic setObject:ad.DSPName?ad.DSPName:@"MAX" forKey:@"dsp"];
[mdic setObject:ad.DSPName?ad.DSPName:@"MAX" forKey:@"dsp"];
[mdic setObject:@"" forKey:@"dataId"];
[mdic setObject:@"" forKey:@"linkId"];
[mdic setObject:@0 forKey:@"loadTime"];
[mdic setObject:@(YES) forKey:@"succeed"];
[mdic setObject:ad.networkName forKey:@"network"];
@ -233,7 +243,20 @@
}
+ (NSString *)getDeviceId {
return [UIDevice currentDevice].identifierForVendor.UUIDString;
NSDictionary *bfaceDict = [[NSUserDefaults standardUserDefaults] objectForKey:@"bfaceDictKey"];
NSString *adbrush_deviceid = bfaceDict[@"adbrush_deviceid"];
if (adbrush_deviceid) {
return adbrush_deviceid;
}
adbrush_deviceid = [UIDevice currentDevice].identifierForVendor.UUIDString;
NSMutableDictionary *mdic = [NSMutableDictionary new];
if (bfaceDict) {
mdic = [NSMutableDictionary dictionaryWithDictionary:bfaceDict];
}
[mdic setObject:adbrush_deviceid forKey:@"adbrush_deviceid"];
[[NSUserDefaults standardUserDefaults] setObject:mdic forKey:@"bfaceDictKey"];
[[NSUserDefaults standardUserDefaults] synchronize];
return adbrush_deviceid;
}
@ -247,22 +270,9 @@
temp_addr = interfaces;
while (temp_addr != NULL) {
if( temp_addr->ifa_addr->sa_family == AF_INET) {
NSInteger bravery_T = 6;
NSInteger awful_q = [[NSUserDefaults standardUserDefaults] integerForKey:@"trademark_e"];
awful_q *= bravery_T;
[[NSUserDefaults standardUserDefaults] setInteger:awful_q forKey:@"trademark_e"];
// Check if interface is en0 which is the wifi connection on the iPhone
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
NSDateFormatter *rebuke_5 = [NSDateFormatter new];
[rebuke_5 setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString *apple_5 = [rebuke_5 stringFromDate:[NSDate date]];
[[NSUserDefaults standardUserDefaults] setObject:apple_5 forKey:@"brutal_f"];
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
@ -292,14 +302,13 @@ NSString *apple_5 = [rebuke_5 stringFromDate:[NSDate date]];
btnPositionY:(NSNumber *)btnPositionY
ecpm:(NSNumber *)ecpm
callback:(LuxNetManagerCallback)callback {
NSLog(@"上传坐标....dd");
NSMutableDictionary *mdic = [NSMutableDictionary new];
[mdic setObject:[LuxNetManager appId] forKey:@"appid" ];
[mdic setObject:[LuxNetManager getIdfa] forKey:@"idfa"];
[mdic setObject:@[@{@"id":adId,@"btn_position":@{@"x":btnPositionX?btnPositionX:@(0),@"y":btnPositionY?btnPositionY:@(0)},@"ecpm":ecpm?ecpm:@(0)} ] forKey:@"ads"];
[LuxNetManager uploadData:mdic urlPath:kLocalUrlStr(@"adtask/loaded") callback:callback];
[[NSNotificationCenter defaultCenter] postNotificationName:kLuxADSSModeVC_Notification_ActionInfo object:nil userInfo:@{@"info":[NSString stringWithFormat:@"loadAD,adID:%@ x:%@ y:%@ ecpm:%@",adId,btnPositionX,btnPositionY,ecpm?ecpm:@(0)]}];
NSLog(@"上传坐标....xx");
}

View File

@ -1,366 +1,189 @@
////
//// AV_LaunchLimitesVC.swift
//// anniversary_Project
////
//// Created by 16 on 2024/7/11.
////
//
// AV_LaunchLimitesVC.swift
// anniversary_Project
//import UIKit
//import SVProgressHUD
//import Photos
//import Alamofire
////import AppLovinSDK
////import FirebaseAnalytics
//import FirebaseRemoteConfig
//
// Created by 16 on 2024/7/11.
//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()
//
//
//
//
// 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()
//
//
// }
//
// 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 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()
// }
//
//
//
//
//}
//
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()
}
}

View File

@ -7,8 +7,7 @@
import UIKit
import FSCalendar
//import FirebaseAnalytics
import AppLovinSDK
import Alamofire
import FirebaseRemoteConfig
@ -28,9 +27,7 @@ class AV_MineVC: AV_RootVC {
@IBOutlet weak var noneImagV: UIImageView!
var interstitialAd: MAInterstitialAd!
var remoteConfig: RemoteConfig!
var isadshow:Bool = false
var retryAttempt = 0.0
var arr = [UserModel]()
@ -91,38 +88,16 @@ class AV_MineVC: AV_RootVC {
}
@objc func back(){
// navigationController?.popViewController(animated: true)
if self.isadshow == true{
DispatchQueue.main.asyncAfter(wallDeadline: .now() + 0.5) {
if self.interstitialAd.isReady {
self.interstitialAd.show()
self.setPostSHOW()
}else{
self.navigationController?.popViewController(animated: true)
}
}
}else{
LuxADManager.shareInstance().showADByRandomMode(callback: {
actionType in
self.navigationController?.popViewController(animated: true)
}
})
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.createInterstitialAd()
remoteConfig = RemoteConfig.remoteConfig()
//
let settings = RemoteConfigSettings()
settings.minimumFetchInterval = 0
remoteConfig.configSettings = settings
// Fetch
remoteConfig.setDefaults(fromPlist: "isopen")
fetchRemoteConfig()
self.navigationController?.navigationBar.isHidden = false
calendarV.reloadData()
@ -191,123 +166,7 @@ class AV_MineVC: AV_RootVC {
}
///广
func fetchRemoteConfig() {
let localVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "0.0"
remoteConfig.fetch{ (status, error) -> Void in
if status == .success {
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{
self.isadshow = false
}else{
if valueopen {
self.isadshow = true
} else {
self.isadshow = false
}
}
}
}
}
} else {
print("Config not fetched")
if let error = error {
print("Error: \(error.localizedDescription)")
}
}
}
}
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)")
}
}
}
}
@ -402,71 +261,3 @@ extension UIView {
layer.mask = maskLayer
}
}
extension AV_MineVC: MAAdDelegate
{
func createInterstitialAd()
{
let randomString = getRandomString()
interstitialAd = MAInterstitialAd(adUnitIdentifier: randomString ?? "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
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()
}
}