首页 > 解决方案 > 您如何将 FirebaseAdmob 限制为特定屏幕

问题描述

我将 AdMob 与我的 Flutter 移动应用程序集成在一起,但是,尽管它是在特定屏幕上声明的,但它却无处不在,这使得聊天变得非常困难。有没有办法指定我们希望在哪个屏幕上显示广告或至少在检测到它们时隐藏它们。

标签: firebasedartadmobflutter

解决方案


更新:对于任何感兴趣的人,我都可以通过将其添加到我的应用程序 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()}');
        }

      }
    );
  }

然后我跟踪了一些变量:

常量.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()        
        ),
      ),

那成功了,我不确定这是否是最有效的方法,但它有效


推荐阅读