我在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,那么一切都可以正常工作。
答案 0 :(得分:1)
就我而言,问题出在我在AdMob控制台中设置的阻止控件。我降低了它们的严格性,现在一切正常。
答案 1 :(得分:0)
由于填充问题,您的广告无法加载。从documentation错误代码3表示已发送请求,但由于缺少库存而没有退回任何广告(请查看AdMob报告中的匹配率)。发送更多广告请求后再检查
这通常发生在新帐户/广告单元ID上。我不明白为什么它会继续在模拟器上发生,因为Google应该只发送测试广告-_-