1

我在 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 (Channel stable, v1.9.1+hotfix.6, on Microsoft Windows [Version 10.0.18362.418], locale en-US) • Flutter version 1.9.1+hotfix.6 at C:\Users\olgam\source \flutter • 框架修订版 68587a0916(9 周前),2019-09-13 19:46:58 -0700 • 引擎修订版 b863200c37 • Dart 版本 2.5.0

[√] Android 工具链 - 为 Android 设备开发(Android SDK 版本 28.0.3) • C:\Users\olgam\AppData\Local\Android\sdk 中的 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-release-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 • Android 8.0.0 (API 26) • 为 x86 构建的 Android SDK • emulator-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 一切正常。

4

2 回答 2

1

由于填充问题,您的广告无法加载。从文档中,错误代码 3 表示请求已发送,但由于库存不足而未返回任何广告(请查看您的 AdMob 报告以了解匹配率)。发送更多广告请求后回来查看

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

于 2019-11-14T00:59:54.000 回答
1

就我而言,问题在于我在 AdMob 控制台中设置的阻止控件。我让它们变得不那么严格,现在一切正常。

于 2019-11-15T01:39:14.337 回答