Мы создали следующий класс для отображения AdMob на флаттере.
import 'package:firebase_admob/firebase_admob.dart';
import 'package:xxxxx/models/const.dart';
class Ads {
static BannerAd _bannerAd;
static init() {
FirebaseAdMob.instance.initialize(appId: Const.adAppId);
}
static BannerAd createBannerAd() {
return new BannerAd(
adUnitId: Const.adUnitId,
size: AdSize.banner,
targetingInfo: targetingInfo,
listener: (MobileAdEvent event) {
print("BannerAd event $event");
},
);
}
static void showBanner() {
if (_bannerAd == null) {
_bannerAd = createBannerAd();
}
_bannerAd.load().then((load) {
_bannerAd.show(anchorType: AnchorType.bottom);
});
}
static void hideBanner() {
_bannerAd?.dispose();
_bannerAd = null;
}
static final MobileAdTargetingInfo targetingInfo = new MobileAdTargetingInfo(
testDevices: Const.testDevices,
keywords: Const.keywords,
birthday: new DateTime.now(),
gender: MobileAdGender.female,
);
}
Следующие значения правильно определены в классе Const.
adAppId
, adUnitId
, testDevices
, keywords
init()
вызывается сразу после запуска.
showBanner()
будет вызываться при показе объявления.
hideBanner()
будет вызываться при сокрытии рекламы.
В большинстве случаев они будут работать как положено.
Но после вызова _bannerAd.show()
реклама не будет скрыта, если hideBanner()
вызывается до того, как слушатель получит MobileAdEvent.loaded
.
[OK]
_bannerAd.show()
-> получить MobileAdEvent.loaded
-> hideBanner()
[NG]
_bannerAd.show()
-> hideBanner()
-> (получить MobileAdEvent.loaded
)
Как мы можем избежать этого, если сделаем?