如何将FirebaseAdmob限制为特定屏幕

时间:2018-08-22 16:55:51

标签: firebase dart admob flutter

我将AdMob与我扑朔迷离的移动应用程序集成在一起,尽管它是在特定屏幕上声明的,但它随处可见,这使得聊天非常困难。有没有一种方法可以指定我们希望在其上显示广告的屏幕,或者至少在检测到它们后将其隐藏。

1 个答案:

答案 0 :(得分:1)

更新: 对于感兴趣的任何人,我都可以通过将其添加到我的应用程序API中来解决它:

Api.dart:

  FirebaseAdMob.instance.initialize(appId: isIos ? ADDMOB_ADID_IOS : ADMOB_APPID_ANDROID);

   static BannerAd createBannerAd() {
    return new BannerAd(
      adUnitId: isIos 
                ? ADDMOB_ADID_IOS
                : ADDMOB_ADID_ANDROID,
      size: AdSize.smartBanner,
      targetingInfo: targetInfo,
      listener: (MobileAdEvent event) {
        try {
          if (event == MobileAdEvent.loaded) {
            isAdShown = true;
          } else if (event == MobileAdEvent.failedToLoad) {
            isAdShown = false;
          } 
        } on Exception catch (error) {
          print('Error, ${error.toString()}');
        }

      }
    );
  }

然后我跟踪一些变量:

Constants.dart:

bool isAdShown = false;
bool calledDisposed = false;
BannerAd banner;

这样,当退出第一个屏幕时,我这样做了:

FirstScreen.dart:

      banner = TradeApi.createBannerAd()
        ..load()
        ..show().catchError(() => print('Error loading add'));
        isAdShown = true;

  if (isAdShown) {
                      await banner.dispose();
                      isAdShown = false;
                      calledDisposed = true; 
                    }

,然后在第二个屏幕中: SecondScreen.dart:

 appBar: new AppBar(
        leading: new WillPopScope(
          onWillPop: () {
            if (!isAdShown && calledDisposed) {
              banner = TradeApi.createBannerAd();
              banner.load()..show();
              isAdShown = true;
              calledDisposed = false;
            }
            return Future<bool>.value(true);
          },
          child: const BackButton()        
        ),
      ),

那是成功的I俩,我不确定这是否是最有效的方法,但确实有效