【问题标题】:How to cache Interstitial ads to show them at app exit?如何缓存插页式广告以在应用退出时显示它们?
【发布时间】:2013-09-13 17:19:59
【问题描述】:

我在 Play 商店中有一个稳定的 15,000 次下载应用,希望扩大获利...我想添加插页式广告。

我的横幅广告已经很不错了...

插页式广告的问题是:

我想在用户按下主菜单上的返回按钮时展示这些广告,也就是当应用关闭时我想展示全屏广告。 (插页式广告或自家广告,不管它叫什么 - 全屏广告就是我所说的。)

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

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

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

那么,如何做到这一点?

【问题讨论】:

  • 您找到解决此问题的方法了吗?如果您能在这里分享代码,将不胜感激。
  • 当用户返回您的应用时,您可能会展示全屏广告。我相信在退出时,会惹恼试图在您的应用程序之外匆忙做某事的用户。由于在应用程序使用期间的插页式广告,我已经放弃了几个应用程序并安装了替代品,但同样,“回来时:)”是一个非常有趣的替代品。

标签: android exit ads


【解决方案1】:

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

    @Override
    public void onBackPressed() {
        if (interstitial != null && interstitial.isReady()) {
            interstitial.show();
        }
        super.onBackPressed();
    }

【讨论】:

    【解决方案2】:

    显示插页式广告后,您无法完成活动,因为它不会显示。

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

    【讨论】:

    • 您的代码运行正常,但根据 Admob 政策,在应用退出前不会显示广告!,这有什么不同?还是一样?
    【解决方案3】:
    @Override
    public void onBackPressed() {
       Log.d(TAG, "onBackPressed Called");
           if (interstitial.isLoaded()) {
             interstitial.show();
            }
    
       finish();
    
    }
    

    【讨论】:

    • 纯代码的答案没有多大用处,没有任何评论。
    猜你喜欢
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多