firebase - 你如何限制 FirebaseAdmob 到特定的屏幕

标签 firebase dart admob flutter

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

最佳答案

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

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

关于firebase - 你如何限制 FirebaseAdmob 到特定的屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51971738/

相关文章:

flutter - 在Flutter中将字符串转换为文件,反之亦然

ios - iOS 7 中的 Google AdMob 错误

firebase - pubspec.yaml : Expected a key while parsing a block mapping when adding cloud_firestore

dns - Firebase 托管自定义域 - 通过 "Go Live"方法更新 DNS 记录后站点不是 "CNAME records"

android - 关于2019年4月11日后GCM实现Android应用(GCM废除)

android - 如何在 flutter 的 Markdown 中添加超链接到文本

dart - Flutter - 如何制作嵌套 ListView ?

Android AdView 泄漏,可能是由于某些内部后台线程

android - AdMob 广告宽度

ios - 应用程序委托(delegate)中的代码与 View Controller