Приложение для Android, показывающее межстраничную рекламу admob только один раз

У меня есть простое приложение для веб-просмотра для Android, и я хочу показывать межстраничную рекламу admob между страницами в веб-просмотре.

Я использую этот код:

public class MainActivity extends Activity {

    String url = "http://somepage.com";

    Boolean showProgressOnSplashScreen = true;

    WebView mWebView;
    ProgressBar prgs;
    RelativeLayout splash, main_layout;
    private InterstitialAd mInterstitialAd;


    @SuppressWarnings("deprecation")
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-somenumbers38485838373");

        AdView mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        mInterstitialAd.loadAd(adRequest);

        mInterstitialAd.setAdListener(new AdListener() {
            public void onAdLoaded() {
                // Call displayInterstitial() function
                //displayInterstitial();
            }
        });




        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
                Window.PROGRESS_VISIBILITY_ON);

        mWebView = (WebView) findViewById(R.id.wv);
        prgs = (ProgressBar) findViewById(R.id.progressBar);
        main_layout = (RelativeLayout) findViewById(R.id.main_layout);

        // splash screen View
        if (!showProgressOnSplashScreen)
            ((ProgressBar) findViewById(R.id.progressBarSplash)).setVisibility(View.GONE);
        splash = (RelativeLayout) findViewById(R.id.splash);


        mWebView.loadUrl(url);



        mWebView.setFocusable(true);
        mWebView.setFocusableInTouchMode(true);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setRenderPriority(RenderPriority.HIGH);
        mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        mWebView.getSettings().setDomStorageEnabled(true);
        mWebView.getSettings().setAppCacheEnabled(true);
        mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        mWebView.getSettings().setDatabaseEnabled(true);
        mWebView.getSettings().setDatabasePath(
                this.getFilesDir().getPath() + this.getPackageName()
                        + "/databases/");

        mWebView.getSettings().setSupportMultipleWindows(true);

        mWebView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                }
                else {


                    view.loadUrl(url);

                }
                return false;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                if (prgs.getVisibility() == View.GONE) {
                    prgs.setVisibility(View.VISIBLE);
                }
                displayInterstitial();
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);

                if (prgs.getVisibility() == View.VISIBLE)
                    prgs.setVisibility(View.GONE);

                // check if splash is still there, get it away!
                if (splash.getVisibility() == View.VISIBLE)
                    splash.setVisibility(View.GONE);
                // slideToBottom(splash);

            }

        });

    }


    @Override
    public boolean onKeyDown(final int keyCode, final KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }




    public void displayInterstitial() {
        // If Ads are loaded, show Interstitial else show nothing.
        if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        }
    }

}

Итак, прямо сейчас я загружаю функцию displayInterstitial() внутри onPageStarted. Он загружает объявление после загрузки первой страницы в приложении, но после этого оно больше не отображается на следующих страницах. Как мне это исправить, чтобы у меня было больше рекламы между другими страницами? Я установил ограничение на Admob, чтобы показывать только 1 рекламу в 3 минуты, но у меня время сеанса составляет более 20 минут, поэтому показывать только 1 рекламу - пустая трата времени.


person Niranbd    schedule 19.02.2016    source источник
comment
// displayInterstitial(); удалить строку комментария   -  person Ravi Vaghela    schedule 19.02.2016
comment
Не обращайте внимания на эту функцию, на самом деле я не вызываю здесь displayInterstitial (поэтому у меня есть строка комментариев). Я называю это под public void onPageStarted. Это работает хорошо, но только один раз за сеанс, и я хочу, чтобы это происходило между каждой страницей в веб-просмотре.   -  person Niranbd    schedule 19.02.2016


Ответы (1)


покажи свою добавку в onload

запросить добавление для загрузки в displayInterstitial

public void displayInterstitial() {
                AdRequest adRequest = new AdRequest.Builder().build();    
                mInterstitialAd.loadAd(adRequest);        
        }

mInterstitialAd.setAdListener(new AdListener() {
                public void onAdLoaded() {
                    mInterstitialAd.show();
                }

                @Override
                public void onAdClosed() {

                   new Handler().postDelayed(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            displayInterstitial();
                        }
                    }, 3000);
                }
            });
person AMD    schedule 19.02.2016
comment
Спасибо ! Но теперь я получаю рекламу на каждой странице, а не каждые 3 минуты, как я настроил Admob для рекламного блока... есть идеи, почему это так и как это исправить? - person Niranbd; 19.02.2016
comment
да, интервал объявлений будет работать только с одним запросом, вызываемым несколько раз, мы делаем новый запрос каждый раз, поэтому интервал будет игнорироваться. чтобы исправить это, вы можете управлять интервалом из onAdclosed() в стороне Adlistner - person AMD; 19.02.2016
comment
нажмите на строку ошибки ctrl+f1, чтобы проверить ошибку, возможно, вам не хватает оператора импорта - person AMD; 20.02.2016