Android admob interstitial добавляет отображение только один раз после запуска приложения

#android #sdk #admob #interstitial

Вопрос:

По щелчку кнопки я показываю промежуточные добавления admob.

В первый раз он показывает только добавление, повторное нажатие на кнопку не показывает добавления.

В настоящее время я ссылаюсь на использование этой ссылки для примера google admob https://developers.google.com/admob/android/interstitial

Использование SDK версии 20

Вот код ниже:

 MobileAds.initialize(this, new OnInitializationCompleteListener() {
  @Override
  public void onInitializationComplete(InitializationStatus initializationStatus) {}
});
 
 AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(this,"ca-app-pub-3940256099942544/1033173712", adRequest, new InterstitialAdLoadCallback() {
    @Override
    public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
        // The mInterstitialAd reference will be null until
        // an ad is loaded.
        mInterstitialAd = interstitialAd;
        mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback(){
            @Override
            public void onAdDismissedFullScreenContent() {
                // Called when fullscreen content is dismissed.
                Toast.makeText(getApplicationContext(), " The ad was dismissed.n",
                        Toast.LENGTH_LONG).show();
            }

            @Override
            public void onAdFailedToShowFullScreenContent(AdError adError) {
                // Called when fullscreen content failed to show.
                Log.d("TAG", "The ad failed to show.");
                Toast.makeText(getApplicationContext(), " The ad failed to show.n",
                        Toast.LENGTH_LONG).show();
            }

            @Override
            public void onAdShowedFullScreenContent() {
                // Called when fullscreen content is shown.
                // Make sure to set your reference to null so you don't
                // show it a second time.
                mInterstitialAd = null;
                Toast.makeText(getApplicationContext(), " The ad was shownn",
                        Toast.LENGTH_LONG).show();
            }
        });
    }

    @Override
    public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
        super.onAdFailedToLoad(loadAdError);
        // Handle the error
        Toast.makeText(getApplicationContext(),loadAdError  " custom  interstitial ad wasn't ready yetn",
                Toast.LENGTH_LONG).show();
        Log.i(TAG, loadAdError.getMessage());
        mInterstitialAd = null;
    }
});
 
 showAd = findViewById(R.id.showAd);
showAd.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        if (mInterstitialAd != null) {
            mInterstitialAd.show(MainActivity.this);
        } else {
            Toast.makeText(getApplicationContext(), " The interstitial ad wasn't ready yetn", Toast.LENGTH_LONG).show();
        }
    }
});
 

Комментарии:

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

Ответ №1:

Промежуточные объявления будут показаны только один раз после запуска приложения, так как вам нужно снова загрузить объявление, чтобы показать его снова. Как только вы запустите приложение, объявление будет загружено, вам необходимо выполнить обратный вызов к нему. Как только ваше объявление будет показано, вам нужно снова загрузить его, прежде чем показывать. Вы можете прочитать официальную документацию для лучшего понимания. Документация по промежуточным объявлениям

Обновление: @Rishi Вам нужно снова загрузить объявление на объявление отклонено

 @Override         
 public void onAdDismissedFullScreenContent() {
                    loadInterstitialAd(activity);
                }
 

Вот код для загрузки объявления

   public void loadInterstitialAd(Context context){
        AdRequest adRequest = new AdRequest.Builder().build();
            InterstitialAd.load(context,your ad id, adRequest,interstitialCallback);
    }

    InterstitialAdLoadCallback interstitialCallback = new InterstitialAdLoadCallback(){
        @Override
        public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
            mInterstitialAd = interstitialAd;
        }

        @Override
        public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
            mInterstitialAd = null;
        }
    };
 

Комментарии:

1. Рад узнать, что спасибо, решение с рабочим кодом было бы в основном оценено. Основываясь на вашем комментарии, я провел больше исследований и попробовал другое решение с YouTube [ youtube.com/… но я получаю те же результаты

2. @Риши, пожалуйста, проверьте обновленный ответ и отметьте как принятый, если он работает для вас

3. Спасибо, он работает, ответ принят.

Ответ №2:

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

     protected void loadInterstitialAd() { //your method can be private or protected
    if (interstitialAd == null) {
        InterstitialAd.load(this, "ca-app-pub-3940256099942544/1033173712", new AdRequest.Builder().build(), new InterstitialAdLoadCallback() {
            @Override
            public void onAdLoaded(@NonNull InterstitialAd newIntad) {
                interstitialAd = newIntad; //interstitialAd is static variable
                interstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
                    @Override
                    public void onAdDismissedFullScreenContent() {
                        interstitialAd = null;
                        loadInterstitialAd(); //METHOD CALL WITHIN ITSELF
                    }
                });
            }

            @Override
            public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
                interstitialAd = null;
            }
        });
    }
}
 

Комментарии:

1. Очень информативно и полезно, хороший подход.