我在Play商店有一个稳定的15k下载应用程序,希望扩大获利...我想添加插页式广告。
我已经拥有相当不错的横幅广告......
我对插页式广告的问题是:
我想在用户按下主菜单上的后退按钮时显示这些广告,即应用关闭时我要显示全屏广告。 (非页内广告或众议院广告,无论它叫什么 - 全屏都是我所说的。)
https://developers.google.com/mobile-ads-sdk/docs/admob/advanced
我已经尝试过这样做的基本教科书代码,但我不确定如何。问题是应用关闭之前它有机会展示广告。
以下是代码:
import com.google.ads.*;
public class BannerExample extends Activity implements AdListener {
private InterstitialAd interstitial;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create the interstitial
interstitial = new InterstitialAd(this, MY_INTERSTITIAL_UNIT_ID);
// Create ad request
AdRequest adRequest = new AdRequest();
// Begin loading your interstitial
interstitial.loadAd(adRequest);
// Set Ad Listener to use the callbacks below
interstitial.setAdListener(this);
}
@Override
public void onReceiveAd(Ad ad) {
Log.d("OK", "Received ad");
if (ad == interstitial) {
interstitial.show();
}
}
}
我做过的唯一修改是我尝试将它放在OnDestroy()中。但是应用会在广告加载和展示之前关闭,然后关闭或按下。
实际上,插页式广告确实会显示出来。 如果我只是在主菜单活动的OnCreate中复制粘贴上述代码,则广告可能会也可能不会显示在该活动中。它会在稍后出现,即使我离开那个屏幕。
同样,真正的问题:我正在尝试在应用关闭时显示插页式广告。所以我需要一些方法来加载它,然后用户尝试退出。 我的应用程序非常轻巧,而且它是一个基于文本的应用程序,因此可能会有很多来自菜单的来回,我想要显示广告(主菜单)。因此,每次活动打开时加载它都可能会产生性能问题。
我想在应用启动时加载广告,并将其安全地保存在某个位置,当应用关闭时,将其弹出。
那么,怎么做?
答案 0 :(得分:4)
您只能在用户按下后退按钮后尝试显示插页式广告:
@Override
public void onBackPressed() {
if (interstitial != null && interstitial.isReady()) {
interstitial.show();
}
super.onBackPressed();
}
答案 1 :(得分:4)
显示插页式广告后,您无法完成活动,因为它不会显示。
将interstitial.show()
放入onDestroy()
方法也不是一个好主意。
我很惊讶这个问题仍然没有正确而完整的答案,因此我会将我的代码设置正常。
public class MainActivity extends Activity {
// AdMob full screen ad
private InterstitialAd interstitial;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
// AdMob full screen ad
AdRequest adFullScreenRequest = new AdRequest.Builder().build();
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId("myAdUnitId");
interstitial.loadAd(adFullScreenRequest);
interstitial.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
super.onAdClosed();
finish();
}
@Override
public void onAdFailedToLoad(int errorCode) {
super.onAdFailedToLoad(errorCode);
finish();
}
});
}
/**
* Invoke displayInterstitial() when you are ready to display an interstitial.
*/
public void displayInterstitial() {
if (interstitial.isLoaded()) {
interstitial.show();
} else {
finish();
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode){
case KeyEvent.KEYCODE_BACK:
displayInterstitial();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
重要的是为两种情况设置AdListener
:
用户已关闭广告
广告无法加载
在这些情况下,您必须按finish()
方法关闭活动(和广告)。
如果我们的插页式广告尚未加载,则另一件事是使用finish()
。如果你不使用finish()
那么backButton根本不会工作,直到加载插页式广告。加载插页式广告需要一些时间(大约几秒钟)。还有其他选择如何解决这个问题,但这里是我的解决方案,如果没有加载插页式广告,只需关闭应用程序。
答案 2 :(得分:0)
@Override
public void onBackPressed() {
Log.d(TAG, "onBackPressed Called");
if (interstitial.isLoaded()) {
interstitial.show();
}
finish();
}