如何停止在选项卡中延迟显示插页式广告?

How to stop delay showing Interstitial ads in Tabs?

我创建了一个 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;
    }
}

由于网络速度、网络连接、Admob 的服务器等原因,InterstitialAd 几乎不可能没有任何延迟地加载。

这就是为什么要先加载 InterstitialAd,然后在您希望它显示时显示的原因。

目前,您正在 SearchFragment 的 onCreateView() 方法中加载一个 InterstitialAd,然后在加载后立即显示它。这实际上是错误的做法。

相反,您应该更早地加载广告,例如在 MainActivity 的 onCreate() 方法中。然后,在 SearchFragment 的 switch case 中检查是否加载了 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 单元 ID 粘贴到您在此处显示的代码中。那不是您应该分享的信息。