Musicoo/app/src/main/java/melody/offline/music/util/AnalysisUtil.kt
2024-07-15 16:57:31 +08:00

201 lines
7.9 KiB
Kotlin

package melody.offline.music.util
import android.os.Bundle
import android.text.TextUtils
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import melody.offline.music.ads.AdPlacement
import melody.offline.music.ads.AnalysisAdState
object AnalysisUtil {
const val PARAM_VALUE = "param_value"
const val USER_LAUNCH = "user_launch"//用户启动
const val LAUNCH_PV = "launch_pv"//启动页曝光
const val HOME_A_PV = "home_a_pv"//A面首页曝光
const val HOME_B_PV = "home_b_pv"//B面首页曝光
const val HOME_B_MODULE_SHOW_SUCCESS_ACTION = "home_b_module_show_success_action"//首页资源曝光成功
const val HOME_B_MODULE_SHOW_FAIL_ACTION = "home_b_module_show_fail_action"//首页资源曝光失败
const val HOME_B_MODULE_TRY_AGAIN_ACTION = "home_b_module_try_again_action"//首页资源曝光失败
const val HOME_B_MODULE_CLICK = "home_b_module_click"//点击首页模块
const val ME_B_PV = "me_b_pv"//B面我的曝光
const val PLAYER_B_PV = "player_b_pv"//B面播放器曝光
const val PLAYER_B_DELAY_ACTION = "player_b_delay_action"//统计加载时间
const val PLAYER_B_SUCCESS_ACTION = "player_b_success_action"//播放成功
const val PLAYER_B_LOVE_CLICK = "player_b_love_click"//点击收藏
const val PLAYER_B_UN_LOVE_CLICK = "player_b_un_love_click"//点击收藏
const val PLAYER_B_DOWNLOAD_CLICK = "player_b_download_click"//点击下载
const val PLAYER_B_DOWNLOAD_SUCCESS_ACTION = "player_b_download_success_action"//下载成功
const val SEARCH_PV = "search_pv"//B面搜索曝光
const val SEARCH_SUG_SHOW = "search_sug_show"//搜索SUG曝光
const val SEARCH_SUG_CLICK = "search_sug_click"//点击sug结果
const val SEARCH_RESULT_PV = "search_result_pv"//搜索结果曝光
const val SEARCH_RESULT_SUCCESS_ACTION = "search_result_success_action"//搜索有结果
const val SEARCH_TRIGGER = "search_trigger "//触发搜索
const val RATING_DIALOG_SHOW = "rating_dialog_show"
const val RATING_DIALOG_OK_CLICK = "rating_dialog_ok_click"
const val RATING_DIALOG_CANCEL_CLICK = "rating_dialog_cancel_click"
const val HOME_A_TO_B = "home_a_to_b"
private const val AD_INST_SPLASH_SUCCESS = "ad_user_open_success"//首页开屏广告展示成功
private const val AD_INST_SPLASH_FAIL = "ad_user_open_fail"//首页开屏广告展示失败
private const val AD_INST_SPLASH_LOAD_FAIL = "ad_user_open_load_fail"//首页开屏广告展示load失败
private const val AD_INST_SEARCH_SUCCESS = "ad_inst_search_success"
private const val AD_INST_SEARCH_FAIL = "ad_inst_search_fail"
private const val AD_INST_SEARCH_LOAD_FAIL = "ad_inst_search_load_fail"
private const val AD_INST_INTO_PLAY_SUCCESS = "ad_inst_into_play_success"
private const val AD_INST_INTO_PLAY_FAIL = "ad_inst_into_play_fail"
private const val AD_INST_INTO_PLAY_LOAD_FAIL = "ad_inst_into_play_load_fail"
private const val AD_INST_CUTTING_SONG_SUCCESS = "ad_inst_cutting_song_success"
private const val AD_INST_CUTTING_SONG_FAIL = "ad_inst_cutting_song_fail"
private const val AD_INST_CUTTING_SONG_LOAD_FAIL = "ad_inst_cutting_song_load_fail"
private const val AD_INST_DOWNLOAD_SUCCESS = "ad_inst_download_success"
private const val AD_INST_DOWNLOAD_FAIL = "ad_inst_download_fail"
private const val AD_INST_DOWNLOAD_LOAD_FAIL = "ad_inst_download_load_fail"
private const val AD_INST_ME_PAGE_LIST_SUCCESS = "ad_inst_me_page_list_success"
private const val AD_INST_ME_PAGE_LIST_FAIL = "ad_inst_me_page_list_fail"
private const val AD_INST_ME_PAGE_LIST_LOAD_FAIL = "ad_inst_me_page_list_load_fail"
private var firebaseAnalytics: FirebaseAnalytics? = null
fun logEvent(eventName: String, myParam: Map<String, String>? = null) {
try {
if (firebaseAnalytics == null) {
firebaseAnalytics = Firebase.analytics
}
} catch (ignore: Exception) {
}
if (myParam != null) {
val bundle = Bundle()
try {
for ((key, value) in myParam) {
if (!TextUtils.isEmpty(value) && !TextUtils.isEmpty(key)) {
bundle.putString(key, value)
}
}
firebaseAnalytics?.logEvent(eventName, bundle)
} catch (ignore: Exception) {
}
} else {
try {
firebaseAnalytics?.logEvent(eventName, null)
} catch (ignore: Exception) {
}
}
}
/**
* 统一广告打点方法
*/
fun placeToLogEvent(
place: String, state: Int, param: Map<String, String>? = null
) {
when (place) {//对应广告位,进行打点。
//开屏广告,启动页广告位
AdPlacement.INST_SPLASH -> {
when (state) {
AnalysisAdState.AD_LOAD_FAILED -> {
logEvent(AD_INST_SPLASH_LOAD_FAIL, param)
}
AnalysisAdState.AD_SHOW_FAILED -> {
logEvent(AD_INST_SPLASH_FAIL, param)
}
AnalysisAdState.AD_SHOWN -> {
logEvent(AD_INST_SPLASH_SUCCESS)
}
}
}
AdPlacement.INST_SEARCH -> {
when (state) {
AnalysisAdState.AD_LOAD_FAILED -> {
logEvent(AD_INST_SEARCH_LOAD_FAIL, param)
}
AnalysisAdState.AD_SHOW_FAILED -> {
logEvent(AD_INST_SEARCH_FAIL, param)
}
AnalysisAdState.AD_SHOWN -> {
logEvent(AD_INST_SEARCH_SUCCESS)
}
}
}
AdPlacement.INST_INTO_PLAY -> {
when (state) {
AnalysisAdState.AD_LOAD_FAILED -> {
logEvent(AD_INST_INTO_PLAY_LOAD_FAIL, param)
}
AnalysisAdState.AD_SHOW_FAILED -> {
logEvent(AD_INST_INTO_PLAY_FAIL, param)
}
AnalysisAdState.AD_SHOWN -> {
logEvent(AD_INST_INTO_PLAY_SUCCESS)
}
}
}
AdPlacement.INST_CUTTING_SONG -> {
when (state) {
AnalysisAdState.AD_LOAD_FAILED -> {
logEvent(AD_INST_CUTTING_SONG_LOAD_FAIL, param)
}
AnalysisAdState.AD_SHOW_FAILED -> {
logEvent(AD_INST_CUTTING_SONG_FAIL, param)
}
AnalysisAdState.AD_SHOWN -> {
logEvent(AD_INST_CUTTING_SONG_SUCCESS)
}
}
}
AdPlacement.INST_DOWNLOAD -> {
when (state) {
AnalysisAdState.AD_LOAD_FAILED -> {
logEvent(AD_INST_DOWNLOAD_LOAD_FAIL, param)
}
AnalysisAdState.AD_SHOW_FAILED -> {
logEvent(AD_INST_DOWNLOAD_FAIL, param)
}
AnalysisAdState.AD_SHOWN -> {
logEvent(AD_INST_DOWNLOAD_SUCCESS)
}
}
}
AdPlacement.INST_ME_PAGE_LIST -> {
when (state) {
AnalysisAdState.AD_LOAD_FAILED -> {
logEvent(AD_INST_ME_PAGE_LIST_LOAD_FAIL, param)
}
AnalysisAdState.AD_SHOW_FAILED -> {
logEvent(AD_INST_ME_PAGE_LIST_FAIL, param)
}
AnalysisAdState.AD_SHOWN -> {
logEvent(AD_INST_ME_PAGE_LIST_SUCCESS)
}
}
}
}
}
}