0

我有一个显示全屏图像的活动。有一个下载图像的按钮。在下载之前,我需要展示一个插页式广告。下载后,我需要请求并加载新的插页式广告。我的编码与以下相同:

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

4

2 回答 2

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以从失败的广告中恢复onAdFailedToLoad是个好主意,但您似乎没有任何断路逻辑或在重复失败的情况下再次尝试之前的时间增加。如果用户的网络连接断开,这可能会导致无限循环(广告#1 立即失败,这导致广告#2 尝试加载,然后立即失败并导致广告#3...)。尝试使用计数器在一定次数后切断尝试,或使用 aHandler引入逐渐增加的延迟。

另外,最后一点:如果您正在测试您的应用程序,您应该使用测试广告

于 2016-10-18T22:43:08.023 回答
0

最好的使用方法是:

void requestInterstitial(){

    if (!mInterstitialAd.isLoading() && !mInterstitialAd.isLoaded()) {
        AdRequest adRequest = new AdRequest.Builder().build();
        mInterstitialAd.loadAd(adRequest);
    }
}
于 2019-11-03T13:34:56.853 回答