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/zh-hant/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

發表回復

登錄後才能評論