预加载插页式广告
Preloading Interstitial ads
我在我的应用程序中 运行 插入了插页式广告,但我不确定如何预加载它们,以便它们在用户看来是即时的。通常它可能需要长达 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);
}
我曾尝试在 activity 启动时调用 launchInterstitial() 和 loadInterstitial() ,然后在我希望广告出现时调用 showAdInter() ,但这种方式不起作用。
有人有什么想法吗?
无法相信没有人对此一无所知,或者不愿意提供帮助。我会 post 在这里回答,希望这能真正帮助到有需要的人。我在 onCreate() 中调用以下方法:
requestNewInterstitial();
方法如下:
private void requestNewInterstitial() {
AdRequest adRequest = new AdRequest.Builder()
.build();
mInterstitialAd.loadAd(adRequest);
}
我创建了一个广告侦听器,以便在广告关闭后在后台重新加载广告:
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
requestNewInterstitial();
}
});
然后我调用 requestNewInterstitial();在我的 onBackPressed() 方法上。
这会产生平滑的结果,即刻出现插页式广告。
我正在搜索 Preloading Interstitial Ads,但不幸的是我没有通过一些实验得到 this.Somehow 的完整和有效的答案,我能够实现这个机制.这是我的答案:
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,变量用于注意不会同时显示两个有趣的广告,以改善用户体验。
- 当我们创建预加载的插页式广告时,制作 onAdLoaded() 方法,不要在那里做任何事情。
- 我在 Singleton class 中实现了这个方法,这就是为什么它有这样的实现。您可以根据需要更改。
我在我的应用程序中 运行 插入了插页式广告,但我不确定如何预加载它们,以便它们在用户看来是即时的。通常它可能需要长达 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);
}
我曾尝试在 activity 启动时调用 launchInterstitial() 和 loadInterstitial() ,然后在我希望广告出现时调用 showAdInter() ,但这种方式不起作用。
有人有什么想法吗?
无法相信没有人对此一无所知,或者不愿意提供帮助。我会 post 在这里回答,希望这能真正帮助到有需要的人。我在 onCreate() 中调用以下方法:
requestNewInterstitial();
方法如下:
private void requestNewInterstitial() {
AdRequest adRequest = new AdRequest.Builder()
.build();
mInterstitialAd.loadAd(adRequest);
}
我创建了一个广告侦听器,以便在广告关闭后在后台重新加载广告:
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
requestNewInterstitial();
}
});
然后我调用 requestNewInterstitial();在我的 onBackPressed() 方法上。
这会产生平滑的结果,即刻出现插页式广告。
我正在搜索 Preloading Interstitial Ads,但不幸的是我没有通过一些实验得到 this.Somehow 的完整和有效的答案,我能够实现这个机制.这是我的答案:
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,变量用于注意不会同时显示两个有趣的广告,以改善用户体验。 - 当我们创建预加载的插页式广告时,制作 onAdLoaded() 方法,不要在那里做任何事情。 - 我在 Singleton class 中实现了这个方法,这就是为什么它有这样的实现。您可以根据需要更改。