// // MP_AnalyticsManager.swift // MusicPlayer // // Created by Mr.Zhou on 2024/5/30. // import UIKit import FirebaseAnalytics import FirebaseCrashlytics import FirebaseRemoteConfig /// 埋点管理工具 class MP_AnalyticsManager: NSObject { static let shared = MP_AnalyticsManager() //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" //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_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" //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_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" //B面搜索曝光 private let search_pv = "search_pv" //搜索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 override init() { super.init() Crashlytics.crashlytics().log(app_crash) //为配置设置默认值 // remoteConfig.setDefaults(["openStatus":false as NSObject]) } //MARK: - A/B func getOpenStatus(_ completion:@escaping ((Bool) -> Void)) { //每次启动都要获取值 let duration:TimeInterval = 0 remoteConfig.fetch(withExpirationDuration: duration) { status, error in if status == .success { //配置获取成功 self.remoteConfig.activate { changed, error in if error == nil{ 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 { //配置获取失败,查看缓存内容 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) } } } } //MARK: - 事件日志 ///执行用户启动日志 func user_launchAction(){ Analytics.logEvent(user_launch, parameters: nil) } ///启动页曝光 func launch_pvAction(){ Analytics.logEvent(launch_pv, parameters: nil) } ///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_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) } /// 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 ]) } ///点击收藏 /// - 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 ]) } ///B面搜索曝光 func search_pvAction(){ Analytics.logEvent(search_pv, parameters: nil) } ///搜索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) } }