我正在我的应用中运行插页式广告,但我不确定如何预加载它们,以便用户看起来是即时的。通常它可能需要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(),但它不会那样工作。
有人有什么想法吗?
答案 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类中实现了这个方法,这就是为什么它有这样的实现。你可以根据需要改变。