离线插页式广告拦截器应用程序功能

Interestitial Ads blocks app function in offline

我的应用有两个广告:

  1. 横幅
  2. 插页式。

当我打开我的应用程序时,有趣的广告首先出现(当数据打开时)。当(数据关闭)应用程序无法正常运行时,如按钮点击等。只有当广告完成显示我的应用程序才能运行,否则它将无法离线运行。

我想 运行 我的应用程序处于离线状态,即使广告没有显示,我的应用程序也应该可以运行。 希望你能帮助我,这个问题对其他人也有帮助

我的项目

MainActivity.Java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";
    private InterstitialAd interstitial;
    private AdView mAdView;
    Button xxxx;

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

    //GOOGLE ADMOB FIREBASE ADS //

    //Interstitial//

    AdRequest adRequest2 = new AdRequest.Builder().build();
    interstitial = new InterstitialAd(MainActivity.this);
    interstitial.setAdUnitId("ca-app-pub-8736194125011489/4511020459");
    interstitial.loadAd(adRequest2);
    interstitial.setAdListener(new AdListener() {
        @Override
        public void onAdLoaded() {
            displayInterstitial();
        }
    });
}

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

    //Banner Ad//

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

    //button//

    xxxx = (Button)findViewById(R.id.xxxx);
    xxxx.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent xxxx = new Intent(MainActivity.this, xxxx.class);
            startActivity(xxxx);
        }
    });

清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jobyreuben.yyyyyyyyy">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity android:name=".SplashScreen" >

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

     </activity>


    <activity android:name=".MainActivity"/>


    <activity
        android:name=".xxxx"
        android:configChanges="orientation"
        android:screenOrientation="portrait" />

    </application>
    </manifest>

试试放 xxxx = (Button)findViewById(R.id.xxxx);AdRequest adRequest2 = new AdRequest.Builder().build();

之前

根据您的代码,您在 displayInterstitial 方法中向按钮添加侦听器,该方法仅在 onAdLoaded() 回调方法加载 interstitialAd 时调用,因此您首先在屏幕上看到广告,然后按钮才起作用您关闭插页式广告。

并且在柜台侧,当互联网关闭时,interstitialAd 未加载,因此 onAdLoaded() -> displayInterstitial() 未被调用,并且没有向您的按钮添加侦听器。

  1. AndroidManifest.xml

在应用程序标签内添加广告Activity,如果要使用插页式广告

<meta-data android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />

<activity android:name="com.google.android.gms.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
          android:theme="@android:style/Theme.Translucent" />
  1. 主要Activity

    private InterstitialAd interstitial;
    private AdView mAdView;
    Button xxxx;
    
      @Override
      protected void onCreate (Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
    
          xxxx = (Button)findViewById(R.id.xxxx);
          xxxx.setOnClickListener(new View.OnClickListener() {
                @Override
               public void onClick(View v) {
                 Intent xxxx = new Intent(MainActivity.this, xxxx.class);
                 startActivity(xxxx);
               }
          });
    
          mAdView = (AdView) findViewById(R.id.adView);
          AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
          adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);  // for testing only
          mAdView.loadAd(adRequestBuilder.build()); 
    
          interstitial = new InterstitialAd(this);
          interstitial.setAdUnitId("ca-app-pub-8736194125011489/4511020459");
          interstitial.setAdListener(new AdListener() {
                 @Override
                 public void onAdLoaded() {}
    
                 @Override
                 public void onAdClosed() {
                      loadIntersitialAd();
                 }
          });
    
          loadIntersitialAd();
      }
    
      private void loadIntersitialAd(){
    
          AdRequest interstitialRequest = new AdRequest.Builder().build();
          interstitial.loadAd(interstitialRequest);
      }
    
      public void displayInterstitial() {
         if (interstitial.isLoaded()) interstitial.show();
      }
    
      public boolean isInterstitialLoaded(){
        return interstitial.isLoaded();
      }
    
      @Override
      protected void onResume() {
        super.onResume();
        mAdView.resume();
      }
    
      @Override
      protected void onPause() {
        super.onPause();
        mAdView.pause();
      }
    
      @Override
      protected void onDestroy() {
        super.onDestroy();
        mAdView.destroy();
     }
    }
    

每当您想显示广告调用时 displayInterstitial()

编辑

如果您想在广告加载后立即显示插页式广告,请从 onAdLoaded() 调用 displayInterstitial() 但这不是理想的方式,加载广告需要一些时间,因此您的广告之间会有一些延迟Activity 出现在前台和插页式广告展示中。

interstitial.setAdListener(new AdListener() {
         @Override
         public void onAdLoaded() {
              displayInterstitial();   
         }

         @Override
         public void onAdClosed() {
              loadIntersitialAd();
         }
  });

编辑 2

当您从 onAdLoaded() 回调方法调用 displayInterstitial() 时,不要从 onAdClosed() 加载 loadIntersitialAd(),因为它会创建递归循环。

interstitial.setAdListener(new AdListener() {
         @Override
         public void onAdLoaded() {
              displayInterstitial();   
         }

         @Override
         public void onAdClosed() {

         }
  });