Android - OnDestroy удалить межстраничную рекламу?

Этот вопрос задают чаще, но есть разные решения, и я, честно говоря, не знаю, что здесь лучше всего.

У меня есть такое межстраничное объявление (Google Admob SDK):

private InterstitialAd interstitial;

Однако реклама немного задерживается, и если пользователь быстро перемещается (в течение секунды или двух), то реклама показывается на другом экране, чем хотелось бы, или даже хуже, когда приложение уже находится в фоновом режиме.

Как приостановить межстраничную рекламу, когда приложение Android переходит к background? показывает функцию, которой (больше) не существует.
При отклонении межстраничное объявление DFP на Android, приложение дает сбой явно использует другое объявление, чем я... это лучше использовать?
программно закрыть межстраничное объявление просто говорит, что его невозможно отменить.

Я бы предпочел, чтобы просто отменить рекламу в функции onDestroy() и приостановить (или уничтожить) рекламу в функции onPause().

Возможно ли это сделать? Любое обходное решение или что-то другое также хорошо, но я, конечно, предпочитаю чистое решение.


person Gooey    schedule 20.03.2014    source источник


Ответы (3)


Вы действительно должны были показать какой-то код, но, судя по вашим симптомам, я подозреваю, что вы показываете свое межстраничное объявление из метода #onAdReceived AdListener. НЕ ДЕЛАЙТЕ ЭТОГО

Вместо этого вы должны показывать свое межстраничное объявление в естественной точке останова в своем приложении. В противном случае вы получите описанное поведение, а также крайне плохой пользовательский опыт.

person William    schedule 21.03.2014
comment
Я загружаю его в функцию onAdLoaded, запускаемую с помощью AdListener. Это плохая практика? Пожалуйста, разберитесь. Точка в приложении является своего рода точкой останова: они могут выбрать уровень. - person Gooey; 22.03.2014
comment
Да, это плохая практика. В естественной точке останова, если у вас есть вызов добавления #displayInterstitial. Не звоните, как только объявление предоставляется рекламной сетью. - person William; 23.03.2014

Как указал Уильям, вы не должны показывать это в onAdReceived. Что я делаю, так это устанавливаю логический флаг в onAdReceived, затем у меня есть фоновый поток, выполняющий пустой цикл while (с таймером) и проверяющий логическое значение перед вызовом show().

Я все еще вызываю isLoaded(), но в этот момент я знаю, что он загружен. Причина, по которой я не использую isLoaded() саму по себе, заключается в том, что она должна выполняться в потоке пользовательского интерфейса, и я не хочу блокировать пользовательский интерфейс, пока жду загрузки рекламы.

person Shygar    schedule 06.07.2014

Попробуйте это, чтобы отменить показ рекламы после завершения действия:

@Override
public void onAdClosed() {
    mInterstitialAd = null;
}

@Override
public void onAdLoaded() {
    if (mInterstitialAd != null)
        mInterstitialAd.show();
    mInterstitialAd = null;
}

@Override
public void onAdFailedToLoad(int errorCode) {
    mInterstitialAd = null;
}

onDestroy / onStop() {
    mIntertitial = null;
}
person lscofield    schedule 03.11.2017