预加载插页式广告

时间:2015-06-17 10:17:22

标签: android interstitial

我正在我的应用中运行插页式广告,但我不确定如何预加载它们,以便用户看起来是即时的。通常它可能需要10秒钟,用户已经转移到应用程序的不同区域,这非常烦人。

这是应用程序的相关代码:

private void launchInterstitial() {
    interstitialAd = new InterstitialAd(this);
    interstitialAd.setAdUnitId("ca-app-pub-xxxxxxxxxxxxxxxx");

    interstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            showAdInter();
        }

        @Override
        public void onAdFailedToLoad(int errorCode) {
            String message = String.format("onAdFailedToLoad (*a)", getErrorReason(errorCode));
        }

        @Override
        public void onAdClosed() {
            if (exitApp) {
                finish();
            }
        }
    });
}

private void showAdInter() {
    if (interstitialAd.isLoaded()){
        interstitialAd.show();
    } else {
        Log.d("","Interstitial ad failed to load");
    }
}

public void loadInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .addTestDevice("Fxxxxxxxxxxxxxxxxxxxxx")
            .build();

    interstitialAd.loadAd(adRequest);
}

我尝试在活动启动时调用launchInterstitial()和loadInterstitial(),然后在我希望广告出现时调用showAdInter(),但它不会那样工作。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:6)

无法相信没有人知道这件事,或者不愿意提供帮助。我会在这里发布答案,希望这实际上可以帮助有需要的人。我在onCreate()中调用以下方法:

requestNewInterstitial();

方法如下:

private void requestNewInterstitial() {
    AdRequest adRequest = new AdRequest.Builder()
            .build();

    mInterstitialAd.loadAd(adRequest);
}

我创建了一个adlistener,以便在关闭广告后再次在后台重新加载广告:

mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            requestNewInterstitial();
        }
    });

我打电话给requestNewInterstitial();在我的onBackPressed()方法上。

这会产生平滑的结果,插页式广告会立即出现。

答案 1 :(得分:0)

我正在搜索预加载非页内广告,但遗憾的是我没有得到完整且有效的答案。通过一些实验,我能够实现这种机制。这是我的答案:

 public void showInterestialAd(final Context context, final String screenName){
    if (!YouTubeShareClass.getInstance().isInterestitialAdVisible) {
        if(mInterstitialAd == null) {
            mInterstitialAd = new InterstitialAd(context);
            mInterstitialAd.setAdUnitId(context.getString(R.string.interstitial_full_screen));
        }
        showInterstitial(context,screenName);
    }
}

private void showInterstitial(final Context context, final String screenName) {
    if (mInterstitialAd.isLoaded()) {
        displayAd(context,screenName);
        Toast.makeText(context,"Pre loaded",Toast.LENGTH_LONG).show();
    } else {
        AdRequest request = new AdRequest.Builder()
                    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                    .addTestDevice("xxxxxxxxxxxxxxxxxxxxxxxxxx")
                    .build();

        mInterstitialAd.loadAd(request);
        mInterstitialAd.setAdListener(new AdListener() {
            public void onAdLoaded() {
                super.onAdLoaded();
                Toast.makeText(context,"New loaded",Toast.LENGTH_LONG).show();
                if(mInterstitialAd.isLoaded()) {
                    displayAd(context,screenName);
                }
            }
            public void onAdClosed() {
                super.onAdClosed();
                YouTubeShareClass.getInstance().isInterestitialAdVisible = false;
                YouTubeShareClass.getInstance().loadAdRequest();
            }
        });
    }
}

private void displayAd(Context context,String screen) {
    mInterstitialAd.show();
    YouTubeShareClass.getInstance().isInterestitialAdVisible = true;
}

public void loadAdRequest() {
    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
            .addTestDevice("xxxxxxxxxxxxxxxxxxxxxxxxxxx")
            .build();
    mInterstitialAd.loadAd(adRequest);
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            super.onAdLoaded();
            //do nothing... leave empty here...
        }
        @Override
        public void onAdClosed() {
            super.onAdClosed();
            YouTubeShareClass.getInstance().isInterestitialAdVisible = false;
            YouTubeShareClass.getInstance().loadAdRequest();
        }
    });
}

注意: - YouTubeShareClass.getInstance()。isInterestitialAdVisible,变量用于注意一次不会显示两个interestial add,以改善用户体验。 - 当我们制作预加载的插页式广告时,请使用onAdLoaded()方法,不要做任何事情。 - 我在Singleton类中实现了这个方法,这就是为什么它有这样的实现。你可以根据需要改变。