Не удалось скрыть объявление сразу после показа объявления на флаттере - PullRequest
0 голосов
/ 05 сентября 2018

Мы создали следующий класс для отображения 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)

Как мы можем избежать этого, если сделаем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...