尽管Admob 横幅广告未在 android P线程中加载,但用户端的解决方法有效(基于用户对我的应用程序的反馈),但由于该线程的问题,我仍然修补了该应用程序。
我的最后一种方法是处理errorCode == 0或3的错误。根据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用户和开发人员都无法控制。
我的代码可以处理案例 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);
}
}