flutter集成admob库时碰到的至今为止都没解决的坑

前几天开始给一个上架的应用集成admob。这个应用本身日活很少,每天只有几个人使用。

本来想着先免费一段时间,等到日活到100的时候再来集成admob的,这样每天的收入不至于难看。

但应用做完后,自己也在各个平台做了些推广,对针对产品做了些seo和aso,但三个多月时间过去,每天还是只有几个人使用。
每次好不容易推广带来一些流量,但无奈产品留存太低,基本用完就卸载,所以就放弃了等到日活到100后再集成admob的计划。

至于为什么产品留存这么低,我分析大概几个原因:

  1. 产品是工具类的产品,而且是一次性的,用完可能就很久才会两次需要。
  2. 推广产品的时候,推广目的用户不精准,大部分靠推广带来的用户可能只是图个新鲜,并不是真正需要此功能。
  3. 从play console后台看到下载此应用的用户很多不英语区的国家,但我这个产品目前只针对英语,而且软件里ui显示的文字只有英语。这就导致用户使用后不太满足自己的要求。

基于上述原因,所以决定趁早开始集成admob,想要等到100日活,估计等到猴年马月。

第一步开通admob。

开通admob还是蛮简单的。不过这里注意一点,选区的时候一定要注意,选定完后就不能修改了。
由于我的playstore 账号是中国大陆区的,所以admob也选择了相同的区。

第二步在admob上添加应用和添加广告单元。

开通完admob后,就要添加应用了。
由于应用已上架了一段时间,所以添加应用时,直接选择应用商店并输入应用包名就可以找到并添加了。

添加完后第一时间在相关的应用对应的官网上添加ads.txt文件,然后在admob验证应用。只有验证完成的应用才会请求到广告。
验证完成后会如下图显示:

flutter集成admob库时碰到的至今为止都没解决的坑

验证成功后就可以添加广告单元了,我图省事添加了两个最简单的横幅广告,每个广告单元有唯一的广告ID,后面在代码集成的时候会用到。

第三步在flutter中集成admobs

先在代码里添加admob的依赖。

google_mobile_ads: ^5.1.0

然后再写一个专门显示横幅广告的widget.


class BannerAdWidget extends StatefulWidget {
  String adId;
  EdgeInsets? margin;

  BannerAdWidget(this.adId, {this.margin});

  @override
  State<StatefulWidget> createState() {
    return BannerAdWidgetState();
  }
}

class BannerAdWidgetState extends State<BannerAdWidget> {
  BannerAd? bannerAd;
  bool adReady = false;

  void loadBanner() {
    if (bannerAd != null) {
      setState(() {});
      return;
    }
    bannerAd = BannerAd(
      adUnitId: widget.adId,
      request: const AdRequest(),
      size: AdSize.banner,
      listener: BannerAdListener(onAdLoaded: (_) {
        adReady = true;
        setState(() {});
      }, onAdFailedToLoad: (ad, err) {
        adReady = false;
        bannerAd = null;
        setState(() {});
      }),
    );
    bannerAd?.load();
  }

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    AdmobAdMgrViewHelper.addReloadFailedAdCb(loadBanner);
    loadBanner();
  }

  @override
  void dispose() {
    // TODO: implement dispose
    AdmobAdMgrViewHelper.removeReloadFailedAdCb(loadBanner);
    bannerAd?.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return (adReady && bannerAd != null)
        ? Container(
            margin: widget.margin,
            borderRadius: 2,
            child: Center(
              child: SizedBox(
                width: bannerAd!.size.width.toDouble(),
                height: bannerAd!.size.height.toDouble(),
                child: AdWidget(
                  ad: bannerAd!,
                ),
              ),
            ),
          )
        : const SizedBox.shrink();
  }
}

使用的时候就非常方便

Column(children:[
    BannerAdWidget(
        //上面在admob中创建的广告单元ID
      adUid,
    ),
])

这样在你的应用中就可以显示广告了。

最后碰到的无解的坑。

本来一切都顺利的。但打包测试的时候,发现加载完广告后,应用掉帧厉害,跳转界面时能明显感觉到不流畅。起初以为是哪个地方设置的不对,但找了一圈也没找到原因。遂不得不上github仓库的issue中尝试找到解决办法。

经过一通搜索,还真有不少人碰到同样的问题。

flutter集成admob库时碰到的至今为止都没解决的坑

看了下各个网友的回复,大概知道为什么性能这么低了。原来flutter版的admob实现方式是在flutter中嵌套一个webview来显示广告,而flutter对webview的支持的不够好,导致显示的性能非常低。
最主要的是,这个问题,现在也没有解决!!!
无奈,只能先这样上架了,反正每天也没几个人使用。

原创文章,作者:简单一点,如若转载,请注明出处:https://www.506064.com/n/143376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
简单一点的头像简单一点
上一篇 2024-10-19 16:31
下一篇 2024-10-19 16:41

相关推荐

  • 使用Flutter开发ToDo List App

    本文将会介绍如何使用Flutter开发一个实用的ToDo List App。ToDo List,即待办事项清单,是一种记录人们未处理工作和待办事项的方式。随着日常生活的快节奏,如此…

    编程 2025-04-27
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25
  • Flutter和React Native的比较

    一、性能比较 Flutter是Google推出的移动端UI框架,最初是为了高性能而设计的。它使用Dart编写,具有JIT和AOT两种编译模式,可以更好地优化性能。相比之下,Reac…

    编程 2025-04-23
  • Flutter Canvas的多方面探究

    一、Canvas简介 Canvas是Flutter中的绘图类,它提供了一系列绘制2D图形的方法和工具。例如,绘制直线,矩形,圆形等形状。在使用Canvas之前,必须先创建一个Cus…

    编程 2025-04-22
  • Flutter获取当前时间的方法

    一、Dart DateTime类介绍 要获取当前时间,我们需要使用Dart的DateTime类,它表示一个UTC时间,可以用于表示任何时区的时间。DateTime类提供了许多有用的…

    编程 2025-04-22
  • Flutter channel详解

    Flutter是Google开发的UI工具包,可以快速构建高质量、高性能的移动应用、Web应用和桌面应用。在Flutter的开发过程中,一个很重要的概念就是channel,通过ch…

    编程 2025-04-22
  • Flutter是什么语言

    一、Flutter简介 Flutter是一种开源框架,由Google编写,可用于构建高性能、高保真度的移动应用程序,可以同时部署到iOS和Android平台,并且很快将支持Web、…

    编程 2025-04-20
  • Flutter H5: 全平台开发再进化

    一、简介 Flutter是由Google开发的跨平台移动应用开发框架,出现于2017年。它的独特之处在于使用Dart语言开发,通过自带渲染引擎来绘制UI,省去了原生移动应用开发中常…

    编程 2025-04-13
  • Flutter TextButton组件详解

    Flutter是近年来备受关注的移动应用开发框架,它以其高效的渲染能力和跨平台的特性成为越来越多人选择的首选框架。在Flutter中,TextButton是一个常用的基础组件,本文…

    编程 2025-04-12
  • Flutter 底部导航栏的完整详解

    Flutter 底部导航栏是一种常见的用户界面设计形式,它可以帮助用户快速地切换不同的功能模块。在这篇文章中,我们将从多个方面详细阐述 Flutter 底部导航栏的设计和使用方法。…

    编程 2025-04-12

发表回复

登录后才能评论