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 == 0 或 3 的错误。
基于AdMob document,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 发生在用户使用广告拦截器或网络连接中断时。它是用户可触发的。
案例 0 和 案例 3 不受用户和开发人员控制。
我的代码可以处理 case 0 和 3 中的错误。此代码忽略 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);
}
}
我要求最佳实践或实施。
我的应用程序的核心功能提供长时间(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 == 0 或 3 的错误。 基于AdMob document,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 发生在用户使用广告拦截器或网络连接中断时。它是用户可触发的。
案例 0 和 案例 3 不受用户和开发人员控制。
我的代码可以处理 case 0 和 3 中的错误。此代码忽略 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);
}
}