【问题标题】: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

标签: android admob interstitial


【解决方案1】:

您可以使用ActivityLifecycleCallbacksWindowCallback 的组合。

  • ActivityLifecycleCallbacks 使您能够观察应用程序中发生的每个 Activity 生命周期事件。一站式服务。
  • WindowCallback 使您能够拦截许多窗口事件。我们特别感兴趣的系统触发的事件之一是dispatchTouchEvent

现在,这里是策略:

  1. Application 类中注册我们的GlobalActivityLifecycleListener
class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(GlobalActivityLifecycleListener())
    }
}
  1. 检查当前显示的活动是否为广告活动。如果是,请注册我们的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)
    }
}
  1. 拦截/处理用户触摸事件
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 所提到的,频率上限似乎是唯一的选择
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多