0

我要求最佳实践或实施。

我的应用程序的核心功能长期提供服务(2 到 4 小时)。用户有一些活跃时间,当他们使用服务时,活跃时间被消耗。用户可以通过观看 AdMob 的激励视频广告来恢复活跃时间。

问题是,一些用户(不到 3%)在他们的设备上看不到任何广告。我收到很多抱怨他们无法加载广告。大多数没有看到广告的用户都在使用广告拦截器,但有些用户处于“广告未填充”状态(错误代码 3)。在这种情况下,我的应用程序似乎生成了太多的广告请求(通过用户单击“观看广告”),因此 AdMob 不能总是填充广告。我的应用程序允许用户每天观看广告少于 10 次。

我有一些计划,想知道哪个更好:

1) 包括另一个广告提供者。当 AdMob 的广告未填充时,我的应用会加载另一个广告。缺点:2 倍的代码复杂度和 2 倍的维护工作量。

2)当真实AD没有填满时,加载一个AdMob的test-AD。缺点:没钱

3)当一个广告没有填满时,加载另一个AdMob的广告单元。缺点:我不确定这是否有效。AdMob 应该已经确定用户(不是 AD 单元)没有收到有关此请求的广告,因此生成另一个请求无济于事。并且基于此AdMob 加载多个奖励视频的讨论,不允许加载多个 AD 单元。

4) 其他我没有想到的。

5)看10次奖励-AD是不是太多了?

4

1 回答 1

2

尽管Admob 横幅广告未在 android P线程中加载,但用户端的解决方法有效(基于用户对我的应用程序的反馈),但由于该线程的问题,我仍然修补了该应用程序。

我的最后一种方法是处理errorCode == 03的错误。根据AdMob 文档, onRewardedAdFailedToLoad()方法有 4 个错误:

errorCode == 0: ERROR_CODE_INTERNAL_ERROR - 内部发生了一些事情;例如,从广告服务器收到无效响应。

errorCode == 1: ERROR_CODE_INVALID_REQUEST - 广告请求无效;例如,广告单元 ID 不正确。

errorCode == 2: ERROR_CODE_NETWORK_ERROR - 由于网络连接,广告请求失败。

errorCode == 3: ERROR_CODE_NO_FILL - 广告请求成功,但由于缺少广告资源而没有返回广告。

案例 1仅由粗心的开发人员发生。它不应该发生。它不是用户可触发的。

第 2种情况发生在用户使用 AD 拦截器或网络连接中断时。它是用户可触发的。

案例 0案例 3用户和开发人员都无法控制。

我的代码可以处理案例 03中的错误。此代码忽略errorCode == 2以防止用户使用 AD-blocker 或关闭网络以获得奖励。从现在开始,大多数用户都很高兴。

注:代码

(errorCode == 2 && BuildConfig.DEBUG)

用于测试目的。我可以关闭网络来触发errorCode == 2来查看这种方法是否正常工作。

这是我的所有代码:

@Override
public void onRewardedVideoAdFailedToLoad(int errorCode) {
    if (BuildConfig.DEBUG) {  // ad should be loaded but not
        Log.i(TAG, "Ad: onRewardedVideoAdFailedToLoad(): " + errorCode);
    }
    adButton.setEnabled(false);
    adButton.setText(getString(R.string.text_ad_unavailable, errorCode));

    if (errorCode == 0 || errorCode == 3 || (errorCode == 2 && BuildConfig.DEBUG)) {
        noAdButton.setEnabled(true);  // give 1/4 reward of watching AD
        noAdButton.setVisibility(View.VISIBLE);
    }
}
于 2019-10-04T19:41:20.603 回答