Как остановить задержку показа межстраничной рекламы во вкладках?

Я создал приложение для Android с 3 вкладками (фрагменты).

Как остановить задержку показа межстраничной рекламы во вкладках?

Я добавил межстраничные объявления на вкладке поиска. Это означает, что когда я нажимаю вкладку «Поиск», появляется всплывающая реклама. Но проблема в том, что межстраничная реклама загружается через 3 секунды. Это неправильно с политикой AdMob. Как это исправить? Я хочу, чтобы объявление загружалось без промедления при переходе на вкладку "Поиск".

Вот мой код:

MainActivity.java

public class MainActivity extends AppCompatActivity {                                                

    public InterstitialAd mInterstitialAd;                                                           

    @Override                                                                                        
    protected void onCreate(Bundle savedInstanceState) {                                             
        super.onCreate(savedInstanceState);                                                          
        setContentView(R.layout.activity_main);                                                      

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);                       
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,              
                new HomeFragment()).commit();                                                        
        bottomNav.setOnNavigationItemSelectedListener(navListener);                                  
    }                                                                                                


            private BottomNavigationView.OnNavigationItemSelectedListener navListener =              
            new BottomNavigationView.OnNavigationItemSelectedListener() {                            
                @Override                                                                            
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {                    
                    Fragment selectedFragment = null;                                                

                    switch (item.getItemId()) {                                                      
                        case R.id.nav_home:                                                          
                            selectedFragment = new HomeFragment();                                   
                            break;                                                                   
                        case R.id.nav_favorites:                                                     
                            selectedFragment = new FavoritesFragment();                              
                            break;                                                                   
                        case R.id.nav_search:                                                        
                            selectedFragment = new SearchFragment();                                 
                            break;                                                                   
                    }                                                                                                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,  
                            selectedFragment).commit();                                                                                                            
                    return true;                                                                     
                }                                                                                    
            };                                                                                       



//display code                                                                                       
private void displayInterstitial() {                                                                 

    mInterstitialAd.setAdListener(new AdListener() {                                                 
        public void onAdLoaded() {                                                                   
            if (mInterstitialAd.isLoaded()) {                                                        
                mInterstitialAd.show();                                                              
            }                                                                                        
        }                                                                                            
    });                                                                                              
}                                                                                                    
// display code end                                                                                  

}                             

SearchFragment.java

public class SearchFragment extends Fragment {
    public InterstitialAd mInterstitialAd;
    public static ViewPager viewPager;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_search, container, false);

      //fragment Interstitial ad code start
        final AdRequest adRequest = new AdRequest.Builder().build();
        mInterstitialAd = new InterstitialAd(getActivity());
        mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
        mInterstitialAd.loadAd(adRequest);
        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                super.onAdLoaded();
                if (mInterstitialAd.isLoaded()){
                    mInterstitialAd.show();
                }
            }
            @Override
            public void onAdClosed() {
            }
        });
        //fragment Interstitial ad code end


        return v;
    }
}
0
0
1 025
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Почти невозможно загрузить InterstitialAd без какой-либо задержки по таким причинам, как скорость сети, возможность подключения к сети, серверы Admob и т. д.

Вот почему InterstitialAds сначала загружаются, а затем показываются, когда вы хотите, чтобы они отображались.

В настоящее время вы загружаете InterstitialAd в методе onCreateView() вашего SearchFragment, а затем показываете его сразу после загрузки. На самом деле это неправильный подход.

Вместо этого вам следует загрузить рекламу намного раньше, например, в методе onCreate() вашей MainActivity. Затем в случае переключения для SearchFragment проверьте, загружено ли InterstitialAd. Если это так, покажите это.

Вот что я имею в виду:

public class MainActivity extends AppCompatActivity {                                                

public InterstitialAd mInterstitialAd;                                                           

@Override                                                                                        
protected void onCreate(Bundle savedInstanceState) {                                             
    super.onCreate(savedInstanceState);                                                          
    setContentView(R.layout.activity_main);                                                      

    loadInterstitial();

    BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);                       
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,              
            new HomeFragment()).commit();                                                        
    bottomNav.setOnNavigationItemSelectedListener(navListener);                                  
}                                                                                                


private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {                            
    @Override                                                                            
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {                    
        Fragment selectedFragment = null;                                                
        switch (item.getItemId()) {                                                      
            case R.id.nav_home:                                                          
                selectedFragment = new HomeFragment();                                   
                break;                                                                   
            case R.id.nav_favorites:                                                     
                selectedFragment = new FavoritesFragment();                              
                break;                                                                   
            case R.id.nav_search:                                                        
                selectedFragment = new SearchFragment();     
                displayInterstitial();
                break;                                                                   
        }                                                                                                    
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,  
                        selectedFragment).commit();                                                                                                            
        return true;                                                                     
    }                                                                                    
};                                                                                       

private void loadInterstitial(){
    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("ADMOB_INTERSTITIAL_ID");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());
    mInterstitialAd.setAdListener(new AdListener() {
        @Override
        public void onAdClosed() {
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
        }
    });
}

private void displayInterstitial() {                                                                 
    if (mInterstitialAd.isLoaded()) {                                                        
        mInterstitialAd.show();                                                              
    }                                                                                               
}                                                                                                       

Вам также следует загрузить следующее InterstitialAd, когда объявление будет закрыто, чтобы оно было готово к следующему нажатию SearchFragment.

Кроме того, не вставляйте свой идентификатор Admob Unit в код, который вы здесь показываете. Это не та информация, которой вам следует делиться.

Спасибо, работает. getactivity отображается красным цветом в private void loadInterstitial (). Поэтому я изменил getactivity на это. Тогда все в порядке.

Mr.Soft 14.07.2018 12:27

Спасибо, работает. * getactivity отображается красным цветом в private void loadInterstitial (). Поэтому я изменил getactivity на это. Тогда все в порядке. Q: Время задержки уменьшено, но перед показом рекламы я вижу фрагмент поиска. Почему?

Mr.Soft 14.07.2018 12:52

@ Mr.Soft Извините за эту ошибку, я скопировал и вставил код из вашего фрагмента и забыл отредактировать эту часть. Что касается вашего вопроса, SearchFragment все еще может появиться, потому что код для замены фрагмента все еще выполняется. Загрузка межстраничного объявления и показ фрагмента выполняются одновременно, поэтому SearchFragment может отображаться первым до того, как появится объявление. Если вы не хотите, чтобы SearchFragment отображался, вы можете изменить код, чтобы он загружал SearchFragment, если InterstitialAd еще не загружен, или после AdClosed, onAdFailedToLoad и onAdLeftApplication ().

Jackey 14.07.2018 21:34

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