如何检测用户点击了插页式广告?

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 所提到的,频率上限似乎是唯一的选择

以上是关于如何检测用户点击了插页式广告?的主要内容,如果未能解决你的问题,请参考以下文章

如何停用Admob插页式广告?

如何在加载插页式广告后显示活动?

显示应用外部的插页式广告

如何在 WebView App 中的 URL 点击设置插页式广告?

Admob 广告收入

如何在 X 次点击后显示插页式广告