Несмотря на то, что баннерная реклама Admob не загружается в ветке android P , обходной путь на стороне пользователя работает (основываясь на отзывах пользователей моего приложения), я все же пропатчил приложение из-за проблемыэтой темы.
Мой последний подход - обработка ошибок errorCode == 0 или 3 . Основываясь на документе AdMob , существует 4 ошибки метода onRewardedAdFailedToLoad () :
errorCode == 0: ERROR_CODE_INTERNAL_ERROR - что-то произошло внутри;например, от рекламного сервера был получен неверный ответ.
errorCode == 1: ERROR_CODE_INVALID_REQUEST - запрос объявления был недействительным;например, идентификатор рекламного блока был неверным.
errorCode == 2: ERROR_CODE_NETWORK_ERROR - запрос объявления не был выполнен из-за подключения к сети.
errorCode == 3: ERROR_CODE_NO_FILL - запрос объявления был успешным, но объявление не было возвращено из-за отсутствия рекламных ресурсов.
Случай 1 происходит только по неосторожному разработчику. Этого не должно быть. Он не поддерживает триггер пользователя.
Случай 2 возникает, когда пользователь использует блокировщик AD или сетевое соединение не работает. Он может запускаться пользователем.
Случай 0 и случай 3 не контролируются ни пользователями, ни разработчиками.
Мой код может работать сошибки в случае 0 и 3 . Этот код игнорирует errorCode == 2 , чтобы запретить пользователям использование AD-блокировщика или выключение сети для получения вознаграждений. Отныне большинство пользователей довольны.
Примечание: код
(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);
}
}