看激励广告 多种情况的埋点

This commit is contained in:
renhaoting 2026-01-05 11:42:35 +08:00
parent 6371d8075c
commit 6c858ca0d7
6 changed files with 214 additions and 42 deletions

View File

@ -5,6 +5,8 @@ plugins {
// alias(libs.plugins.ksp) // alias(libs.plugins.ksp)
alias(libs.plugins.protobuf) alias(libs.plugins.protobuf)
id 'kotlin-kapt' id 'kotlin-kapt'
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
} }
android { android {

View File

@ -14,6 +14,7 @@ import com.ama.core.architecture.util.AndroidUtil
import com.ama.core.architecture.util.CommonItemDecoration import com.ama.core.architecture.util.CommonItemDecoration
import com.ama.core.architecture.util.DateUtil import com.ama.core.architecture.util.DateUtil
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.gamedog.vididin.StatisticUtil
import com.gamedog.vididin.VidiConst import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.beans.WatchAdNotifyBean import com.gamedog.vididin.beans.WatchAdNotifyBean
@ -71,6 +72,7 @@ class WithDrawSubActivity : AppViewsEmptyViewModelActivity<ViewBinding>() {
when (mCurItem.subItemList[mSelectingIndex].withdrawState) { when (mCurItem.subItemList[mSelectingIndex].withdrawState) {
WithdrawManager.STATE_NEED_WATCH_AD -> { WithdrawManager.STATE_NEED_WATCH_AD -> {
gotoWatchAd() gotoWatchAd()
sendClickStatistic()
} }
WithdrawManager.STATE_COULD_WITHDRAW -> { WithdrawManager.STATE_COULD_WITHDRAW -> {
@ -315,6 +317,8 @@ class WithDrawSubActivity : AppViewsEmptyViewModelActivity<ViewBinding>() {
tvAction.setText(R.string.withdraw_cash_out) tvAction.setText(R.string.withdraw_cash_out)
flAction.isClickable = true flAction.isClickable = true
flAction.alpha = 1F flAction.alpha = 1F
sendShowStatistic()
} else { } else {
var actionText = R.string.withdraw_cash_out var actionText = R.string.withdraw_cash_out
when(subBean.withdrawState) { when(subBean.withdrawState) {
@ -341,6 +345,14 @@ class WithDrawSubActivity : AppViewsEmptyViewModelActivity<ViewBinding>() {
} }
} }
private fun sendShowStatistic() {
StatisticUtil.reportEvents(StatisticUtil.KEY_RV_Button_Show, mapOf("Position" to "RV_Accelerate2"))
}
private fun sendClickStatistic() {
StatisticUtil.reportEvents(StatisticUtil.KEY_RV_Button_Click_Game, mapOf("Position" to "RV_Accelerate2"))
}
override fun ViewBinding.initObservers() { override fun ViewBinding.initObservers() {
} }

View File

@ -4,11 +4,12 @@ import android.app.Activity
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.StatisticUtil
import com.viddin.videos.free.databinding.DialogWatchVideoBinding import com.viddin.videos.free.databinding.DialogWatchVideoBinding
import com.gamedog.vididin.router.Router import com.gamedog.vididin.router.Router
class WatchAdDialog(context: Activity, private val mWatchAdType: Int, private val mGoldNum: Int? = 0, class WatchAdDialog(context: Activity, private val mWatchAdType: Int, statisticType: Int, private val mGoldNum: Int? = 0,
private val mTaskDataJson: String? = "") private val mTaskDataJson: String? = "")
: BindingDialog<DialogWatchVideoBinding>(context, DialogWatchVideoBinding::inflate) { : BindingDialog<DialogWatchVideoBinding>(context, DialogWatchVideoBinding::inflate) {
@ -34,6 +35,8 @@ class WatchAdDialog(context: Activity, private val mWatchAdType: Int, private va
} }
flAction -> { flAction -> {
gotoWatchVideo() gotoWatchVideo()
sendClickStatistic()
} }
} }
} }
@ -46,6 +49,46 @@ class WatchAdDialog(context: Activity, private val mWatchAdType: Int, private va
} }
} }
sendShowStatistic()
}
private fun getShowFromStr(watchAdType: Int): String {
val fromStr = ""
when (watchAdType) {
FROM_WATCH_5VIDEOS -> {
return "RV_VideoStream"
}
FROM_TASK_FRAGMENT_ICON -> {
return "RV_Coin"
}
FROM_CONVERT_GOLD_TO_CASH -> {
return "RV_Exchange"
}
FROM_DIALY_TASKS -> {
return "RV_Daily_Task"
}
FROM_HOME_MENU -> {
return "RV_Home_Menu"
}
}
return fromStr
}
private fun sendShowStatistic() {
StatisticUtil.reportEvents(StatisticUtil.KEY_RV_Button_Show, mapOf("Position" to getShowFromStr(mWatchAdType)))
}
private fun sendClickStatistic() {
StatisticUtil.reportEvents(StatisticUtil.KEY_RV_Button_Click_Game, mapOf("Position" to getShowFromStr(mWatchAdType)))
} }
private fun gotoWatchVideo() { private fun gotoWatchVideo() {
@ -58,5 +101,29 @@ class WatchAdDialog(context: Activity, private val mWatchAdType: Int, private va
mOnClosed = onClose mOnClosed = onClose
} }
companion object {
val FROM_WATCH_5VIDEOS: Int = 1
val FROM_TASK_FRAGMENT_ICON: Int = 2
/*val FROM_SIGN_AD_FOR_DOUBLE: Int = 3
val FROM_SIGN_AD_FOR_EXTRA: Int = 4
val FROM_SIGN_AD_FOR_SUPPLEMENT: Int = 5
val FROM_WITHDRAW_PROGRESS: Int = 6*/
val FROM_DIALY_TASKS: Int = 7
val FROM_CONVERT_GOLD_TO_CASH: Int = 8
val FROM_HOME_MENU: Int = 9
/*1每观看5个视频后插入一条激励视频广告用户可选择观看完15-30秒广告以获得大额金币奖励
2"看视频获得金币奖励
3"签到页面观看视频获得双倍奖励
4签到页面观看视频获得额外奖励
5签到页面观看视频进行补签
6观看视频加速小额进度提现
7观看视频加速大额进度提现
8观看视频可以金币兑换现金*/
}
} }

