我在 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 一切正常。