【问题标题】:Android admob interstitial adds showing only once after the app startsAndroid admob 插页式广告在应用启动后仅显示一次
【发布时间】:2021-11-24 17:43:13
【问题描述】:

单击按钮时,我会显示 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 shown\n",
                        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 yet\n",
                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 yet\n", Toast.LENGTH_LONG).show();
        }
    }
});

【问题讨论】:

  • 每次展示广告后都需要加载一个新广告

标签: android sdk admob interstitial


【解决方案1】:

插页式广告只会在应用启动后展示一次,因为您需要重新加载广告才能再次展示。 一旦您启动应用程序广告将被加载,您需要实现对它的回调。展示广告后,您需要在展示广告之前再次加载广告。 您可以阅读官方文档以获得更好的理解。 Interstitial ads documentation

更新: @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;
        }
    };

【讨论】:

  • 很高兴知道,谢谢,一个有效的代码解决方案将不胜感激。根据您的评论,我做了更多的研究并尝试了 YouTube 的不同解决方案 [youtube.com/… 但我得到了相同的结果
  • @Rishi 请检查更新后的答案,如果适合您,请标记为已接受
  • 谢谢,它的作品,答案被接受。
【解决方案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;
            }
        });
    }
}

【讨论】:

  • 内容丰富且有用的好方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
相关资源
最近更新 更多