View File

@ -90,7 +90,7 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
Router.Benefit.startActivity(requireActivity()) Router.Benefit.startActivity(requireActivity())
}, },
PopMenuIconView.MenuItem(R.mipmap.home_menu_2) { PopMenuIconView.MenuItem(R.mipmap.home_menu_2) {
WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_EARN_GOLD, null).show() WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_EARN_GOLD, WatchAdDialog.FROM_HOME_MENU,null).show()
}, },
PopMenuIconView.MenuItem(R.mipmap.home_menu_3) { PopMenuIconView.MenuItem(R.mipmap.home_menu_3) {
Router.Game.startActivity(requireActivity()) Router.Game.startActivity(requireActivity())
@ -289,7 +289,8 @@ class HomeFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnSwit
} }
private fun handleShouldShowAdDialog() { private fun handleShouldShowAdDialog() {
val adDialog = WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_WATCH_AD, null) val adDialog = WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_WATCH_AD,
WatchAdDialog.FROM_WATCH_5VIDEOS,null)
adDialog.setOnCloseListener { adDialog.setOnCloseListener {
showInterstitialAd {} showInterstitialAd {}
} }

View File

@ -97,7 +97,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
} }
llTaskWatchAd->{ llTaskWatchAd->{
WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_EARN_GOLD, 200).show() WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_EARN_GOLD, WatchAdDialog.FROM_TASK_FRAGMENT_ICON, 200).show()
} }
llTaskGame->{ llTaskGame->{
@ -109,7 +109,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
} }
tvWatchVideoForConvertGoldToCash->{ tvWatchVideoForConvertGoldToCash->{
WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_CONVERT_GOLD_2_CASH, null).show() WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_CONVERT_GOLD_2_CASH, WatchAdDialog.FROM_CONVERT_GOLD_TO_CASH, null).show()
} }
tvWithdraw->{ tvWithdraw->{
@ -470,7 +470,7 @@ class TasksFragment : AppViewsFragment<ViewBinding, UiState, ViewModel>(), OnTab
val subTaskState = subTaskList[itemIndex] val subTaskState = subTaskList[itemIndex]
when (subTaskState.state) { when (subTaskState.state) {
STATE_ONGOING -> { STATE_ONGOING -> {
WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_WATCH_AD, null).show() WatchAdDialog(requireActivity(), VidiConst.WATCH_AD_FOR_DAILY_WATCH_AD, WatchAdDialog.FROM_DIALY_TASKS, null).show()
} }
STATE_FINISH -> { STATE_FINISH -> {
if (TaskManager.instance().dailyWatchAdStatus().claimSubTaskReward(itemIndex, true)) { if (TaskManager.instance().dailyWatchAdStatus().claimSubTaskReward(itemIndex, true)) {

View File

@ -1,10 +1,10 @@
package com.gamedog.vididin.main.fragments.task package com.gamedog.vididin.main.fragments.task
import android.app.Activity import android.app.Activity
import android.view.View
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.ama.core.architecture.util.setOnClickBatch import com.ama.core.architecture.util.setOnClickBatch
import com.ama.core.architecture.widget.BindingDialog import com.ama.core.architecture.widget.BindingDialog
import com.gamedog.vididin.StatisticUtil
import com.gamedog.vididin.VidiConst import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.viddin.videos.free.databinding.DialogDailySignBinding import com.viddin.videos.free.databinding.DialogDailySignBinding
@ -17,7 +17,14 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
private var mCurDayIndex: Int = 0 private var mCurDayIndex: Int = 0
private var mConfigList: List<RewardDetail>? = emptyList() private var mConfigList: List<RewardDetail>? = emptyList()
private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf() private var mSignItemViewList: MutableList<DailySignItemView> = mutableListOf()
private var mBottomButtonsState = 0
companion object {
const val STATE_DOUBLE_BUTTONS_SHOWING = 1
const val STATE_DOUBLE_ONLY_WATCH_AD_SHOWING = 2
const val STATE_DOUBLE_COMPLEMENT_SHOWING = 3
const val STATE_DOUBLE_TOMORROW_SHOWING = 4
}
init { init {
build() build()
@ -40,19 +47,27 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
ivClose -> { ivClose -> {
dismiss() dismiss()
} }
butSign -> { butSign -> {
clickedNormalSign() clickedNormalSign()
} }
butWatchAd -> { butWatchAd -> {
clickedAdDoubleBut() clickedAdDoubleBut()
sendClickStatistics(STATE_DOUBLE_BUTTONS_SHOWING)
} }
actionWatchAd -> { actionWatchAd -> {
clickedAdSingleBut() clickedAdSingleBut()
sendClickStatistics(STATE_DOUBLE_ONLY_WATCH_AD_SHOWING)
} }
actionComplement -> { actionComplement -> {
clickedComplementSign() clickedComplementSign()
sendClickStatistics(STATE_DOUBLE_COMPLEMENT_SHOWING)
} }
} }
} }
@ -60,40 +75,59 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
registerEvents({ data-> registerEvents(
{ data ->
when (data?.mEventType) { when (data?.mEventType) {
VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_SINGLE -> { VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_SINGLE -> {
if (TaskManager.instance().dailySignStatus().executeDailySign(mCurDayIndex, false, true)) { if (TaskManager.instance().dailySignStatus()
DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, false).show() .executeDailySign(mCurDayIndex, false, true)
) {
DailySignSuccessDialog(mActivity).initData(
mConfigList?.get(mCurDayIndex)?.value,
false
).show()
updateUI(mCurDayIndex) updateUI(mCurDayIndex)
} }
} }
VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_DOUBLE -> { VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_DOUBLE -> {
if (TaskManager.instance().dailySignStatus().executeDailySign(mCurDayIndex, true, true)) { if (TaskManager.instance().dailySignStatus()
DailySignSuccessDialog(mActivity).initData((mConfigList?.get(mCurDayIndex)?.value)?.times( .executeDailySign(mCurDayIndex, true, true)
) {
DailySignSuccessDialog(mActivity).initData(
(mConfigList?.get(mCurDayIndex)?.value)?.times(
2 2
), false).show() ), false
).show()
updateUI(mCurDayIndex) updateUI(mCurDayIndex)
} }
} }
VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_COMPLEMENT -> { VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_COMPLEMENT -> {
val firstForgotSignDayIndex = TaskManager.instance().dailySignStatus().getForgotSignFirstDayIndex() val firstForgotSignDayIndex =
if (TaskManager.instance().dailySignStatus().executeDailySign(firstForgotSignDayIndex, false, false)){ TaskManager.instance().dailySignStatus().getForgotSignFirstDayIndex()
DailySignSuccessDialog(mActivity).initData(mConfigList?.get(firstForgotSignDayIndex)?.value, false).show() if (TaskManager.instance().dailySignStatus()
.executeDailySign(firstForgotSignDayIndex, false, false)
) {
DailySignSuccessDialog(mActivity).initData(
mConfigList?.get(
firstForgotSignDayIndex
)?.value, false
).show()
updateUI(firstForgotSignDayIndex) updateUI(firstForgotSignDayIndex)
} }
} }
} }
}, VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_SINGLE, }, VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_SINGLE,
VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_DOUBLE, VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_DOUBLE,
VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_COMPLEMENT) VididinEvents.EVENT_AD_WATCHED_FOR_DAILY_SIGN_COMPLEMENT
)
} }
private fun clickedNormalSign() { private fun clickedNormalSign() {
if (TaskManager.instance().dailySignStatus().executeDailySign(mCurDayIndex, false, false)) { if (TaskManager.instance().dailySignStatus().executeDailySign(mCurDayIndex, false, false)) {
DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, true).show() DailySignSuccessDialog(mActivity).initData(mConfigList?.get(mCurDayIndex)?.value, true)
.show()
updateUI(mCurDayIndex) updateUI(mCurDayIndex)
} }
} }
@ -107,7 +141,8 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
} }
private fun clickedComplementSign() { private fun clickedComplementSign() {
val firstForgotSignDayIndex = TaskManager.instance().dailySignStatus().getForgotSignFirstDayIndex() val firstForgotSignDayIndex =
TaskManager.instance().dailySignStatus().getForgotSignFirstDayIndex()
if (firstForgotSignDayIndex > 0) { if (firstForgotSignDayIndex > 0) {
startAdTask(VidiConst.WATCH_AD_FOR_DAILY_SIGN_COMPLEMENT) startAdTask(VidiConst.WATCH_AD_FOR_DAILY_SIGN_COMPLEMENT)
} else { } else {
@ -121,8 +156,6 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
} }
private fun initSignItemViews() { private fun initSignItemViews() {
with(mBinding) { with(mBinding) {
signItem7.setLargeWidthMode() signItem7.setLargeWidthMode()
@ -137,9 +170,11 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mConfigList?.let { mConfigList?.let {
mSignItemViewList.forEachIndexed { index, itemView-> mSignItemViewList.forEachIndexed { index, itemView ->
itemView.setData(mConfigList!![index], itemView.setData(
TaskManager.instance().dailySignStatus().getDailySignStateBean(index)) mConfigList!![index],
TaskManager.instance().dailySignStatus().getDailySignStateBean(index)
)
} }
} }
} }
@ -160,7 +195,6 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
} }
private fun updateUI(signedDayIndex: Int) { private fun updateUI(signedDayIndex: Int) {
val curDayView = mSignItemViewList[mCurDayIndex] val curDayView = mSignItemViewList[mCurDayIndex]
val curDayStateBean = curDayView.getStateBean() val curDayStateBean = curDayView.getStateBean()
@ -172,11 +206,14 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
} }
mSignItemViewList[signedDayIndex].updateUI() mSignItemViewList[signedDayIndex].updateUI()
var newButtonsState = mBottomButtonsState
if (!curDayStateBean.hasSigned) { if (!curDayStateBean.hasSigned) {
mBinding.actionNormalTwoButs.isVisible = true mBinding.actionNormalTwoButs.isVisible = true
mBinding.actionWatchAd.isVisible = false mBinding.actionWatchAd.isVisible = false
mBinding.actionComplement.isVisible = false mBinding.actionComplement.isVisible = false
mBinding.actionTomorrowSign.isVisible = false mBinding.actionTomorrowSign.isVisible = false
newButtonsState = STATE_DOUBLE_BUTTONS_SHOWING
} else { } else {
if (!curDayStateBean.hasWatchedAd) { if (!curDayStateBean.hasWatchedAd) {
mBinding.actionNormalTwoButs.isVisible = false mBinding.actionNormalTwoButs.isVisible = false
@ -188,6 +225,8 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
"+" "+"
mConfigList?.get(mCurDayIndex)?.value mConfigList?.get(mCurDayIndex)?.value
} }
newButtonsState = STATE_DOUBLE_ONLY_WATCH_AD_SHOWING
} else { } else {
val forgotSignDays = TaskManager.instance().dailySignStatus().getForgotSignDays() val forgotSignDays = TaskManager.instance().dailySignStatus().getForgotSignDays()
if (forgotSignDays > 0) { if (forgotSignDays > 0) {
@ -195,17 +234,68 @@ class DailySignDialog(context: Activity) : BindingDialog<DialogDailySignBinding>
mBinding.actionWatchAd.isVisible = false mBinding.actionWatchAd.isVisible = false
mBinding.actionComplement.isVisible = true mBinding.actionComplement.isVisible = true
mBinding.actionTomorrowSign.isVisible = false mBinding.actionTomorrowSign.isVisible = false
newButtonsState = STATE_DOUBLE_COMPLEMENT_SHOWING
} else { } else {
mBinding.actionNormalTwoButs.isVisible = false mBinding.actionNormalTwoButs.isVisible = false
mBinding.actionWatchAd.isVisible = false mBinding.actionWatchAd.isVisible = false
mBinding.actionComplement.isVisible = false mBinding.actionComplement.isVisible = false
mBinding.actionTomorrowSign.isVisible = true mBinding.actionTomorrowSign.isVisible = true
}
newButtonsState = STATE_DOUBLE_TOMORROW_SHOWING
} }
} }
} }
if (newButtonsState != mBottomButtonsState) {
mBottomButtonsState = newButtonsState
sendShowStatistics()
}
}
private fun sendShowStatistics() {
var fromType = ""
when (mBottomButtonsState) {
STATE_DOUBLE_BUTTONS_SHOWING -> {
fromType = "RV_Double"
}
STATE_DOUBLE_ONLY_WATCH_AD_SHOWING -> {
fromType = "RV_Extra"
}
STATE_DOUBLE_COMPLEMENT_SHOWING -> {
fromType = "RV_SupplementarySigning"
}
}
if (fromType.isNotEmpty()) {
StatisticUtil.reportEvents(StatisticUtil.KEY_RV_Button_Show, mapOf("Position" to fromType))
}
}
private fun sendClickStatistics(clickedType: Int) {
var fromType = ""
when (clickedType) {
STATE_DOUBLE_BUTTONS_SHOWING -> {
fromType = "RV_Double"
}
STATE_DOUBLE_ONLY_WATCH_AD_SHOWING -> {
fromType = "RV_Extra"
}
STATE_DOUBLE_COMPLEMENT_SHOWING -> {
fromType = "RV_SupplementarySigning"
}
}
if (fromType.isNotEmpty()) {
StatisticUtil.reportEvents(StatisticUtil.KEY_RV_Button_Click_Game, mapOf("Position" to fromType))
}
}
} }