如何检测用户点击了插页式广告?
Posted
技术标签:
【中文标题】如何检测用户点击了插页式广告?【英文标题】:How to detect interstitial ad is clicked by user? 【发布时间】:2021-09-24 05:21:40 【问题描述】:有什么方法可以检测用户何时点击了插页式广告?我尝试过,但没有找到任何用于检测插页式广告点击的回调。
检测相同的任何解决方法也将非常有帮助。
我想检测广告点击以防止用户为插页式广告生成虚假点击。
【问题讨论】:
为什么要故意检测用户的广告点击? @RaguSwaminathan 防止用户产生虚假点击并导致 AdMob 帐户被暂停。 它将由 Google 负责。出于测试和开发目的,请尝试使用测试广告。 为了防止虚假点击,您可以在 admob 中设置频次上限。 support.google.com/admob/answer/4377690 替代方案(可能不切实际),如果知道负责人,能否获取设备的广告码?您可以将其放在测试设备列表中。您是否尝试过给 admob 社区写信?也许如果幸运的话,您会找到一位专家用户,他会告诉您确切的操作。 support.google.com/admob/?hl=en#topic=7383088 【参考方案1】:您可以使用ActivityLifecycleCallbacks 和WindowCallback 的组合。
ActivityLifecycleCallbacks
使您能够观察应用程序中发生的每个 Activity 生命周期事件。一站式服务。
WindowCallback
使您能够拦截许多窗口事件。我们特别感兴趣的系统触发的事件之一是dispatchTouchEvent。
现在,这里是策略:
-
在
Application
类中注册我们的GlobalActivityLifecycleListener
class MyApplication : Application()
override fun onCreate()
super.onCreate()
registerActivityLifecycleCallbacks(GlobalActivityLifecycleListener())
-
检查当前显示的活动是否为广告活动。如果是,请注册我们的
AdWindowCallbacks
class GlobalActivityLifecycleListener : Application.ActivityLifecycleCallbacks
//...
override fun onActivityResumed(activity: Activity)
if (isAdActivity(activity))
registerWindowCallbacks(activity)
private fun registerWindowCallbacks(activity: Activity)
val currentWindow = activity.window
/*This is needed to forward the events from our callback back to the original
callback after we are done with the processing*/
val originalCallbacks = currentWindow.callback
currentWindow.callback = AdWindowCallbacks(originalCallbacks)
-
拦截/处理用户触摸事件
class AdWindowCallbacks(private val originalCallback: Window.Callback) : Window.Callback
//...
override fun dispatchTouchEvent(event: MotionEvent?): Boolean
//TODO process user touch event
return originalCallback.dispatchTouchEvent(event)
从那里,您可以detect the common gestures 并采取相应措施。
【讨论】:
【参考方案2】:Google 在 SDK 20.4.0 上重新添加了已删除的插页式广告回调 onAdClicked()。看起来他们删除了它,6 个月后意识到他们搞砸了,决定重新添加它:)
Added the onAdClicked() callback to FullScreenContentCallback.
详情请参阅AdMob SDK release notes。
我发现必须将 AdMob SDK 升级到最新版本。
【讨论】:
【参考方案3】:我明白你的意思。
但从技术上讲,无法通过以下方式跟踪插页式广告点击次数 用户。
如果您密切监控该行为,这些广告会在您应用的新页面中打开。您可以通过在您的呼叫Activity
中登录onPause
来确认它们。
当用户点击这些广告时,他们会被带到相应的目的地,要么是 Play 商店,要么是在移动浏览器中打开的 URL,具体取决于广告的性质。
正如@Daxesh Vekaria 在评论部分所述,您可以在AdMob console 中设置频次上限
或尝试@FreeLearning 建议的其他解决方案
编辑 1:
在最坏的情况下,您可以尝试实现 fullScreenContentCallback
。但根据文档,它不提供任何点击回调。
【讨论】:
监控onPause
也不可行,因为它不能保证用户实际点击了广告然后应用程序进入后台,可能是用户故意最小化应用程序并这也将被注册为广告点击。正如@Daxesh Vekaria 所提到的,频率上限似乎是唯一的选择以上是关于如何检测用户点击了插页式广告?的主要内容,如果未能解决你的问题,请参考以下文章