Android模拟器PlatformException(load_failed_ad,无法重新加载失败的广告,id = 571273309,null)

时间:2019-11-13 20:56:13

标签: android flutter firebase-admob

我在Flutter项目中添加了广告。当我第一次在Android模拟器上单击“加载广告”按钮时,广告加载并完美显示。但是,当我关闭广告并再次单击“加载广告”按钮时,出现此异常:

I / flutter(1549):InterstitialAd事件MobileAdEvent.closed D / DynamitePackage(1549):实例化com.google.android.gms.ads.ChimeraAdManagerCreatorImpl I / Ads(1549):此请求是从测试设备发送的。 W / flutter(1549):onAdFailedToLoad:3 I / Ads(1549):广告加载失败:3 I / flutter(1549):InterstitialAd事件MobileAdEvent.failedToLoad E / flutter(1549):[错误:flutter / lib / ui / ui_dart_state.cc(148)]未处理的异常:PlatformException(load_failed_ad,无法重新加载失败的广告,id = 571273309,null)

扑打医生:

[√] Flutter(频道稳定,v1.9.1 + hotfix.6,在Microsoft Windows [Version 10.0.18362.418],语言环境为美国) •Flutter 1.9.1 + hotfix.6版位于C:\ Users \ olgam \ source \ flutter •Framework修订版68587a0916(9周前),2019-09-13 19:46:58 -0700 •引擎修订版b863200c37 •Dart 2.5.0版

[√] Android工具链-为Android设备开发(Android SDK版本28.0.3) •位于以下位置的Android SDK:C:\ Users \ olgam \ AppData \ Local \ Android \ sdk •未配置Android NDK位置(可选;对本机性能分析支持很有用) •平台android-28,构建工具28.0.3 •Java二进制文件位于:C:\ Program Files \ Android \ Android Studio \ jre \ bin \ java •Java版本OpenJDK运行时环境(内部版本1.8.0_202-发行-1483-b03) •接受所有Android许可。

[√] Android Studio(3.5版) •位于C:\ Program Files \ Android \ Android Studio的Android Studio •Flutter插件版本41.0.2 •Dart插件版本191.8593 •Java版本OpenJDK运行时环境(内部版本1.8.0_202-release-1483-b03)

[√]已连接设备(2个可用) •SM G930U•d77c5f0b•android-arm64•安卓8.0.0(API 26) •为x86构建的Android SDK•仿真器-5554•android-x86•Android 9(API 28)(仿真器)

•找不到问题!

这是我的代码:

class MainPage extends StatefulWidget {
  final String _locale;

  MainPage(this._locale);

  @override
  State<StatefulWidget> createState() {
    return MainPageState();
  }
}

class MainPageState extends State<MainPage> {
  InterstitialAd _interstitialAd;
  static const MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo(
      childDirected: true, keywords: ['Games', 'Puzzles', 'Kids']);

  InterstitialAd buildInterstitial() {
    return InterstitialAd(
      adUnitId: Constants.UNIT_ID,
      targetingInfo: targetingInfo,
      listener: (MobileAdEvent event) {
        print("InterstitialAd event $event");
        if (event == MobileAdEvent.failedToLoad) {
          _interstitialAd.load();
        } else if (event == MobileAdEvent.closed) {
          _interstitialAd = buildInterstitial()..load();
        }
      },
    );
  }

  @override
  void initState() {
    FirebaseAdMob.instance.initialize(appId: Constants.APP_ID);
    _interstitialAd = buildInterstitial()..load();
    super.initState();
  }

  @override
  void dispose() {
    _interstitialAd?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Kids Development'),
      ),
      body: Container(
        width: double.infinity,
        margin: EdgeInsets.all(15.0),
        child: RaisedButton(
              child: Text('Load ads'),
              onPressed: () {
                //print('--------trying to build interstitial');
                //_interstitialAd = buildInterstitial();
                _interstitialAd
                  ..load()
                  ..show();
              },
            )
       );
   }
}

这仅在具有真实广告单元ID的情况下发生。如果我使用InterstitialAd.testAdUnitId,那么一切都可以正常工作。

2 个答案:

答案 0 :(得分:1)

就我而言,问题出在我在AdMob控制台中设置的阻止控件。我降低了它们的严格性,现在一切正常。

答案 1 :(得分:0)

由于填充问题,您的广告无法加载。从documentation错误代码3表示已发送请求,但由于缺少库存而没有退回任何广告(请查看AdMob报告中的匹配率)。发送更多广告请求后再检查

这通常发生在新帐户/广告单元ID上。我不明白为什么它会继续在模拟器上发生,因为Google应该只发送测试广告-_-