2

我在 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 中,则广告可能会或可能不会出现在该活动中。它稍后会显示,即使我离开该屏幕也是如此。

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

我想在应用程序启动时加载广告,并将其保存在安全的地方,当应用程序关闭时,让它弹出。

那么,如何做到这一点?

4

3 回答 3

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 将根本不起作用。加载插页式广告需要一些时间(大约几秒钟)。还有其他选项如何解决此问题,但这是我的解决方案,如果尚未加载插页式广告,只需关闭应用程序即可。

于 2015-02-17T14:00:10.120 回答
4

您可以尝试仅在用户按下后退按钮后显示插页式广告:

    @Override
    public void onBackPressed() {
        if (interstitial != null && interstitial.isReady()) {
            interstitial.show();
        }
        super.onBackPressed();
    }
于 2014-01-11T14:22:40.243 回答
0
@Override
public void onBackPressed() {
   Log.d(TAG, "onBackPressed Called");
       if (interstitial.isLoaded()) {
         interstitial.show();
        }

   finish();

}
于 2014-10-10T17:25:27.413 回答