AdMob非页内广告重复加载onResume

时间:2016-12-25 16:23:54

标签: java android android-studio admob interstitial

我想在用户打开应用时加载AdMob插页式广告,并在最小化应用后恢复应用。

我使用以下代码加载AdMob插页式广告onResume

@Override
protected void onResume() {
    super.onResume();
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId(getString(R.string.interstitial_ad));
    AdRequest request = new AdRequest.Builder()
            .tagForChildDirectedTreatment(true)
            .build();
    mInterstitialAd.loadAd(request);

mInterstitialAd.setAdListener(new AdListener() {
    public void onAdLoaded() {
        showInterstitial();
    }
});
}

但广告在关闭后会反复加载。我尝试在AdMob设置中限制广告在5分钟内显示一次,但它无法正常工作。如何防止广告重复加载?

1 个答案:

答案 0 :(得分:2)

  

我想在用户打开应用时加载AdMob插页式广告   在最小化应用程序后恢复应用程序。

根据插页式最佳做法,这是禁止的:https://support.google.com/admob/answer/6201362?hl=en&ref_topic=2745287

您的代码会创建一个电路。您正在活动的onResume()上加载插页式广告,并在onAdLoaded()被触发时显示该插页式广告。但是,如果onAdLoaded()被解雇,则必须从之前可见地显示插页式广告。因此,由于插页式广告仍然存在,它会发送onAdLoaded(),其中会显示插页式广告(showInterstitial()),这会发送另一个onAdLoaded(),这将再次调用showInterstitial(),试。

您需要尽早发送广告请求,并在致电showInterstitial()之前使用isLoaded()检查。

在应用启动时发送广告请求:

// Initialize the Mobile Ads SDK.
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");

// Create the InterstitialAd and set the adUnitId.
mInterstitialAd = new InterstitialAd(this);

// Defined in res/values/strings.xml
mInterstitialAd.setAdUnitId(getString(R.string.ad_unit_id));

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

然后,将其放入showInterstitial()

if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
}

编辑:仅在应用中的逻辑断点处调用showInterstitial()。在应用启动或应用退出时显示插页式广告不符合AdMob的插页式最佳做法。