Music_Player3/relax.offline.mp3.music/MP/Common/Tool(工具封装)/MP_AnalyticsManager.swift
2024-10-09 14:43:59 +08:00

1026 lines
45 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

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

//
// MP_AnalyticsManager.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/5/30.
//
import UIKit
import FirebaseAnalytics
import FirebaseCrashlytics
import FirebaseRemoteConfig
import GoogleMobileAds
///
class MP_AnalyticsManager: NSObject {
static let shared = MP_AnalyticsManager()
//
private var isOLD:Bool
//MARK: -
private let remoteConfig = RemoteConfig.remoteConfig()
//MARK: -
//
private let user_launch:String = "user_launch"
//app退
private let app_crash:String = "app_crash"
//
private let launch_pv:String = "launch_pv"
//fireBase
private let config_success_event:String = "config_success_event"
//
private let launch_progress_end:String = "launch_progress_end"
//
private let jump_event:String = "jump_event"
//A
private let home_a_pv:String = "home_a_pv"
//B
private let home_b_pv:String = "home_b_pv"
//
private let home_b_module_showfailure_error:String = "home_b_module_showfailure_error"
//
private let home_b_module_showsucces_action:String = "home_b_module_showsucces_action"
//
private let home_b_module_click:String = "home_b_module_click"
//B
private let me_b_pv = "me_b_pv"
//
private let song_click = "song_click"
//
private let player_b_imp = "player_b_imp"
//
private let player_b_list = "player_b_list"
//B
private let player_b_pv = "player_b_pv"
//
private let player_b_delay_action = "player_b_delay_action"
//
private let player_b_success_action = "player_b_success_action"
//
private let player_b_failure_error = "player_b_failure_error"
//
private let player_resource_failure = "player_resource_failure"
//IP
private let resource_IP_black = "resource_IP_black"
//
private let player_b_love_click = "player_b_love_click"
//
private let player_b_unlove_click = "player_b_unlove_click"
//
private let player_b_download_click = "player_b_download_click"
//
private let player_b_downloadsuccess_action = "player_b_downloadsuccess_action"
//
private let player_b_downloadfailure_error = "player_b_downloadfailure_error"
//B
private let search_pv = "search_pv"
//
private let search_from_action = "search_from_action"
//B
private let grid_mood_click = "grid_mood_click"
//SUG
private let search_sug_show = "search_sug_show"
//sug
private let search_sug_click = "search_sug_click"
//
private let search_result_pv = "search_result_pv"
//
private let search_resultsuccess_action = "search_resultsuccess_action"
//
private let create_list_action = "create_list_action"
//
private let guide_click = "guide_click"
//
private let library_click = "library_click"
///
private let VIP_click = "VIP_click"
///
private let VIP_page_imp = "VIP_page_imp"
///
private let VIP_continue_click = "VIP_continue_click"
///
private let VIP_buy_success = "VIP_buy_success"
///
private let VIP_buy_failure = "VIP_buy_failure"
///
private let update_reminder_show = "update_reminder_show"
///
private let update_reminder_cancel = "update_reminder_cancel"
///
private let update_reminder_sure = "update_reminder_sure"
private override init() {
//
if UserDefaults.standard.bool(forKey: "UserStatus") {
//
isOLD = true
}else {
//
isOLD = false
UserDefaults.standard.setValue(true, forKey: "UserStatus")
}
super.init()
Crashlytics.crashlytics().log(app_crash)
//
remoteConfig.setDefaults(["versionCode":app_Version as NSObject,
"enter":true as NSObject])
}
//MARK: -
///A/B
func getOpenStatus(_ completion:@escaping ((Bool) -> Void)) {
//
let duration:TimeInterval = 0
remoteConfig.fetch(withExpirationDuration: duration) {[weak self] status, error in
guard let self = self else {return}
if status == .success {
print("获取配置成功,各项功能使用线上配置")
config_success_eventAction()
//
self.remoteConfig.activate { changed, error in
if error == nil{
//App广
if let text = self.remoteConfig.configValue(forKey: "openAppEventDuration").jsonValue as? [String:Any], let seconds = text["times"] as? TimeInterval {
MP_AdMobManager.shared.setOpenAppDuration(seconds)
print("更新了启动App广告时长间隔")
}
//广
if let text = self.remoteConfig.configValue(forKey: "interstitialEventDuration").jsonValue as? [String:Any], let seconds = text["times"] as? TimeInterval {
MP_AdMobManager.shared.setInterstitialDuration(seconds)
print("更新了插页广告时长间隔")
}
//广
if let text = self.remoteConfig.configValue(forKey: "intermediaryEventDuration").jsonValue as? [String:Any], let seconds = text["times"] as? TimeInterval {
MP_AdMobManager.shared.setIntermediaryDuration(seconds)
print("更新了中介广告间隔")
}
//
if let trashLists = self.remoteConfig.configValue(forKey: "trashLists").jsonValue as? [String:Any], let lists = trashLists["lists"] as? [[String:Any]] {
//
var array:[MPPositive_TrashListModel] = lists.map({.init($0)})
array = array.filter({$0.statu == true})
//
var trashKeyWords:[String] = []
var trashSingerIDs:[String] = []
var trashVideoIDs:[String] = []
array.forEach { item in
trashKeyWords.append(contentsOf: item.keyWords)
trashSingerIDs.append(item.singerID)
trashVideoIDs.append(contentsOf: item.videoIDs)
}
//
trashKeyWords = trashKeyWords.filter({$0.isEmpty == false})
MP_NetWorkManager.shared.setTrashKeyWords(trashKeyWords)
trashSingerIDs = trashSingerIDs.filter({$0.isEmpty == false})
MP_NetWorkManager.shared.setTrashSingerIds(trashSingerIDs)
trashVideoIDs = trashVideoIDs.filter({$0.isEmpty == false})
MP_NetWorkManager.shared.setTrashVideoIds(trashVideoIDs)
}
//
if let playerContextVersion = self.remoteConfig.configValue(forKey: "playerContextVersion").jsonValue as? [String:Any] {
print("更新了播放器资源抓取版本配置")
UserDefaults.standard.set(playerContextVersion, forKey: "playerContextVersion")
}
//广
let isAdMuted = self.remoteConfig.configValue(forKey: "isAdMuted").boolValue
UserDefaults.standard.set(isAdMuted, forKey: "isAdMuted")
print("更新了广告静音配置")
//
if let notificationBodyTexts = self.remoteConfig.configValue(forKey: "notificationBodyTexts").jsonValue as? [String:[String]] {
//
for (key, value) in notificationBodyTexts {
UserDefaults.standard.setValue(value, forKey: key)
}
print("更新了通知文本数据")
//
scheduleDailyNotifications()
}
//广
let platform = self.remoteConfig.configValue(forKey: "platform").boolValue
print("广告平台为\(platform ? "AppLovin":"AdMob")")
UserDefaults.standard.set(platform, forKey: "platform")
//
let statu = self.remoteConfig.configValue(forKey: "isShowDownload").boolValue
print("当前下载按钮\(statu ? "可展示":"不可展示")")
UserDefaults.standard.set(statu, forKey: "isShowDownload")
//
if let updateReminder = self.remoteConfig.configValue(forKey: "updateReminder").jsonValue as? [String:Any] {
//
if let statu = updateReminder["statu"] as? Bool, let version = updateReminder["versionCode"] as? String {
//广
if statu {
//
if version == app_Version {
//
isUpDateReminder = false
print("无需更新")
}else {
//
isUpDateReminder = true
print("需要更新")
}
}else {
//
isUpDateReminder = false
print("无需更新")
}
}else {
//
isUpDateReminder = false
print("无需更新")
}
}else {
//
isUpDateReminder = false
print("无需更新")
}
let js = self.remoteConfig.configValue(forKey: "openStatus").jsonValue as! [String:Any]
let value = js["versionCode"] as! String
if value == app_Version {
//
let open = js["enter"] as! Bool
if open {
//广ID-
self.reloadAdMobIDs("adMobNewLevelIDs")
self.reloadAdMobIDs("maxAdLevelIDs")
//b
completion(true)
}else {
//广ID-
self.reloadAdMobIDs("lowPriceAdModIDs")
self.reloadAdMobIDs("maxAdLevelIDs")
//a
completion(false)
}
}else {
//B
//广ID-
self.reloadAdMobIDs("adMobNewLevelIDs")
self.reloadAdMobIDs("maxAdLevelIDs")
completion(true)
}
}
}
}else {
print("获取配置失败,各项功能使用默认配置")
//
if let js = self.remoteConfig.configValue(forKey: "openStatus").jsonValue as? [String:Any] {
//
let value = js["versionCode"] as! String
if value == app_Version {
//
let open = js["enter"] as! Bool
if open {
//b
completion(true)
}else {
//a
completion(false)
}
}else {
//B
completion(true)
}
}else {
//A
completion(false)
}
}
}
}
///AdMob广
private func reloadAdMobIDs(_ adMob:String) {
//使广ID
//广ID
if let adTextIDs = self.remoteConfig.configValue(forKey: adMob).jsonValue as? [String:[[String:Any]]] {
//广ID
for (key, values) in adTextIDs {
var array:[MPPositive_AdItemModel] = []
values.forEach { value in
if let level = value["level"] as? Int, let identifier = value["identifier"] as? String, let ad = value["ad"] as? String, let item = value["type"] as? String, let type = MPPositive_AdModelType(rawValue: item) {
array.append(.init(level: level, identifier: identifier, ad: ad, type: type))
}
}
//arrayjsonData
if array.isEmpty == false, let data = coreAdModelforJson(array) {
UserDefaults.standard.removeObject(forKey: key)
//
print("\(key)---IDs:\(array.count)")
UserDefaults.standard.set(data, forKey: key)
}
}
MP_AdMobManager.shared.reloadAdMobIDs()
}
}
//MARK: -
///
func user_launchAction(){
Analytics.logEvent(user_launch, parameters: nil)
}
///
func launch_pvAction(){
Analytics.logEvent(launch_pv, parameters: nil)
}
///
func config_success_eventAction() {
Analytics.logEvent(config_success_event, parameters: nil)
}
///
func launch_progress_endAction() {
Analytics.logEvent(launch_progress_end, parameters: nil)
}
///
func jump_eventAction(_ side:String, reason:String) {
Analytics.logEvent(jump_event, parameters: ["side":side,
"reason":reason])
}
///A
func home_a_pvAction(){
Analytics.logEvent(home_a_pv, parameters: nil)
}
///B
func home_b_pvAction(){
Analytics.logEvent(home_b_pv, parameters: nil)
}
///
func home_b_module_showfailure_errorAction(_ error:String) {
Analytics.logEvent(home_b_module_showfailure_error, parameters: ["error":error])
}
///
func home_b_module_showsucces_actionAction(){
Analytics.logEvent(home_b_module_showsucces_action, parameters: nil)
}
///
/// - Parameter modulename:
func home_b_module_clickAction(_ modulename:String){
Analytics.logEvent(home_b_module_click, parameters: ["modulename":modulename])
}
///B
func me_b_pvAction(){
Analytics.logEvent(me_b_pv, parameters: nil)
}
///
func song_clickAction(_ songfrom:String) {
Analytics.logEvent(song_click, parameters: ["songfrom":songfrom])
}
///B
func player_b_impAction() {
Analytics.logEvent(player_b_imp, parameters: nil)
}
///B
func player_b_listAction() {
Analytics.logEvent(player_b_list, parameters: nil)
}
/// B
/// - Parameters:
/// - videoid: id
/// - videoname:
/// - artistname:
func player_b_pvAction(_ videoid:String, videoname:String, artistname:String){
Analytics.logEvent(player_b_pv, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname
])
}
///
/// - Parameters:
/// - videoid: id
/// - videoname:
/// - artistname:
func player_b_delay_actionAction(_ videoid:String, videoname:String, artistname:String, delay:String){
Analytics.logEvent(player_b_delay_action, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname,
"delay":delay
])
}
///
/// - Parameters:
/// - videoid: id
/// - videoname:
/// - artistname:
func player_b_success_actionAction(_ videoid:String, videoname:String, artistname:String){
Analytics.logEvent(player_b_success_action, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname
])
}
///
func player_b_failure_errorAction(_ videoid:String, videoname:String, artistname:String, error:String) {
Analytics.logEvent(player_b_failure_error, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname,
"error":error
])
}
///
func player_resource_failureAction(_ code:String) {
Analytics.logEvent(player_resource_failure, parameters: ["area_code":code])
}
///IP
func resource_IP_blackAction() {
var parameters:[String:String] = [:]
if let ipInfo = UserDefaults.standard.object(forKey: "IP_Info") as? String {
parameters["ip"] = ipInfo
}else {
parameters["ip"] = "Unknown"
}
Analytics.logEvent(resource_IP_black, parameters: parameters)
}
///
/// - Parameters:
/// - videoid: id
/// - videoname:
/// - artistname:
func player_b_love_clickAction(_ videoid:String, videoname:String, artistname:String){
Analytics.logEvent(player_b_love_click, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname
])
}
///
/// - Parameters:
/// - videoid: id
/// - videoname:
/// - artistname:
func player_b_unlove_clickAction(_ videoid:String, videoname:String, artistname:String){
Analytics.logEvent(player_b_unlove_click, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname
])
}
///
/// - Parameters:
/// - videoid: id
/// - videoname:
/// - artistname:
func player_b_download_clickAction(_ videoid:String, videoname:String, artistname:String){
Analytics.logEvent(player_b_download_click, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname
])
}
///
/// - Parameters:
/// - videoid: id
/// - videoname:
/// - artistname:
func player_b_downloadsuccess_actionAction(_ videoid:String, videoname:String, artistname:String){
Analytics.logEvent(player_b_downloadsuccess_action, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname
])
}
///
func player_b_downloadfailure_errorAction(_ videoid:String, videoname:String, artistname:String, error:String) {
Analytics.logEvent(player_b_downloadfailure_error, parameters: [
"videoid":videoid,
"videoname":videoname,
"artistname":artistname,
"error":error
])
}
///B
func search_pvAction(){
Analytics.logEvent(search_pv, parameters: nil)
}
///B
func grid_mood_clickAction(_ mood:String) {
Analytics.logEvent(grid_mood_click, parameters: ["mood":mood])
}
///
func search_from_actionAction(_ from:String) {
Analytics.logEvent(search_from_action, parameters: ["search_from":from])
}
///SUG
func search_sug_showAction(){
Analytics.logEvent(search_sug_show, parameters: nil)
}
/// sug
/// - Parameter sugname:
func search_sug_clickAction(_ sugname:String){
Analytics.logEvent(search_sug_click, parameters: ["sugname":sugname])
}
///
func search_result_pvAction(){
Analytics.logEvent(search_result_pv, parameters: nil)
}
///
func search_resultsuccess_actionAction(){
Analytics.logEvent(search_resultsuccess_action, parameters: nil)
}
///
func create_list_actionAction() {
Analytics.logEvent(create_list_action, parameters: nil)
}
///
func guide_clickAction(_ result:String) {
Analytics.logEvent(guide_click, parameters: ["result":result])
}
///
func library_clickAction(_ click:String, folder:String) {
Analytics.logEvent(library_click, parameters: ["click_from":click,
"folder_click":folder])
}
///
func VIP_clickAction() {
Analytics.logEvent(VIP_click, parameters: nil)
}
///
func VIP_page_impAction() {
Analytics.logEvent(VIP_page_imp, parameters: nil)
}
///
func VIP_continue_clickAction(_ productID:String) {
Analytics.logEvent(VIP_continue_click, parameters: ["productID":productID])
}
///
func VIP_buy_successAction(_ productID:String) {
Analytics.logEvent(VIP_buy_success, parameters: ["productID":productID])
}
///
func VIP_buy_failureAction(_ productID:String, error:String) {
Analytics.logEvent(VIP_buy_failure, parameters: ["productID":productID,
"buy_error":error])
}
///
func update_reminder_showAction() {
Analytics.logEvent(update_reminder_show, parameters: nil)
}
///
func update_reminder_sureAction() {
Analytics.logEvent(update_reminder_sure, parameters: nil)
}
///
func update_reminder_cancelAction() {
Analytics.logEvent(update_reminder_cancel, parameters: nil)
}
//MARK: - 广
//
private let cold_ads_chance:String = "cold_ads_chance"
//
private let cold_ads_loadFailure:String = "cold_ads_loadFailure"
//
private let cold_ads_showSuccess:String = "cold_ads_showSuccess"
//
private let cold_ads_showFailure:String = "cold_ads_showFailure"
//
private let cold_ads_close:String = "cold_ads_close"
//
private let hot_ads_chance:String = "hot_ads_chance"
//
private let hot_ads_loadFailure:String = "hot_ads_loadFailure"
//
private let hot_ads_showSuccess:String = "hot_ads_showSuccess"
//
private let hot_ads_showFailure:String = "hot_ads_showFailure"
//
private let search_ads_chance:String = "search_ads_chance"
//
private let search_ads_loadFailure:String = "search_ads_loadFailure"
//
private let search_ads_showSuccess:String = "search_ads_showSuccess"
//
private let search_ads_showFailure:String = "search_ads_showFailure"
//
private let result_ads_chance:String = "result_ads_chance"
//
private let result_ads_show:String = "result_ads_show"
//
private let play_ads_chance:String = "play_ads_chance"
//
private let play_ads_loadFailure:String = "play_ads_loadFailure"
//
private let play_ads_showSuccess:String = "play_ads_showSuccess"
//
private let play_ads_showFailure:String = "play_ads_showFailure"
//
private let dl_ads_chance:String = "dl_ads_chance"
//
private let dl_ads_loadFailure:String = "dl_ads_loadFailure"
//
private let dl_ads_showSuccess:String = "dl_ads_showSuccess"
//
private let dl_ads_showFailure:String = "dl_ads_showFailure"
//
private let cut_ads_chance:String = "cut_ads_chance"
//
private let cut_ads_loadFailure:String = "cut_ads_loadFailure"
//
private let cut_ads_showSuccess:String = "cut_ads_showSuccess"
//
private let cut_ads_showFailure:String = "cut_ads_showFailure"
//
private let listclk_ads_chance:String = "listclk_ads_chance"
//
private let listclk_ads_loadFailure:String = "listclk_ads_loadFailure"
//
private let listclk_ads_showSuccess:String = "listclk_ads_showSuccess"
//
private let listclk_ads_showFailure:String = "listclk_ads_showFailure"
//
private let lbr_ads_chance:String = "lbr_ads_chance"
//
private let lbr_ads_show:String = "lbr_ads_show"
//
private let list_ads_chance:String = "list_ads_chance"
//
private let list_ads_show:String = "list_ads_show"
//
private let ad_session_total_value:String = "ad_session_total_value"
//AppLovin广
//
private let max_lunch_chance:String = "max_lunch_chance"
//
private let max_lunch_loadFailure:String = "max_lunch_loadFailure"
//
private let max_lunch_showSuccess:String = "max_lunch_showSuccess"
//
private let max_lunch_showFailure:String = "max_lunch_showFailure"
//
private let max_search_chance:String = "max_search_chance"
//
private let max_search_loadFailure:String = "max_search_loadFailure"
//
private let max_search_showSuccess:String = "max_search_showSuccess"
//
private let max_search_showFailure:String = "max_search_showFailure"
//
private let max_play_chance:String = "max_play_chance"
//
private let max_play_loadFailure:String = "max_play_loadFailure"
//
private let max_play_showSuccess:String = "max_play_showSuccess"
//
private let max_play_showFailure:String = "max_play_showFailure"
//
private let max_library_chance:String = "max_library_chance"
//
private let max_library_loadFailure:String = "max_library_loadFailure"
//
private let max_library_showSuccess:String = "max_library_showSuccess"
//
private let max_library_showFailure:String = "max_library_showFailure"
//广
private func infoToParameters(_ responseInfo:GADResponseInfo, adValue:GADAdValue) -> [String:Any] {
var mediation = "Unknown"
if let mediation_group_name = responseInfo.extrasDictionary["mediation_group_name"] as? String {
mediation = mediation_group_name
}
let price = valueToUSD(adValue)
let priceString = String(format: "%.5f", price)
//
let parameters:[String:Any] = ["CS_PLATFORM":responseInfo.loadedAdNetworkResponseInfo?.adSourceName ?? "Unknown",
"CS_SOURCE":responseInfo.loadedAdNetworkResponseInfo?.adSourceInstanceName ?? "Unknown",
"CS_UNIT_NAME":mediation,
"CS_CURRENCY":adValue.currencyCode,
"CS_VALUE":priceString,
"CS_STATUS":isOLD ? "Old":"New"]
return parameters
}
///广
func infoFromAdMobSource(_ responseInfo:GADResponseInfo?) -> Bool {
guard let responseInfo = responseInfo else {return false}
return (responseInfo.loadedAdNetworkResponseInfo?.adSourceInstanceName ?? "").contains("AdMob")
}
//
private func valueToUSD(_ adValue:GADAdValue) -> Double {
//
if adValue.currencyCode == "USD" {
return Double(truncating: adValue.value)
}else {
//
return Double(truncating: adValue.value)
}
}
//MARK: - 广
///
func cold_ads_chanceAction() {
Analytics.logEvent(cold_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func cold_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(cold_ads_loadFailure, parameters: parameters)
}
///
func cold_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("冷启动成功展示信息--\(parameters)")
Analytics.logEvent(cold_ads_showSuccess, parameters: parameters)
}
///
func cold_ads_showFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
print("冷启动失败展示信息--\(parameters)")
Analytics.logEvent(cold_ads_showFailure, parameters: parameters)
}
///
func cold_ads_closeAction() {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New"]
Analytics.logEvent(cold_ads_close, parameters: parameters)
}
///
func hot_ads_chanceAction() {
Analytics.logEvent(hot_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func hot_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(hot_ads_loadFailure, parameters: parameters)
}
///
func hot_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("热启动成功展示信息--\(parameters)")
Analytics.logEvent(hot_ads_showSuccess, parameters: parameters)
}
///
func hot_ads_showFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
print("热启动失败展示信息--\(parameters)")
Analytics.logEvent(hot_ads_showFailure, parameters: parameters)
}
///
func search_ads_chanceAction() {
Analytics.logEvent(search_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func search_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(search_ads_loadFailure, parameters: parameters)
}
///
func search_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("搜索插页成功展示信息--\(parameters)")
Analytics.logEvent(search_ads_showSuccess, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func search_ads_showFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
print("搜索插页失败展示信息--\(parameters)")
Analytics.logEvent(search_ads_showFailure, parameters: parameters)
}
///
func result_ads_chanceAction() {
Analytics.logEvent(result_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func result_ads_showAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("搜索结果页成功展示信息--\(parameters)")
Analytics.logEvent(result_ads_show, parameters: parameters)
}
///
func play_ads_chanceAction() {
Analytics.logEvent(play_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func play_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(play_ads_loadFailure, parameters: parameters)
}
///
func play_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("播放插页成功展示信息--\(parameters)")
Analytics.logEvent(play_ads_showSuccess, parameters: parameters)
}
///
func play_ads_showFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
print("播放插页失败展示信息--\(parameters)")
Analytics.logEvent(play_ads_showFailure, parameters: parameters)
}
///
func dl_ads_chanceAction() {
Analytics.logEvent(dl_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func dl_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(dl_ads_loadFailure, parameters: parameters)
}
///
func dl_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("下载插页成功展示信息--\(parameters)")
Analytics.logEvent(dl_ads_showSuccess, parameters: parameters)
}
///
func dl_ads_showFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
print("下载插页失败展示信息--\(parameters)")
Analytics.logEvent(dl_ads_showFailure, parameters: parameters)
}
///
func cut_ads_chanceAction() {
Analytics.logEvent(cut_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func cut_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(cut_ads_loadFailure, parameters: parameters)
}
///
func cut_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("切歌插页成功展示信息--\(parameters)")
Analytics.logEvent(cut_ads_showSuccess, parameters: parameters)
}
///
func cut_ads_showFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
print("切歌插页失败展示信息--\(parameters)")
Analytics.logEvent(cut_ads_showFailure, parameters: parameters)
}
///
func listclk_ads_chanceAction() {
Analytics.logEvent(listclk_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func listclk_ads_loadFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
Analytics.logEvent(listclk_ads_loadFailure, parameters: parameters)
}
///
func listclk_ads_showSuccessAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("列表插页成功展示信息--\(parameters)")
Analytics.logEvent(listclk_ads_showSuccess, parameters: parameters)
}
///
func listclk_ads_showFailureAction(_ error:String) {
let parameters:[String:String] = ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error]
print("列表插页失败展示信息--\(parameters)")
Analytics.logEvent(listclk_ads_showFailure, parameters: parameters)
}
///
func lbr_ads_chanceAction() {
Analytics.logEvent(lbr_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func lbr_ads_showAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("曲库原生成功展示信息--\(parameters)")
Analytics.logEvent(lbr_ads_show, parameters: parameters)
}
///
func list_ads_chanceAction() {
Analytics.logEvent(list_ads_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///
func list_ads_showAction(_ responseInfo:GADResponseInfo, adValue:GADAdValue) {
let parameters:[String:Any] = infoToParameters(responseInfo, adValue: adValue)
print("列表原生成功展示信息--\(parameters)")
Analytics.logEvent(list_ads_show, parameters: parameters)
}
//
func getCurrentLosAngelesTime() -> String {
//
let now = Date()
// DateFormatter
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
//
if let losAngelesTimeZone = TimeZone(identifier: "America/Los_Angeles") {
dateFormatter.timeZone = losAngelesTimeZone
} else {
return "Error: Unable to find Los Angeles Time Zone"
}
//
let losAngelesTimeString = dateFormatter.string(from: now)
return losAngelesTimeString
}
///AppLovin广
func max_lunch_chanceAction() {
Analytics.logEvent(max_lunch_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_lunch_loadFailureAction(_ error:String) {
Analytics.logEvent(max_lunch_loadFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
///AppLovin广
func max_lunch_showSuccessAction() {
Analytics.logEvent(max_lunch_showSuccess, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_lunch_showFailureAction(_ error:String) {
Analytics.logEvent(max_lunch_showFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
///AppLovin广
func max_search_chanceAction() {
Analytics.logEvent(max_search_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_search_loadFailureAction(_ error:String) {
Analytics.logEvent(max_search_loadFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
///AppLovin广
func max_search_showSuccessAction() {
Analytics.logEvent(max_search_showSuccess, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_search_showFailureAction(_ error:String) {
Analytics.logEvent(max_search_showFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
///AppLovin广
func max_play_chanceACtion() {
Analytics.logEvent(max_play_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_play_loadFailureAction(_ error:String) {
Analytics.logEvent(max_play_loadFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
///AppLovin广
func max_play_showSuccessAction() {
Analytics.logEvent(max_play_showSuccess, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_play_showFailureAction(_ error:String) {
Analytics.logEvent(max_play_showFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
///AppLovin广
func max_library_chanceAction() {
Analytics.logEvent(max_library_chance, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_library_loadFailureAction(_ error:String) {
Analytics.logEvent(max_library_loadFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
///AppLovin广
func max_library_showSuccessAction() {
Analytics.logEvent(max_library_showSuccess, parameters: ["CS_STATUS":isOLD ? "Old":"New"])
}
///AppLovin广
func max_library_showFailureAction(_ error:String) {
Analytics.logEvent(max_library_showFailure, parameters: ["CS_STATUS":isOLD ? "Old":"New",
"CS_ERROR":error])
}
}