#flutter #admob #flutter-dependencies #googlemobileads
#трепетать #admob #флаттер-зависимости #googlemobileads
Вопрос:
Чтобы показать рекламу, я делаю это:
await adState.showRewardedAd(); await adState.rewardedAd!.show(onUserEarnedReward: (RewardedAd ad, RewardItem reward) { // reward });
и:
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 lt;= maxFailedLoadAttempts) { await createRewardedAd(); } }, ), ); } Futurelt;voidgt; showRewardedAd() async { if (adState.rewardedAd == null) { return await createRewardedAd(true); } adState.rewardedAd!.fullScreenContentCallback = await FullScreenContentCallback( onAdShowedFullScreenContent: (RewardedAd ad) =gt; {}, onAdDismissedFullScreenContent: (RewardedAd ad) async { ad.dispose(); await createRewardedAd(); }, onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) async { ad.dispose(); await createRewardedAd(); }, ); }
Поэтому каждый раз, когда мы закрываем rewardAd, мы создаем/загружаем его снова, чтобы подготовить к следующему разу. Пока здесь все в порядке.
Проблема возникает, когда мы нажимаем, чтобы показать его снова слишком быстро. Когда мы это сделаем:
if (adState.rewardedAd == null) { return await createRewardedAd(true); }
Я заставляю его загружаться и жду await RewardedAd.load()
, НО, несмотря на то, что я жду этого, onAdLoaded
событие занимает некоторое время, и асинхронная функция не знает, что оно еще не готово.
Так что, когда я это сделаю await adState.rewardedAd!
, это может быть равно нулю.
Как я мог бы сделать это более безопасным? Документация Google не охватывает это