Android 应用程序的部分用户无法加载 AdMob 广告

Some of Users of an Android App cannot Load AdMob ADs

我要求最佳实践或实施。

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

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

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

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

2) 当真实广告没有填满时,加载一个AdMob的测试广告。 缺点:没钱

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

4) 其他的我没有想到。

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

尽管在 线程中,用户端的解决方法有效(基于用户对我的应用程序的反馈),但由于该线程的问题,我仍然对应用程序进行了修补。

我最后的方法是处理 errorCode == 03 的错误。 基于AdMob documentonRewardedAdFailedToLoad()方法有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 发生在用户使用广告拦截器或网络连接中断时。它是用户可触发的。

案例 0案例 3 不受用户和开发人员控制。

我的代码可以处理 case 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);
    }
}