【问题标题】:Facebook Ads Error : You can't call show() for ad in state LOADINGFacebook 广告错误:您不能为处于 LOADING 状态的广告调用 show()
【发布时间】:2019-10-21 23:29:26
【问题描述】:

我正在按照他们的官方documentation 在我的应用程序中集成 Facebook 广告。但是当我运行我的应用程序时,出现以下异常

java.lang.IllegalStateException: You can't call show() for ad in state LOADING. You can change Integration Error mode by setting AdSettings.setIntegrationErrorMode()
    at com.facebook.ads.internal.c.a.a(Unknown Source:122)
    at com.facebook.ads.internal.c.f.a(Unknown Source:6)
    at com.facebook.ads.InterstitialAd.show(Unknown Source:2)
    at tech.grapegames.pdfreader.ui.MainActivity.moveToFragment(MainActivity.java:115)
    at tech.grapegames.pdfreader.ui.HomeFragment.onClick(HomeFragment.java:85)
    at android.view.View.performClick(View.java:6897)
    at android.view.View$PerformClick.run(View.java:26101)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

下面是我的代码

private com.facebook.ads.InterstitialAd fbInterstitialAd;
fbInterstitialAd = new com.facebook.ads.InterstitialAd(this, getString(R.string.fb_interstitial_ad_id));
fbInterstitialAd.loadAd();

我在下面展示它

if (fbInterstitialAd.isAdLoaded() && !fbInterstitialAd.isAdInvalidated()) {
fbInterstitialAd.show();//This line causes the crash

这是我在 build.gradle 中添加的依赖项

implementation 'com.facebook.android:audience-network-sdk:5.+'

【问题讨论】:

    标签: android facebook-ads-api


    【解决方案1】:

    您使用了错误的依赖项。替换以下依赖项:

    implementation 'com.facebook.android:audience-network-sdk:5.+'
    

    implementation 'com.facebook.android:audience-network-sdk:5.0.1'
    

    【讨论】:

      【解决方案2】:

      您好:您需要检查您的广告是否不为空,以及在展示之前是否已加载:

      if(fbInterstitialAd != null && fbInterstitialAd.isAdLoaded()) fbInterstitialAd.show();

      【讨论】:

        【解决方案3】:

        我将 facebook 广告从 5.0.1 更新到 5.3.1,但我遇到了同样的错误:

        java.lang.IllegalStateException: You can't call load() for ad in state LOADING. Previous states: LOADING << CREATED. You can change Integration Error mode by setting AdSettings.setIntegrationErrorMode()
        

        当您在加载前一个广告时尝试加载新广告时发生此错误。 他们在写代码时抽什么烟?他们应该将错误重定向到“onError”方法,但他们决定抛出 IllegalStateException

        我的解决方案并不优雅,但它正在发挥作用

        // load the ad
        public void load() {
            if (interstitialAd != null) {
                try {
                    interstitialAd.loadAd();
                } catch (Throwable e) {
                    // Do nothing, just skip and wait for ad loading
                }
            }
        }
        
        // show the ad
        public void show() {
            if (interstitialAd != null && interstitialAd.isAdLoaded()) {
                try {
                    interstitialAd.show();
                } catch (Throwable e) {
                    // Do nothing, just skip and wait for ad loading
                }
            }
        }
        

        【讨论】:

          【解决方案4】:
           fb_interstitialAd.setAdListener(new InterstitialAdListener() {
                  @Override
                  public void onInterstitialDisplayed(Ad ad) {
                      Toast.makeText(VideoStatusActivity.this, "Display", 
                    Toast.LENGTH_SHORT).show();
                  }
          
                  @Override
                  public void onInterstitialDismissed(Ad ad) {
                      fb_interstitialAd.loadAd();
                  }
          
                  @Override
                  public void onError(Ad ad, AdError adError) {
          
                  }
          
                  @Override
                  public void onAdLoaded(Ad ad) {
          
                  }
          
                  @Override
                  public void onAdClicked(Ad ad) {
          
                  }
          
                  @Override
                  public void onLoggingImpression(Ad ad) {
          
                  }
              });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-05
            • 2019-01-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多