299 lines
11 KiB
Swift
299 lines
11 KiB
Swift
//
|
||
// 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_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"
|
||
//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_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"
|
||
//搜索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"
|
||
//插页事件间隔时长(默认为5)
|
||
private var times:Double = 5
|
||
private override init() {
|
||
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) { 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)
|
||
}
|
||
//更新热启动插页时长间隔
|
||
let text = self.remoteConfig.configValue(forKey: "interstitialEvent").jsonValue as! [String:Any]
|
||
let seconds = text["times"] as! TimeInterval
|
||
self.times = seconds
|
||
}
|
||
}
|
||
}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)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
///获取间隔时长
|
||
func getTimes() -> TimeInterval {
|
||
return times
|
||
}
|
||
|
||
//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_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)
|
||
}
|
||
|
||
/// 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
|
||
])
|
||
}
|
||
///点击收藏
|
||
/// - 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)
|
||
}
|
||
///搜索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)
|
||
}
|
||
}
|