如何缓存插页式广告以在应用退出时显示它们?

时间:2013-09-13 17:20:00

标签: android exit ads

我在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中复制粘贴上述代码,则广告可能会也可能不会显示在该活动中。它会在稍后出现,即使我离开那个屏幕。

同样,真正的问题:我正在尝试在应用关闭时显示插页式广告。所以我需要一些方法来加载它,然后用户尝试退出。 我的应用程序非常轻巧,而且它是一个基于文本的应用程序,因此可能会有很多来自菜单的来回,我想要显示广告(主菜单)。因此,每次活动打开时加载它都可能会产生性能问题。

我想在应用启动时加载广告,并将其安全地保存在某个位置,当应用关闭时,将其弹出。

那么,怎么做?

3 个答案:

答案 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();

}