Dan*_*ani 5 admob flutter flutter-dependencies google-mobile-ads
为了展示广告,我这样做:
await adState.showRewardedAd();
await adState.rewardedAd!.show(onUserEarnedReward: (RewardedAd ad, RewardItem reward) {
// reward
});
Run Code Online (Sandbox Code Playgroud)
和:
Future createRewardedAd([bool showVideo = false]) async {
await RewardedAd.load(
adUnitId: rewardeUnitAdId,
request: request,
rewardedAdLoadCallback: RewardedAdLoadCallback(
onAdLoaded: (RewardedAd ad) async {
adState.rewardedAd = ad;
_numRewardedLoadAttempts = 0;
if (showVideo) {
showRewardedAd();
}
},
onAdFailedToLoad: (LoadAdError error) async {
adState.rewardedAd = null;
_numRewardedLoadAttempts += 1;
if (_numRewardedLoadAttempts <= maxFailedLoadAttempts) {
await createRewardedAd();
}
},
),
);
}
Future<void> showRewardedAd() async {
if (adState.rewardedAd == null) {
return await createRewardedAd(true);
}
adState.rewardedAd!.fullScreenContentCallback =
await FullScreenContentCallback(
onAdShowedFullScreenContent: (RewardedAd ad) => {},
onAdDismissedFullScreenContent: (RewardedAd ad) async {
ad.dispose();
await createRewardedAd();
},
onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) async {
ad.dispose();
await createRewardedAd();
},
);
}
Run Code Online (Sandbox Code Playgroud)
因此,每次我们关闭奖励广告时,我们都会再次创建/加载它,以便为下次做好准备。直到这里一切都很好。
当我们点击再次显示它的速度太快时,问题就出现了。当我们这样做时:
if (adState.rewardedAd == null) {
return await createRewardedAd(true);
}
Run Code Online (Sandbox Code Playgroud)
我强制加载它并等待,await RewardedAd.load()
但尽管我等待,该onAdLoaded
事件仍然需要一些时间,并且异步函数不知道它尚未准备好。
所以,当我这样做时,await adState.rewardedAd!
它可以为空。
我怎样才能让这个更安全?谷歌的文档没有涵盖这一点
归档时间: |
|
查看次数: |
735 次 |
最近记录: |