Как запросить новое промежуточное объявление в Android

#android #admob #interstitial #google-admob

#Android #промежуточное #admob

Вопрос:

У меня есть действие для отображения полноэкранного изображения. Есть кнопка для загрузки изображения. Перед загрузкой мне нужно показать промежуточное объявление. После загрузки мне нужно запросить и загрузить новое промежуточное объявление. Я закодировал то же самое, что и следующее:

 public class FullScreenViewActivity extends Activity implements OnClickListener {
         private InterstitialAd interstitial;
         private AdRequest adRequest;
         ....

          @Override
            protected void onCreate(Bundle savedInstanceState) {
             interstitial = new InterstitialAd(FullScreenViewActivity.this);
             interstitial.setAdUnitId(getString(R.string.admob_interstitial_id)); //live ad unit
            ...
             }

            protected void onResume() {
                super.onResume();
                adRequest = getInterstitialAdRequest();
                interstitial.loadAd(adRequest);
                interstitial.setAdListener(new AdListener() {
                    public void onAdClosed() {
                        downloadImage();
                        adRequest = getInterstitialAdRequest();
                        interstitial.loadAd(adRequest);
                    }

                    public void onAdFailedToLoad(int var1) {
                        downloadImage();
                        adRequest = getInterstitialAdRequest();
                        interstitial.loadAd(adRequest);
                    }

                    public void onAdLeftApplication() {
                        downloadImage();
                        adRequest = getInterstitialAdRequest();
                        interstitial.loadAd(adRequest);
                    }
                });
            }

        public AdRequest getInterstitialAdRequest() {
            return new AdRequest.Builder().build();
        }
    }
  

Моя проблема в том, что я продолжаю видеть одно и то же объявление каждый раз, когда нажимаю кнопку загрузки. Есть ли какая-то проблема в моей логике? Или admob выдает мне одно и то же объявление каждый раз, когда я запрашиваю?

Ответ №1:

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

Однако я бы рекомендовал исключить loadAd вызовы из этих методов:

 public void onAdFailedToLoad(int var1) {
    downloadImage();
    adRequest = getInterstitialAdRequest();
    interstitial.loadAd(adRequest);
}

public void onAdLeftApplication() {
    downloadImage();
    adRequest = getInterstitialAdRequest();
    interstitial.loadAd(adRequest);
}
  

onAdLeftApplication вызывается, когда пользователь нажимает на объявление, и в ответ открывается браузер (или другое приложение). Когда они вернутся, onAdClosed они все равно будут вызываться, поэтому, поскольку ваш код остается в силе, вы получите два вызова loadAd . Я бы удалил onAdLeftApplication его и оставил один onAdClosed .

loadAd Повторный вызов для восстановления после сбоя ad in onAdFailedToLoad — хорошая идея, но, похоже, у вас нет никакой логики отключения или увеличения времени перед повторной попыткой в случае повторных сбоев. Это может привести к бесконечному циклу, если сетевое соединение пользователя отключается (объявление № 1 немедленно завершается сбоем, что приводит к попытке загрузки объявления № 2, которая немедленно завершается сбоем и вызывает объявление № 3 …). Попробуйте использовать счетчик, чтобы отсечь попытки после определенного числа, или используйте a Handler , чтобы ввести постепенно увеличивающуюся задержку.

И последнее замечание: если вы тестируете свое приложение, вам следует использовать тестовые объявления!

Ответ №2:

лучший способ использовать это:

 void requestInterstitial(){

    if (!mInterstitialAd.isLoading() amp;amp; !mInterstitialAd.isLoaded()) {
        AdRequest adRequest = new AdRequest.Builder().build();
        mInterstitialAd.loadAd(adRequest);
    }
}