打开后不会重新加载 flutter admob 横幅广告
flutter admob banner ad not reloading after opening
在我的 flutter 项目中,使用 flutter BloC,我已经开始使用 google_mobile_ads 包使用 admob 广告。横幅广告的显示工作正常。但是,在您点击广告然后 return 返回应用后,广告就消失了。当广告最终被刷新时,它不再是可点击的。
理想的结果是广告要么在导航后保留,要么在return进入应用程序时加载新广告。
当return访问它记录的应用程序时:
W/Ads (27214): #004 网络视图被破坏。忽略操作。
这很可能来自 adListener 回调。唯一触发的是 onAdOpened 回调。 onAdClosed 永远不会被调用。当 return 访问应用程序时,广告 isLoaded 方法始终 return 为真。
到目前为止我已经试过了
- 处理广告然后重新加载
- 重建页面时制作全新的广告
当搜索 webview is destroyed 错误时,我找到了像 this 这样的答案,他们在其中手动销毁了 webview。我不知道该怎么做,因为我使用的是 google 移动广告包并且我自己没有使用任何类型的网络视图。这里唯一的方法是在包提供的广告对象上使用 dispose(),我已经尝试过了。
我正在制作的广告:
BannerAd(
adUnitId: 'ca-app-pub-3940256099942544/6300978111',
request: AdRequest(),
size: AdSize.largeBanner,
listener: AdListener(
onAdClosed: (ad) {
print('banner ad closed');
},
onAdLoaded: (ad) => print('banner ad loaded'),
onAdFailedToLoad: (ad, error) {
print('banner ad failed');
},
onAdOpened: (ad) async {
print('banner ad opened');
},
onApplicationExit: (ad) => ad.dispose(),
onAppEvent: (ad, string1, string2) => print('ad app event: $string1, $string2'),
onNativeAdClicked: (ad) => print('banner native ad clicked'),
),
);
横幅被放置在页面底部
Scaffold(
body: BlocBuilder<HomeBloc, HomeState>(
builder: (context, state) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
// rest of page content
if (state.bannerAd != null)
Container(
color: Colors.white,
width: size.width,
height: 100,
child: Center(
child: AdWidget(ad: state.bannerAd),
),
),
],
);
},
),
)
如果您能就广告未按预期重新加载的原因提供任何建议,我将不胜感激。
解决方案
打开广告时调用 onApplicationExit,处理我的广告。只需从回调中删除处置调用并将其移动到我的 BloC 的关闭方法(我在我的项目中使用 flutter BloC)即可解决问题,并且在打开后导航回应用程序时广告仍然加载。
onApplicationExit在退出应用的过程中被调用
由于您此时处理广告,因此当您 return 到应用程序时它不会出现。
在我的 flutter 项目中,使用 flutter BloC,我已经开始使用 google_mobile_ads 包使用 admob 广告。横幅广告的显示工作正常。但是,在您点击广告然后 return 返回应用后,广告就消失了。当广告最终被刷新时,它不再是可点击的。
理想的结果是广告要么在导航后保留,要么在return进入应用程序时加载新广告。
当return访问它记录的应用程序时: W/Ads (27214): #004 网络视图被破坏。忽略操作。
这很可能来自 adListener 回调。唯一触发的是 onAdOpened 回调。 onAdClosed 永远不会被调用。当 return 访问应用程序时,广告 isLoaded 方法始终 return 为真。
到目前为止我已经试过了
- 处理广告然后重新加载
- 重建页面时制作全新的广告
当搜索 webview is destroyed 错误时,我找到了像 this 这样的答案,他们在其中手动销毁了 webview。我不知道该怎么做,因为我使用的是 google 移动广告包并且我自己没有使用任何类型的网络视图。这里唯一的方法是在包提供的广告对象上使用 dispose(),我已经尝试过了。
我正在制作的广告:
BannerAd(
adUnitId: 'ca-app-pub-3940256099942544/6300978111',
request: AdRequest(),
size: AdSize.largeBanner,
listener: AdListener(
onAdClosed: (ad) {
print('banner ad closed');
},
onAdLoaded: (ad) => print('banner ad loaded'),
onAdFailedToLoad: (ad, error) {
print('banner ad failed');
},
onAdOpened: (ad) async {
print('banner ad opened');
},
onApplicationExit: (ad) => ad.dispose(),
onAppEvent: (ad, string1, string2) => print('ad app event: $string1, $string2'),
onNativeAdClicked: (ad) => print('banner native ad clicked'),
),
);
横幅被放置在页面底部
Scaffold(
body: BlocBuilder<HomeBloc, HomeState>(
builder: (context, state) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: [
// rest of page content
if (state.bannerAd != null)
Container(
color: Colors.white,
width: size.width,
height: 100,
child: Center(
child: AdWidget(ad: state.bannerAd),
),
),
],
);
},
),
)
如果您能就广告未按预期重新加载的原因提供任何建议,我将不胜感激。
解决方案
打开广告时调用 onApplicationExit,处理我的广告。只需从回调中删除处置调用并将其移动到我的 BloC 的关闭方法(我在我的项目中使用 flutter BloC)即可解决问题,并且在打开后导航回应用程序时广告仍然加载。
onApplicationExit在退出应用的过程中被调用
由于您此时处理广告,因此当您 return 到应用程序时它不会出现。