【问题标题】:Showing AdMob Interstitial ad even after closing the app关闭应用后仍显示 AdMob 插页式广告
【发布时间】:2018-03-05 01:55:08
【问题描述】:

我在我的应用程序中集成了 AdMob 制作 android 应用程序,我正在使用 AdMob 在 WebView 加载 20 秒后显示广告。问题是当用户在 20 秒前关闭应用时,仍然显示插页式广告,这违反了 google AdMob 政策,我怎样才能让用户退出活动或应用时,插页式广告不应该显示

这是我的代码:

new Handler().postDelayed(new Runnable() {
     @Override
     public void run() {
         interAd = new InterstitialAd(MainActivity.this);
         interAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
         AdRequest adRequest = new AdRequest.Builder()
                 .addTestDevice("SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID")
                 .build();
         interAd.loadAd(adRequest);
         interAd.setAdListener(new AdListener() {
                @Override
                public void onAdLoaded() {
                    interAd.show();
         }
     });

     interAd.setAdListener(new AdListener() {
         @Override
        public void onAdClosed() {
            // Code to be executed when the interstitial ad is closed.
             Log.i("Ads", "onAdClosed");
            }
        });
    }
} , 20000);

【问题讨论】:

    标签: android android-studio firebase admob interstitial


    【解决方案1】:

    在调用 onDestroy 时传递你的处理程序

    Handler myHandler = new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
    
                interAd = new InterstitialAd(MainActivity.this);
                interAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
                AdRequest adRequest = new AdRequest.Builder()
                        .addTestDevice("SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID")
                        .build();
                interAd.loadAd(adRequest);
                interAd.setAdListener(new AdListener() {
                    @Override
    
                    public void onAdLoaded() {
                       if(interAd.isLoaded() && interAd !=null)
                          interAd.show();
                    }
                });
    
                interAd.setAdListener(new AdListener() {
    
                @Override
                public void onAdClosed() {
                    // Code to be executed when the interstitial ad is closed.
                    Log.i("Ads", "onAdClosed");
                }
        });
    
            }
        } , 20000);
    
    
    
     @Override
        protected void onDestroy() {
            Log.d("MainActivty","onDestroy removing callbacks...");
            handler.removeCallbacks(myHandler);
            interAd =null
            super.onDestroy();
    
    }
    

    【讨论】:

    • 不工作错误:不兼容的类型。所需的 android.os.handler 发现布尔值,我也导入了 android.os.handler
    【解决方案2】:

    添加 onBackpress 和 onDestroy 覆盖并删除您的处理程序回调,并将 interstitialad 变量设置为 null 。

    @Override
    protected void onBackpressed() {
        handler.removeCallbacks(your handler name here);
        interAd =null
        super.onBackpressed();
    }
    
    @Override
    protected void onDestroy() {
        handler.removeCallbacks(your handler name here);
        interAd =null
        super.onDestroy();
    }
    

    如果你想在你的应用程序进入后台时也处理这个问题,那么也添加 onPause overide。

    @Override
    protected void onPause() {
        handler.removeCallbacks(your handler name here);
        interAd =null
        super.onPause();
     }
    

    希望对您有所帮助。

    如果您需要进一步的帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      相关资源
      最近更新 更多