Некоторые пользователи Android-приложения не могут загружать объявления AdMob - PullRequest
0 голосов
/ 30 сентября 2019

Я запрашиваю передовой опыт или реализацию.

Основная функция моего приложения предоставляет сервис в течение длительного времени (от 2 до 4 часов). У пользователей есть некоторое активное время, и когда они пользуются сервисом, активное время расходуется. Пользователь может восстановить активное время, просмотрев рекламное видео с вознаграждением AdMob.

Проблема в том, что некоторые пользователи (менее 3%) не видят никаких объявлений на своем устройстве. Я получил много жалоб, что они не могут загрузить объявления. Большинство пользователей, не видящих AD, используют блокировщик AD, но некоторые находятся в состоянии «AD-no fill» (код ошибки 3). В этом случае кажется, что мое приложение генерирует слишком много запросов AD (пользователи нажимают «смотреть AD»), поэтому AdMob не всегда может заполнить объявления. Мое приложение позволяет пользователю просматривать объявления менее 10 раз в день.

У меня есть несколько планов, и я хотел бы знать, какой из них лучше:

1) Включите другого поставщика AD. Когда объявление AdMob не заполнено, мое приложение загружает другое объявление. Недостаток: 2x сложность кода и 2x трудоемкость обслуживания.

2) Когда реальная AD не заполнена, загрузите тестовую AD AdMob. Недостаток: нет денег

3) Если реклама не заполнена, загрузите другой блок рекламы AdMob. Недостаток: я не уверен, что это работает. AdMob должен был определить, что пользователь (не блок AD) не получает AD по этому запросу, поэтому создание другого запроса не помогает. И исходя из этого AdMob, загружающего несколько вознагражденных видео обсуждение, не разрешается загружать несколько блоков AD.

4) Остальные, которые я не придумал.

5) Не слишком ли 10 раз смотреть вознаграждение - н.э. слишком много?

1 Ответ

0 голосов
/ 04 октября 2019

Несмотря на то, что баннерная реклама 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);
    }
}
...