【问题标题】:Admob: Interstitial ads showing every timeAdmob:每次展示的插页式广告
【发布时间】:2017-05-22 19:10:48
【问题描述】:

我正在完成一个视频应用程序,并在离开视频活动时显示插页式广告。我只想每 X 分钟显示一次,但似乎每次我离开该屏幕时都会显示。

这是我的活动代码。

创建时:

  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Bundle b = getIntent().getExtras();
  videoId = b.getString("videoId");
  setContentView(R.layout.youtube_player);

  interstitialAd= new InterstitialAd(this);
  interstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen));
  AdRequest adRequest = new AdRequest.Builder().build();
  interstitialAd.loadAd(adRequest);
  etc...

OnBackPressed:

@Override
public void onBackPressed() {
    ShowAds();

}

private void ShowAds() {
    if (interstitialAd.isLoaded()) {
        interstitialAd.show();
        interstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                super.onAdClosed();
                finish();
            }
        });
    }else{
        super.onBackPressed();
    }
}`

当然,在 AdMob 中是这样设置的:

注意:我的应用程序没有发布,所以它显示的是“预览”或“示例”。我正在使用我的广告单元 ID:

谢谢,

【问题讨论】:

    标签: android admob interstitial


    【解决方案1】:

    两个选项:

    1. 当我离开当前活动时,插页式广告会显示,但前提是我在当前活动中完成了 X 分钟。

      boolean isAdShow=false;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      
          int minute=1;  // X minute
      
          isAdShow=false;
          new CountDownTimer(minute*60000,1000) {
            @Override
            public void onTick(long millisUntilFinished) {
      
            }
      
            @Override
            public void onFinish() {
                isAdShow=true;
            }
        }.start();
      }
      
      private void ShowAds() {
      
         if (interstitialAd.isLoaded() && isAdShow) {
             interstitialAd.show();
             interstitialAd.setAdListener(new AdListener() {
                @Override
                public void onAdClosed() {
                    super.onAdClosed();
                    finish();
                }
             });
          }else{
             super.onBackPressed();
          }
      }
      
    2. 不要等待用户按下返回按钮并离开当前 Activity,只需从 Timer 的 onFinish() 方法调用 ShowAds()

    我建议使用第一个st,因为它也不会违反 AdMob 广告政策和用户体验。

    编辑

    您也可以使用 X 次计数器,例如当 X = 3 时,即在 3 次调用 onCreate() 方法后,才有资格展示广告。

    public static int adCounter;
    public static final int TIME_COUNTER=3;  //Should be always greater than zero
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        adCounter++;
    }
    
    private void ShowAds() {
    
      if (interstitialAd.isLoaded() && adCounter%TIME_COUNTER==0) {
        interstitialAd.show();
        interstitialAd.setAdListener(new AdListener() {
           @Override
           public void onAdClosed() {
               super.onAdClosed();
               finish();
           }
        });
       }else{
        super.onBackPressed();
      }
    }
    

    【讨论】:

    • 感谢您的回答,我会尽快检查!
    • 我已经尝试过了,它确实有效。主要问题是,当我开始另一个视频时,计数器会重置,因此如果计数器时间大于视频,则永远不会显示广告。我应该把计数器放在父活动上吗?
    • @emboole 我不知道您的应用程序的确切型号是什么,所以我无法满足您的要求。该原型基于Ads show after X minutes,因此对于小视频,您永远不会获得广告,但可以对其进行管理,例如通过获取准确的视频时长或其他方式。您可以使用X times counter' instead of X minutes`,请查看我更新的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多