Facebook广告错误:您无法在状态LOADING中调用广告的show()

问题描述 投票:5回答:4

我正在按照他们的官方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
4个回答
4
投票

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

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

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

3
投票

嗨:您需要检查广告是否为空,如果在展示之前已加载广告:

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


1
投票

我将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
        }
    }
}

0
投票
 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) {

        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.