AdListener MoPub «onInterstitialFailed» не работает в автономном режиме

Когда мое устройство подключено к Интернету / подключается к Интернету. Тогда работайте нормально.

Я показываю MoPub Interstitial ad между activities.

Ситуация: если ad not loaded или же failed тогда я хочу использовать Intent туда двигаться дальше activity. Но это adListener не работает, когда я не в сети.

Межстраничное mInterstitial.load() в onCreate метод

Когда пользователь нажимает кнопку "Назад", вызывается межстраничное объявление.

      @Override
    public void onBackPressed() {

        if (mInterstitial.isReady() && mInterstitial!=null){
            Log.e(TAG, "funMoPubInterstitialAd: is ready NOWWW" );
            funMoPubInterstitialAd();
        } else {
            Toast.makeText(this, "Connection timed out.", Toast.LENGTH_SHORT).show();
            RanksActivity.super.onBackPressed();
            //e.printStackTrace();
        }
        //super.onBackPressed();
    }

функция межстраничного вызова

      private void funMoPubInterstitialAd(){
        Log.e(TAG, "funMoPubInterstitialAd: inside fun of ad listener" );

        mInterstitial.setInterstitialAdListener(new MoPubInterstitial.InterstitialAdListener() {
            @Override
            public void onInterstitialLoaded(MoPubInterstitial moPubInterstitial) {
                Log.e(TAG, "onInterstitialLoaded: ad loaded and show" );
                mInterstitial.show();
            }
            @Override
            public void onInterstitialFailed(MoPubInterstitial moPubInterstitial, MoPubErrorCode moPubErrorCode) {
                Log.e(TAG, "onInterstitialFailed: Ad failed to load" );
                RanksActivity.super.onBackPressed();
            }
            @Override
            public void onInterstitialShown(MoPubInterstitial moPubInterstitial) {

            }
            @Override
            public void onInterstitialClicked(MoPubInterstitial moPubInterstitial) {

            }
            @Override
            public void onInterstitialDismissed(MoPubInterstitial moPubInterstitial) {
                //customProgressDialogForAd.dismiss();
                RanksActivity.super.onBackPressed();
            }
        });
    }

Проблема: если вы начнете это действие через Интернет, то реклама загрузится (), затем Интернет отключится, а затем onInterstitialFailedне работает.
Если есть показ рекламы в Интернете, тогда нет проблем. Если объявление не показывает, функция застряла здесь.

Любое решение: пожалуйста

1 ответ

Решение

Здесь, если полное решение вашей проблемы и лучшие практики, чтобы показать MoPub Interstitial ad.

Существует два способа / метода / типа вызова MoPub.

1-й способ: прямой звонок adListener

      mInterstitial.setInterstitialAdListener(new MoPubInterstitial.InterstitialAdListener() { .... }

2-й способ: позвонить в MoPub через implements в нашем Activity class

      public class QuestionActivity extends AppCompatActivity implements MoPubInterstitial.InterstitialAdListener { ... }

В настоящее время не работает в 1 - ом пути из AdListener когда Offline/No internetв устройстве. Но работает по 2-му способу / типу .

Итак, мы будем использовать метод 2-го типа для проверки того, что межстраничное объявление не загрузилось или нет? через логическое значение в onInterstitialFailed.

Здесь полная душа

          public class QuestionActivity extends AppCompatActivity implements MoPubInterstitial.InterstitialAdListener {
        // mopub interstitial
        private MoPubInterstitial mInterstitial;
        // mopub interstitial check , ad load to failed or not
        private boolean mInterstitialAdFailedToLoad;
    
        //for custom dialog before interstitial ad
        CustomProgressDialogForAd customProgressDialogForAd;
    
        @Override
        public void onBackPressed() {
            customProgressDialogForAd.show(getSupportFragmentManager(),"before interstitial");
            try {
                if (!mInterstitialAdFailedToLoad){
                    // call this 1st way ad listener if ad not failed to load
                    funInterstitialAdListener();
                }
                else {
                    customProgressDialogForAd.dismiss();
                    QuestionActivity.super.onBackPressed();
                    //e.printStackTrace();
                }
            } catch (Exception e){
                QuestionActivity.super.onBackPressed();
            }
            //super.onBackPressed();
        }
    
       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_question);
            // funCall Mopub initialize
            SdkConfiguration.Builder sdkConfiguration = new SdkConfiguration.Builder(getResources().getString(R.string.moPubSdkConfigAdId_justBannerAd));
            MoPub.initializeSdk(this, sdkConfiguration.build(), initSdkListener());
    
            // progressbar for interstitial ad
            customProgressDialogForAd=new CustomProgressDialogForAd();
        }
    
        //===========Mopub  ads initialization
        private SdkInitializationListener initSdkListener(){
            return new SdkInitializationListener() {
                @Override
                public void onInitializationFinished() {
                    mInterstitial = new MoPubInterstitial(QuestionActivity.this,getResources().getString(R.string.moPub_interstitialAdId));
                    mInterstitial.setInterstitialAdListener(QuestionActivity.this);
                    mInterstitial.load();
                }
            };
        }
    
        // fun of mopub implemented adlistener
        @Override
        public void onInterstitialLoaded(MoPubInterstitial moPubInterstitial) {
            Log.d(TAG, "onInterstitialLoaded: loaded");
        }
        @Override
        public void onInterstitialFailed(MoPubInterstitial moPubInterstitial, MoPubErrorCode moPubErrorCode) {
            // this fun also execute when device NOT CONNECTED WITH Internet
    
            // using this just because of Mopub sdk adListener this fun not work.
            // So we use boolean to know , ad failed to load or not
            mInterstitialAdFailedToLoad = true;
            // this function only for in implement AdListener , so we using here
    
            Log.d(TAG, "onInterstitialFailed: Ad failed to load");
        }
        @Override
        public void onInterstitialShown(MoPubInterstitial moPubInterstitial) {
        }
        @Override
        public void onInterstitialClicked(MoPubInterstitial moPubInterstitial) {
        }
        @Override
        public void onInterstitialDismissed(MoPubInterstitial moPubInterstitial) {
    
        }
    
        // ====== mopub ad listener
        public void funInterstitialAdListener(){
            mInterstitial.setInterstitialAdListener(new MoPubInterstitial.InterstitialAdListener() {
                @Override
                public void onInterstitialLoaded(MoPubInterstitial moPubInterstitial) {
                    mInterstitial.show();
                    customProgressDialogForAd.dismiss();
                }
    
                @Override
                public void onInterstitialFailed(MoPubInterstitial moPubInterstitial, MoPubErrorCode moPubErrorCode) {
                    customProgressDialogForAd.dismiss();
                    QuestionActivity.super.onBackPressed();
    
                    // PROBLEM : This fun not work when device have no Internet , So we use boolean in implements
                }
    
                @Override
                public void onInterstitialShown(MoPubInterstitial moPubInterstitial) {
                }
    
                @Override
                public void onInterstitialClicked(MoPubInterstitial moPubInterstitial) {
    
                }
                @Override
                public void onInterstitialDismissed(MoPubInterstitial moPubInterstitial) {
                    Log.d(TAG, "onInterstitialDismissed: Done");
                    QuestionActivity.super.onBackPressed();
                }
            });
        }

    // activity life cycle
    @Override
    protected void onDestroy() {
        if (mInterstitial!=null){
            mInterstitial.destroy();
        }
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        super.onPause();
        MoPub.onPause(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        MoPub.onStop(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        MoPub.onResume(this);
    }
}

Удачного кодирования :)

Другие вопросы по тегам