打点事件更新

This commit is contained in:
ocean 2024-06-20 16:53:19 +08:00
parent 05499cddb4
commit c7e66e2ab2
16 changed files with 35 additions and 62 deletions

View File

@ -21,12 +21,15 @@ class LaunchActivity : MoBaseActivity() {
private const val MSG_PROGRESS = 0 private const val MSG_PROGRESS = 0
private const val MSG_LOAD_AD_LOADED = 1 private const val MSG_LOAD_AD_LOADED = 1
private const val MSG_LOAD_AD_FAIL = 2 private const val MSG_LOAD_AD_FAIL = 2
const val FROM_TYPE = "STARTED_FROM_ON_ACTIVITY_STARTED_TYPE"
} }
private lateinit var binding: ActivityLaunchBinding private lateinit var binding: ActivityLaunchBinding
private val mMaxLoading = 10000L//最大超时 private val mMaxLoading = 10000L//最大超时
private var progress = 0f private var progress = 0f
private val delayMillis = mMaxLoading / 100 private val delayMillis = mMaxLoading / 100
private var type = -1
private val handler = object : Handler(Looper.getMainLooper()) { private val handler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) { override fun handleMessage(msg: Message) {
@ -78,6 +81,8 @@ class LaunchActivity : MoBaseActivity() {
override suspend fun main() { override suspend fun main() {
binding = ActivityLaunchBinding.inflate(layoutInflater) binding = ActivityLaunchBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
AnalysisUtil.logEvent(AnalysisUtil.LAUNCH_PV)
type = intent.getIntExtra(FROM_TYPE, -1)
loadAd() loadAd()
handler.sendEmptyMessageDelayed(MSG_PROGRESS, delayMillis) handler.sendEmptyMessageDelayed(MSG_PROGRESS, delayMillis)
immersionBar { immersionBar {
@ -88,12 +93,18 @@ class LaunchActivity : MoBaseActivity() {
private fun toMainActivity() { private fun toMainActivity() {
if (!withPermission()) { if (!withPermission()) {
if (type == 1) {//如果type等于1则是从后台进入的应用不进行跳转直接关闭启动页
finish()
return
}
startActivity(Intent(this, MainActivity::class.java)) startActivity(Intent(this, MainActivity::class.java))
} else { } else {
if (type == 1) {
finish()
return
}
startActivity(Intent(this, PrimaryActivity::class.java)) startActivity(Intent(this, PrimaryActivity::class.java))
} }
AnalysisUtil.logEvent(AnalysisUtil.LAUNCH_PV)
finish()
} }
private fun loadAd() { private fun loadAd() {

View File

@ -88,6 +88,7 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
override suspend fun main() { override suspend fun main() {
binding = ActivityMoPlayDetailsBinding.inflate(layoutInflater) binding = ActivityMoPlayDetailsBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
AnalysisUtil.logEvent(AnalysisUtil.PLAYER_B_PV)
showAD() showAD()
initImmersionBar() initImmersionBar()
initClick() initClick()
@ -754,8 +755,6 @@ class MoPlayDetailsActivity : MoBaseActivity(), Player.Listener {
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()
meController?.removeListener(playerListener) meController?.removeListener(playerListener)
AnalysisUtil.logEvent(AnalysisUtil.PLAYER_B_PV)
} }
private fun updateProgressUi() { private fun updateProgressUi() {

View File

@ -33,8 +33,6 @@ class RealHumanVoiceAdapter(
val intent = Intent(context, PlayDetailsActivity::class.java); val intent = Intent(context, PlayDetailsActivity::class.java);
intent.putExtra(PlayDetailsActivity.KEY_DETAILS_AUDIO, audio) intent.putExtra(PlayDetailsActivity.KEY_DETAILS_AUDIO, audio)
context.startActivity(intent) context.startActivity(intent)
AnalysisUtil.logEvent(AnalysisUtil.HOME_A_PV)
} }
} }

View File

@ -69,9 +69,6 @@ class ResponsiveListAdapter(
holder.bind(url, name, desc, videoId) holder.bind(url, name, desc, videoId)
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
//离开上报,那就跳走上报。
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_PV)
val intent = Intent(context, MoPlayDetailsActivity::class.java) val intent = Intent(context, MoPlayDetailsActivity::class.java)
intent.putExtra(MoPlayDetailsActivity.PLAY_DETAILS_VIDEO_ID, videoId) intent.putExtra(MoPlayDetailsActivity.PLAY_DETAILS_VIDEO_ID, videoId)
intent.putExtra(MoPlayDetailsActivity.PLAY_DETAILS_PLAY_LIST_ID, playlistId) intent.putExtra(MoPlayDetailsActivity.PLAY_DETAILS_PLAY_LIST_ID, playlistId)

View File

@ -35,8 +35,6 @@ class SoundsOfAppliancesAdapter(
intent.putExtra(PlayDetailsActivity.KEY_DETAILS_AUDIO, audio) intent.putExtra(PlayDetailsActivity.KEY_DETAILS_AUDIO, audio)
context.startActivity(intent) context.startActivity(intent)
// mediaPlayer.setDataSource(this, Uri.parse("file:///android_asset/${audio.file}")) // mediaPlayer.setDataSource(this, Uri.parse("file:///android_asset/${audio.file}"))
AnalysisUtil.logEvent(AnalysisUtil.HOME_A_PV)
} }
} }

View File

@ -35,8 +35,6 @@ class SoundsOfNatureAdapter(
intent.putExtra(PlayDetailsActivity.KEY_DETAILS_AUDIO, audio) intent.putExtra(PlayDetailsActivity.KEY_DETAILS_AUDIO, audio)
context.startActivity(intent) context.startActivity(intent)
// mediaPlayer.setDataSource(this, Uri.parse("file:///android_asset/${audio.file}")) // mediaPlayer.setDataSource(this, Uri.parse("file:///android_asset/${audio.file}"))
AnalysisUtil.logEvent(AnalysisUtil.HOME_A_PV)
} }
} }

View File

@ -70,8 +70,6 @@ class TowRowListAdapter(
holder.bind(url = url, name = name, desc = desc) holder.bind(url = url, name = name, desc = desc)
holder.itemView.setOnClickListener { holder.itemView.setOnClickListener {
//离开上报,那就跳走上报。
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_PV)
if (itemClickListener != null) { if (itemClickListener != null) {
itemClickListener?.onItemClick(position) itemClickListener?.onItemClick(position)
} }

View File

@ -74,6 +74,7 @@ class HomeFragment : Fragment() {
@SuppressLint("NotifyDataSetChanged") @SuppressLint("NotifyDataSetChanged")
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
AnalysisUtil.logEvent(AnalysisUtil.HOME_A_PV)
if (melody.offline.music.App.currentPlayingAudio != null) { if (melody.offline.music.App.currentPlayingAudio != null) {
if (melody.offline.music.App.realHumanVoiceList.isNotEmpty()) { if (melody.offline.music.App.realHumanVoiceList.isNotEmpty()) {
for ((index, audio) in melody.offline.music.App.realHumanVoiceList.withIndex()) { for ((index, audio) in melody.offline.music.App.realHumanVoiceList.withIndex()) {
@ -107,13 +108,10 @@ class HomeFragment : Fragment() {
super.onHiddenChanged(hidden) super.onHiddenChanged(hidden)
if (!hidden) { if (!hidden) {
initImmersionBar() initImmersionBar()
AnalysisUtil.logEvent(AnalysisUtil.HOME_A_PV)
} }
} }
override fun onDestroy() { override fun onDestroy() {
AnalysisUtil.logEvent(AnalysisUtil.HOME_A_PV)
super.onDestroy() super.onDestroy()
} }

View File

@ -15,7 +15,9 @@ import melody.offline.music.view.MusicTowRowListView
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import melody.offline.music.ads.AnalysisAdState
import melody.offline.music.util.AnalysisUtil import melody.offline.music.util.AnalysisUtil
import org.json.JSONObject
class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() { class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {
@ -71,9 +73,9 @@ class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {
private suspend fun initData() { private suspend fun initData() {
showLoadingUi() showLoadingUi()
Innertube.homePage(appStore.myVisitorData)?.onSuccess { Innertube.homePage(appStore.myVisitorData)?.onSuccess {
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_MODULE_SHOW_SUCCESS_ACTION)
showDataUi() showDataUi()
if (it.homePage.isNotEmpty()) { if (it.homePage.isNotEmpty()) {
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_MODULE_SHOW_SUCCESS_ACTION)
for (home: Innertube.HomePage in it.homePage) { for (home: Innertube.HomePage in it.homePage) {
for (content: MusicCarouselShelfRenderer.Content in home.contents) { for (content: MusicCarouselShelfRenderer.Content in home.contents) {
if (content.musicResponsiveListItemRenderer != null) { if (content.musicResponsiveListItemRenderer != null) {
@ -99,11 +101,11 @@ class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {
initHomeDataMore(it) initHomeDataMore(it)
} else { } else {
LogD(TAG, "homePage size 0") LogD(TAG, "homePage size 0")
showNoContentUi() showNoContentUi("homePage size 0")
} }
}?.onFailure { }?.onFailure {
showNoContentUi()
LogD(TAG, "homePage onFailure->${it}") LogD(TAG, "homePage onFailure->${it}")
showNoContentUi(it.message.toString())
} }
} }
@ -152,21 +154,17 @@ class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
initImmersionBar() initImmersionBar()
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_PV)
} }
override fun onHiddenChanged(hidden: Boolean) { override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden) super.onHiddenChanged(hidden)
if (!hidden) { if (!hidden) {
initImmersionBar() initImmersionBar()
} else {
//离开上报,那就隐藏上报。
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_PV)
} }
} }
override fun onDestroy() { override fun onDestroy() {
//离开上报
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_PV)
super.onDestroy() super.onDestroy()
} }
@ -180,7 +178,12 @@ class MoHomeFragment : MoBaseFragment<FragmentMoHomeBinding>() {
binding.noContentLayout.visibility = View.GONE binding.noContentLayout.visibility = View.GONE
} }
private fun showNoContentUi() { private fun showNoContentUi(string: String) {
val jsonObject = JSONObject()
jsonObject.put("fail", string)
val map = mutableMapOf(Pair(AnalysisUtil.PARAM_VALUE, jsonObject.toString()))
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_MODULE_SHOW_FAIL_ACTION, map)
binding.loadingLayout.visibility = View.GONE binding.loadingLayout.visibility = View.GONE
binding.noContentLayout.visibility = View.VISIBLE binding.noContentLayout.visibility = View.VISIBLE
} }

View File

@ -65,14 +65,12 @@ class MoMeFragment : MoBaseFragment<FragmentMoMeBinding>() {
val intent = Intent(requireActivity(), SettingsActivity::class.java) val intent = Intent(requireActivity(), SettingsActivity::class.java)
intent.putExtra(SettingsActivity.FROM_TO_SETTING, MoMeFragment::class.java) intent.putExtra(SettingsActivity.FROM_TO_SETTING, MoMeFragment::class.java)
startActivity(intent) startActivity(intent)
AnalysisUtil.logEvent(AnalysisUtil.ME_B_PV)
} }
binding.likedSongsBtn.setOnClickListener { binding.likedSongsBtn.setOnClickListener {
val count = binding.likedSongsTv.text.toString().trim().toInt() val count = binding.likedSongsTv.text.toString().trim().toInt()
if (count > 0) { if (count > 0) {
val intent = Intent(context, MoLikedSongsActivity::class.java) val intent = Intent(context, MoLikedSongsActivity::class.java)
startActivity(intent) startActivity(intent)
AnalysisUtil.logEvent(AnalysisUtil.ME_B_PV)
} else { } else {
Toast.makeText( Toast.makeText(
activity, getString(R.string.liked_songs_no_data_prompt), Toast.LENGTH_LONG activity, getString(R.string.liked_songs_no_data_prompt), Toast.LENGTH_LONG
@ -84,7 +82,6 @@ class MoMeFragment : MoBaseFragment<FragmentMoMeBinding>() {
if (count > 0) { if (count > 0) {
val intent = Intent(context, MoOfflineSongsActivity::class.java) val intent = Intent(context, MoOfflineSongsActivity::class.java)
startActivity(intent) startActivity(intent)
AnalysisUtil.logEvent(AnalysisUtil.ME_B_PV)
} else { } else {
Toast.makeText( Toast.makeText(
activity, getString(R.string.offline_songs_no_data_prompt), Toast.LENGTH_LONG activity, getString(R.string.offline_songs_no_data_prompt), Toast.LENGTH_LONG
@ -108,7 +105,7 @@ class MoMeFragment : MoBaseFragment<FragmentMoMeBinding>() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
initImmersionBar() initImmersionBar()
AnalysisUtil.logEvent(AnalysisUtil.ME_B_PV)
LolAdWrapper.shared.loadAdShowNativeAd( LolAdWrapper.shared.loadAdShowNativeAd(
requireActivity(), requireActivity(),
AdPlacement.NATIVE_ME_PAGE_LIST, AdPlacement.NATIVE_ME_PAGE_LIST,
@ -122,8 +119,6 @@ class MoMeFragment : MoBaseFragment<FragmentMoMeBinding>() {
super.onHiddenChanged(hidden) super.onHiddenChanged(hidden)
if (!hidden) { if (!hidden) {
initImmersionBar() initImmersionBar()
} else {
AnalysisUtil.logEvent(AnalysisUtil.ME_B_PV)
} }
} }
} }

View File

@ -81,6 +81,7 @@ class SearchFragment : MoBaseFragment<FragmentSearchBinding>(), TextWatcher,
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
AnalysisUtil.logEvent(AnalysisUtil.SEARCH_PV)
LolAdWrapper.shared.loadAdShowNativeAd( LolAdWrapper.shared.loadAdShowNativeAd(
requireActivity(), requireActivity(),
AdPlacement.NATIVE_SEARCH, AdPlacement.NATIVE_SEARCH,
@ -179,6 +180,7 @@ class SearchFragment : MoBaseFragment<FragmentSearchBinding>(), TextWatcher,
} }
is Request.SearchData -> { is Request.SearchData -> {
AnalysisUtil.logEvent(AnalysisUtil.SEARCH_TRIGGER)
LolAdWrapper.shared.showAdTiming( LolAdWrapper.shared.showAdTiming(
requireActivity(), AdPlacement.INST_SEARCH requireActivity(), AdPlacement.INST_SEARCH
) )
@ -239,9 +241,6 @@ class SearchFragment : MoBaseFragment<FragmentSearchBinding>(), TextWatcher,
binding.searchEdit.clearFocus() binding.searchEdit.clearFocus()
binding.searchEdit.text.clear() binding.searchEdit.text.clear()
binding.contentLayout.removeAllViews() binding.contentLayout.removeAllViews()
//隐藏上报
AnalysisUtil.logEvent(AnalysisUtil.SEARCH_PV)
} }
} }

View File

@ -17,6 +17,7 @@ object AnalysisUtil {
const val HOME_A_PV = "home_a_pv"//A面首页曝光 const val HOME_A_PV = "home_a_pv"//A面首页曝光
const val HOME_B_PV = "home_b_pv"//B面首页曝光 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_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_CLICK = "home_b_module_click"//点击首页模块 const val HOME_B_MODULE_CLICK = "home_b_module_click"//点击首页模块
const val ME_B_PV = "me_b_pv"//B面我的曝光 const val ME_B_PV = "me_b_pv"//B面我的曝光
const val PLAYER_B_PV = "player_b_pv"//B面播放器曝光 const val PLAYER_B_PV = "player_b_pv"//B面播放器曝光
@ -31,6 +32,7 @@ object AnalysisUtil {
const val SEARCH_SUG_CLICK = "search_sug_click"//点击sug结果 const val SEARCH_SUG_CLICK = "search_sug_click"//点击sug结果
const val SEARCH_RESULT_PV = "search_result_pv"//搜索结果曝光 const val SEARCH_RESULT_PV = "search_result_pv"//搜索结果曝光
const val SEARCH_RESULT_SUCCESS_ACTION = "search_result_success_action"//搜索有结果 const val SEARCH_RESULT_SUCCESS_ACTION = "search_result_success_action"//搜索有结果
const val SEARCH_TRIGGER = "search_trigger "//触发搜索
private const val AD_INST_SPLASH_SUCCESS = "ad_user_open_success"//首页开屏广告展示成功 private const val AD_INST_SPLASH_SUCCESS = "ad_user_open_success"//首页开屏广告展示成功

View File

@ -13,7 +13,8 @@ import melody.offline.music.activity.LaunchActivity
* *
* @param application 应用程序实例 * @param application 应用程序实例
*/ */
class AppLifecycleHandler(private val application: Application) : Application.ActivityLifecycleCallbacks { class AppLifecycleHandler(private val application: Application) :
Application.ActivityLifecycleCallbacks {
private var activityReferences = 0 private var activityReferences = 0
private var isActivityChangingConfigurations = false private var isActivityChangingConfigurations = false
@ -34,6 +35,7 @@ class AppLifecycleHandler(private val application: Application) : Application.Ac
//间隔时间是否满足当前不是启动页当前不是广告show //间隔时间是否满足当前不是启动页当前不是广告show
if (currentTime - lastPausedTime > intervalTime && activity !is LaunchActivity && !isAdShowing) { if (currentTime - lastPausedTime > intervalTime && activity !is LaunchActivity && !isAdShowing) {
val intent = Intent(activity, LaunchActivity::class.java) val intent = Intent(activity, LaunchActivity::class.java)
intent.putExtra(LaunchActivity.FROM_TYPE, 1)
activity.startActivity(intent) activity.startActivity(intent)
} }
} }

View File

@ -81,24 +81,6 @@ class MusicPlayerView(
} }
} }
goDetailsBtn.setOnClickListener { goDetailsBtn.setOnClickListener {
when (context) {
is PrimaryActivity -> {
when (context.getCurrentFragment()) {
is MoHomeFragment -> {
AnalysisUtil.logEvent(AnalysisUtil.HOME_B_PV)
}
is SearchFragment -> {
AnalysisUtil.logEvent(AnalysisUtil.SEARCH_PV)
}
is MoMeFragment -> {
AnalysisUtil.logEvent(AnalysisUtil.ME_B_PV)
}
}
}
}
val intent = Intent(context, MoPlayDetailsActivity::class.java) val intent = Intent(context, MoPlayDetailsActivity::class.java)
intent.putExtra( intent.putExtra(
MoPlayDetailsActivity.PLAY_DETAILS_COME_FROM, MoPlayDetailsActivity.PLAY_DETAILS_COME_FROM,

View File

@ -38,7 +38,6 @@ class SearchResultOptimalView(context: Context, data: Innertube.SearchDataPage)
val playBtn = contentView?.findViewById<LinearLayout>(R.id.playBtn) val playBtn = contentView?.findViewById<LinearLayout>(R.id.playBtn)
playBtn?.setOnClickListener { playBtn?.setOnClickListener {
AnalysisUtil.logEvent(AnalysisUtil.SEARCH_PV)
if (optimalBean != null) { if (optimalBean != null) {
if (!optimalBean.videoId.isNullOrEmpty()) { if (!optimalBean.videoId.isNullOrEmpty()) {
val intent = Intent(context, MoPlayDetailsActivity::class.java) val intent = Intent(context, MoPlayDetailsActivity::class.java)

View File

@ -23,7 +23,6 @@ class SearchResultOtherView(context: Context, data: Innertube.SearchDataPage) :
val moreBtn = contentView?.findViewById<LinearLayout>(R.id.moreBtn) val moreBtn = contentView?.findViewById<LinearLayout>(R.id.moreBtn)
moreBtn?.setOnClickListener { moreBtn?.setOnClickListener {
AnalysisUtil.logEvent(AnalysisUtil.SEARCH_PV)
val intent = Intent(context, MoSearchMoreActivity::class.java) val intent = Intent(context, MoSearchMoreActivity::class.java)
intent.putExtra(MoSearchMoreActivity.SEARCH_MORE_QUERY, data.query) intent.putExtra(MoSearchMoreActivity.SEARCH_MORE_QUERY, data.query)
intent.putExtra(MoSearchMoreActivity.SEARCH_MORE_PARAMS, data.params) intent.putExtra(MoSearchMoreActivity.SEARCH_MORE_PARAMS, data.params)
@ -32,11 +31,6 @@ class SearchResultOtherView(context: Context, data: Innertube.SearchDataPage) :
val rv = contentView?.findViewById<RecyclerView>(R.id.rv) val rv = contentView?.findViewById<RecyclerView>(R.id.rv)
val adapter = SearchResultOtherAdapter(context, data.searchResultList) val adapter = SearchResultOtherAdapter(context, data.searchResultList)
adapter.setOnItemClickListener(object :SearchResultOtherAdapter.OnItemClickListener{
override fun onItemClick(position: Int) {
AnalysisUtil.logEvent(AnalysisUtil.SEARCH_PV)
}
})
rv?.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) rv?.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
rv?.adapter = adapter rv?.adapter = adapter