如何在 android 中请求新的插页式广告

How to request new interstitial ad in android

我有一个 activity 来显示全屏图像。有一个按钮可以下载图像。下载前,我需要展示一个插页式广告。下载后,我需要请求并加载新的插页式广告。我的编码如下:

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 都给我相同的广告?

我在您的代码中没有看到任何会导致您重复获得相同广告的内容。有可能无论您身在何处,都有一个特定的广告商购买了几乎所有的需求,这可能会导致单个广告重复出现。通常这是一个暂时的问题,会随着时间的推移而消失。

建议从这些方法中取出 loadAd 调用,但是:

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

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

onAdLeftApplication 在用户点击广告并打开浏览器(或其他应用程序)作为响应时调用。当它们 return 时,onAdClosed 仍将被调用,因此按照您的代码,您最终将调用两次 loadAd。我会删除 onAdLeftApplication 中的那个并保留 onAdClosed 中的那个。

第二次调用loadAdonAdFailedToLoad失败的广告中恢复是个好主意,但你似乎没有任何断路逻辑或增加之前的时间在反复失败的情况下重试。如果用户的网络连接中断,这可能会导致无限循环(广告 #1 立即失败,这会导致广告 #2 尝试加载,这会立即失败并导致广告 #3...)。尝试使用计数器在一定次数后切断尝试,或使用 Handler 引入逐渐增加的延迟。

另外,最后一点:如果您正在测试您的应用,您应该使用 test ads!

最佳使用方式是:

void requestInterstitial(){

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