精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

揭秘!如何用Flutter設計一個100%準確的埋點框架?

開發 架構
用戶行為埋點是用來記錄用戶在操作時的一系列行為,也是業務做判斷的核心數據依據,如果缺失或者不準確將會給業務帶來不可恢復的損失。

[[273407]]

用戶行為埋點是用來記錄用戶在操作時的一系列行為,也是業務做判斷的核心數據依據,如果缺失或者不準確將會給業務帶來不可恢復的損失。閑魚將業務代碼從Native遷移到Flutter上過程中,發現原先Native體系上的埋點方案無法應用在Flutter體系之上。而如果只把業務功能遷移過來就上線,是極其不負責任的。因此,經過不斷探索,閑魚技術團隊沉淀了一套Flutter上的高準確率的用戶行為埋點方案,今天由工程師蘭昊來和大家分享一下。

用戶行為埋點定位

先來講講在我們這里是如何定義用戶行為埋點的。在如下用戶時間軸上,用戶進入A頁面后,看到了按鈕X,然后點擊了這個按鈕,隨即打開了新的頁面B。

這個時間軸上有如下5個埋點事件發生:

  • 進入A頁面。A頁面首幀渲染完畢,并獲得了焦點。
  • 曝光坑位X。按鈕X處于手機屏幕內,且停留一段時間,讓用戶可見可觸摸。
  • 點擊坑位X。用戶對按鈕X的內容很感興趣,于是點擊了它。按鈕X響應點擊,然后需要打開一個新頁面。
  • 離開A頁面。A頁面失去焦點。
  • 進入B頁面。B頁面首幀渲染完畢,并獲得焦點。

在這里,打埋點最重要的是時機,即在什么時機下的事件中觸發什么埋點,下面來看看閑魚在Flutter上的實現方案。

實現方案

進入/離開頁面

在Native原生開發中,Android端是監聽Activity的onResume和onPause事件來做為頁面的進入和離開事件,同理iOS端是監聽UIViewController的viewWillAppear和viewDidDisappear事件來做為頁面的進入和離開事件。同時整個頁面棧是由Android和iOS操作系統來維護。

在Flutter中,Android和iOS端分別是用FlutterActivity和FlutterViewController來做為容器承載Flutter的頁面,通過這個容器可以在一個Native的頁面內來進行Flutter頁面的切換,即Flutter自己維護了一個Flutter頁面的頁面棧。這樣,原來我們最熟悉的那套在Native原生上的方案在Flutter上無法直接運作起來。

針對這個問題,可能很多人會想到去注冊監聽Flutter的NavigatorObserver,這樣就知道Flutter頁面的進棧(push)和出棧(pop)事件。但是這會有兩個問題:

  • 假設A、B兩個頁面先后進棧(A enter -> A leave -> B enter)。然后B頁面返回退出(B leave),此時A頁面重新可見,但是此時是收不到A頁面push(A enter)的事件。
  • 假設在A頁面彈出一個Dialog或者BottomSheet,而這兩類也會走push操作,但實際上A頁面并未離開。

好在Flutter的頁面棧不像Android Native的頁面棧那么復雜,所以針對第一個問題,我們可以維護一個和頁面棧匹配的索引列表。當收到A頁面的push事件時,往隊列里塞入A的索引。當收到B頁面的push事件時,檢測列表內是否有頁面,如有,則對列表最后一個頁面執行離開頁面事件,再對B頁面執行進入頁面事件,接著往隊列里塞B的索引。當收到B頁面的pop事件時,先對B頁面執行離開頁面事件記錄,再對隊列里存在的最后一個索引對應的頁面(假設為A)進行判斷是否在棧頂(ModalRoute.of(context).isCurrent),如果是,則對A頁面執行進入頁面事件。

針對第二個問題,Route類內有個成員變量overlayEntries,可以獲取當前Route對應的所有圖層OverlayEntry,在OverlayEntry對象中有個成員變量opaque可以判斷當前這個圖層是否全屏覆蓋,從而可以排除Dialog和BottomSheet這種類型。再結合問題1,還需要在上述方案中加上對push進來的新頁面來做判斷是否為一個有效頁面。如果是有效頁面,才對索引列表中前一個頁面做離開頁面事件,且將有效頁面加到索引列表中。如果不是有效頁面,則不操作索引列表。

以上并不是閑魚的方案,只是筆者給出的一個建議。因為閑魚APP在一開始落地Flutter框架時,就沒有使用Flutter原生的頁面棧管理方案,而是采用了Native+Flutter混合開發的方案,因此接下來也是基于此來闡述閑魚的方案。

閑魚的方案如下(以Android為例,iOS同理):

注:首次打開指的是基于混合棧新打開一個頁面,非首次打開指的是通過回退頁面的方式,在后臺的頁面再次到前臺可見。

看到這個方案可能會有人問,為什么這么繞,為什么不全部交給Native側去直接管理呢?交給Native側去直接管理這樣做針對非首次打開這個場景是合適的,但是對首次打開這個場景卻是不合適的。但是在首次打開這個場景下,onResume時Flutter頁面尚未初始化,此時還不知道頁面信息,因此也就不知道進入了什么頁面,所以需要在Flutter頁面初始化(init)時再回過來調Native側的進入頁面埋點接口。而為了避免開發人員去關注是否為首次打開Flutter頁面,因此我們統一在Flutter側來直接觸發進入/離開頁面事件。

曝光坑位

先講下曝光坑位在我們這里的定義,我們認為圖片和文本是有曝光意義的,其他用戶看不見的是沒有曝光意義的,在此之上,當一個坑位同時滿足以下兩點時才會被認為是一次有效曝光:

  • 坑位在屏幕可見區域中的面積大于等于坑位整體面積的一半。
  • 坑位在屏幕可見區域中停留超過500ms。

基于此定義,我們可以很快得出如下圖所示的場景,在一個可以滾動的頁面上有A、B、C、D共4個坑位。其中:

  • 坑位A已經滑出了屏幕可見區域,即invisible;
  • 坑位B即將向上從屏幕中可見區域滑出,即visible->invisible;
  • 坑位C還在屏幕中央可視區域內,即visible;
  • 坑位D即將滑入屏幕中可見區域,invisible->visible;

那么我們的問題就是如何算出坑位在屏幕內曝光面積的比例。要算出這個值,需要知道以下幾個數值:

  • 容器相對屏幕的偏移量
  • 坑位相對容器的偏移量
  • 坑位的位置和寬高
  • 容器的位置和寬高

其中坑位和容器的寬和高很容易獲取和計算,這里就不再累述。

獲得容器相對屏幕的偏移量

  1. //監聽容器滾動,得到容器的偏移量 
  2. double 
  3.  _scrollContainerOffset = scrollNotification.metrics.pixels; 

獲得坑位相對屏幕的偏移量

  1. //曝光坑位Widget的context 
  2. final 
  3.   
  4. RenderObject 
  5.  childRenderObject = context.findRenderObject(); 
  6. final 
  7.   
  8. RenderAbstractViewport 
  9.  viewport =  
  10. RenderAbstractViewport 
  11. .of(childRenderObject); 
  12. if 
  13.  (viewport ==  
  14. null 
  15. ) { 
  16.    
  17. return 
  18. if 
  19.  (!childRenderObject.attached) { 
  20.    
  21. return 
  22. //曝光坑位在容器內的偏移量 
  23. final 
  24.   
  25. RevealedOffset 
  26.  offsetToRevealTop = viewport.getOffsetToReveal(childRenderObject,  
  27. 0.0 

邏輯判斷

  1. if 
  2.  (當前坑位是invisible && 曝光比例 >= { 0.5) 
  3.  
  4. 記錄當前坑位是visible狀態 
  5.  
  6. 記錄出現時間 
  7.  
  8. }  else if (當前坑位是visible && 曝光比例 <  0.5 ) { 
  9.  
  10. 記錄當前坑位是invisible狀態 
  11.  
  12. if (當前時間-出現時間 >  { 500ms )
  13.  
  14.  
  15. 調用曝光埋點接口 
  16.  
  17.  

點擊坑位

點擊坑位埋點沒什么難點,很容易就可以想到下面的方案:

效果

經過多輪迭代和優化,目前線上Flutter頁面的埋點準確率已經達到100%,有力地支持了業務的分析和判斷。同時這套方案讓業務同學在做開發時,對于頁面進入/離開、曝光坑位可以做到無感知,即不用關心何時去觸發,做到了簡單易用和無侵入性。

未來

此外,針對頁面進入/離開這個場景,由于閑魚是基于Flutter Boost混合棧的方案,因此我們的解決方案還不夠通用。不過未來隨著閑魚上的Flutter頁面越來越多,我們后續也會去實現基于Flutter原生的方案。

責任編輯:武曉燕 來源: 阿里技術
相關推薦

2024-09-14 14:14:26

Dubbo框架微服務

2023-12-13 18:46:50

FlutterAOP業務層

2015-10-12 16:45:26

NodeWeb應用框架

2016-12-12 13:42:54

數據分析大數據埋點

2025-04-30 08:56:34

2023-03-06 08:14:48

MySQLRedis場景

2023-02-26 01:37:57

goORM代碼

2021-06-24 10:27:48

分布式架構系統

2021-06-25 10:45:43

Netty 分布式框架 IO 框架

2022-04-12 19:41:42

SDK監控react

2018-03-23 10:00:34

PythonTensorFlow神經網絡

2016-09-06 19:45:18

javascriptVue前端

2013-07-01 11:01:22

API設計API

2009-10-01 09:19:45

PHP框架ZendFramewoCake

2017-03-20 17:59:19

JavaScript模板引擎

2020-03-26 09:36:06

AB Test平臺的流量

2018-09-18 09:38:11

RPC遠程調用網絡通信

2017-03-15 08:43:29

JavaScript模板引擎

2020-11-02 08:19:18

RPC框架Java

2025-07-16 07:10:07

點贊
收藏

51CTO技術棧公眾號

黄色片一级视频| 久久综合五月婷婷| 亚洲人xxxx| 国产精品手机在线| 一级片在线观看免费| 精品福利久久久| 91精品国产综合久久久久久久| 91免费版看片| 免费人成黄页在线观看忧物| 老司机午夜精品| 久久久久久久91| 在线国产视频一区| 久久三级中文| 日本精品视频一区二区三区| 影音先锋成人资源网站| 日漫免费在线观看网站| 国产综合一区二区| 欧美亚洲另类在线| 日本中文在线视频| 亚洲精品一级二级三级| 日韩欧美二区三区| 欧美午夜性生活| 91福利在线免费| 亚洲色欲色欲www在线观看| 久久av一区二区| 99热这里只有精品在线| 青草av.久久免费一区| 97精品视频在线播放| 五月综合色婷婷| 欧美精品尤物在线观看| 日韩精品在线观看视频| 无码人妻一区二区三区免费n鬼沢| 一区二区视频免费完整版观看| 亚洲香蕉伊在人在线观| 99热这里只有精品7| 成人精品一区二区三区校园激情| 91在线云播放| 成人综合色站| www.av导航| 精品一区二区三区在线播放视频| 欧美中文在线免费| 日韩精品一区二区三| 中国成人一区| 美女精品久久久| 久久av红桃一区二区禁漫| 国产乱码精品一区二区亚洲| 日韩av综合网| 视频免费在线观看| 99re91这里只有精品| 欧美一级理论性理论a| 色乱码一区二区三区在线| 亚洲va中文在线播放免费| 欧美日韩国产影院| 久久亚洲中文字幕无码| 精品精品导航| 亚洲福利视频三区| 亚洲理论电影在线观看| 牛牛精品在线视频| 亚洲sss视频在线视频| 真人抽搐一进一出视频| 草草在线视频| 偷拍与自拍一区| 欧美亚洲国产成人| 超碰aⅴ人人做人人爽欧美| 欧美日韩亚洲高清| 国产日韩一区二区在线观看| 日韩成人动漫| 欧美日韩一区二区欧美激情| 亚洲天堂2018av| avtt久久| 精品久久国产老人久久综合| 国产女人18毛片水真多18| 久久久免费毛片| 精品亚洲aⅴ在线观看| 最近中文字幕免费视频| 成人影院天天5g天天爽无毒影院| 中文字幕精品久久| 国产麻豆视频在线观看| 欧美私人啪啪vps| 午夜剧场成人观在线视频免费观看| 日韩欧美一区二区一幕| 另类亚洲自拍| 国产日韩在线精品av| 国产亲伦免费视频播放| 国产成人鲁色资源国产91色综| 国产69精品久久久久9999apgf| 手机在线观看毛片| 日本一区二区在线不卡| 久久国产精品免费观看| 9999精品成人免费毛片在线看 | 欧美精品视频www在线观看| 亚洲制服中文字幕| 成人h动漫精品一区二区器材| 亚洲福利视频二区| 亚洲黄色免费视频| 你懂的国产精品| 26uuu另类亚洲欧美日本老年| 这里只有精品免费视频| 国产成人av福利| 欧美日韩一区二区三区免费| 黄色大片在线播放| 精品福利一区二区| 精品亚洲一区二区三区四区| 亚洲天堂中文字幕在线观看| 亚洲日本中文字幕| 日韩黄色免费观看| 日韩电影在线观看网站| 高清视频在线观看一区| 婷婷在线视频观看| 欧美日韩美女在线观看| 一区二区三区四区毛片| 色综合久久中文| 欧美不卡视频一区发布| 一级做a爰片久久毛片| 久久亚洲一区二区三区四区| 一区二区在线看| 青春草国产视频| 日韩在线观看不卡| 亚洲第五色综合网| 破处女黄色一级片| 日韩和欧美的一区| 九九热久久66| 四季久久免费一区二区三区四区| 色综合久久久久久久久久久| 丰满少妇一区二区三区专区| 成人亚洲一区| 日韩美女视频中文字幕| 亚洲经典一区二区三区| 中文字幕一区二区视频| 女人另类性混交zo| 日韩av不卡一区| 久久久久国产一区二区三区| 国产女人18毛片水18精| 国产精品麻豆欧美日韩ww| 久色视频在线播放| www国产精品| 不卡av在线网站| 国产精品sm调教免费专区| 白白色亚洲国产精品| 国产树林野战在线播放| 日韩福利在线观看| 三级精品视频久久久久| 国产美女www爽爽爽| 26uuu亚洲综合色欧美| 久久国产精品视频在线观看| www.国产精品一区| 欧美激情奇米色| www.97超碰| 一区二区三区四区蜜桃| 黄色aaaaaa| 午夜激情久久| 亚洲在线视频福利| 91精品国产91久久久久久青草| 欧美另类久久久品| 肉色超薄丝袜脚交69xx图片| 蜜臀av一区二区在线观看| 日韩欧美一区二区在线观看| 影视一区二区三区| 在线亚洲欧美视频| 中文字幕日产av| 国产精品色呦呦| 天堂中文av在线| 亚洲精品成人无限看| 91成人免费视频| 污片在线免费观看| 亚洲电影免费观看高清完整版在线| 久久精品免费av| 91在线观看视频| 精品久久久久久无码国产| 欧美精选一区二区三区| 国产精品视频大全| 日本激情在线观看| 日韩视频永久免费| 精品少妇一二三区| 99视频精品全部免费在线| www国产黄色| 第一会所亚洲原创| 亚洲一区二区三区久久| 超碰97国产精品人人cao| 日韩av综合中文字幕| 嫩草影院一区二区三区| 亚洲丝袜另类动漫二区| 风韵丰满熟妇啪啪区老熟熟女| 亚洲国产美女| 视频一区二区在线观看| 国产一区 二区| 97超碰色婷婷| 777电影在线观看| 欧美成人精品1314www| 国产九色在线播放九色| 亚洲欧美一区二区在线观看| 亚洲av熟女高潮一区二区| 久久久久久久高潮| 在线观看成人免费| 免费成人高清在线视频theav| 国产玖玖精品视频| 成人av影院在线观看| 中文在线不卡视频| 欧美 日韩 国产 成人 在线| 欧美日韩中文国产| 日韩免费视频网站| 国产精品成人免费| 风间由美一二三区av片| 看国产成人h片视频| 欧美 日韩 亚洲 一区| 欧美电影免费播放| 久久99国产精品| 日本成人精品| 国产精品999| 丁香影院在线| 久久精品视频亚洲| 国产一二在线观看| 亚洲国产精品成人av| 91禁在线观看| 色婷婷综合久色| 国产无套在线观看| 亚洲乱码国产乱码精品精98午夜| 久久久视频6r| 成人精品免费看| 免费不卡av网站| 日本欧美加勒比视频| 一女被多男玩喷潮视频| 欧美理论在线| 在线精品日韩| 欧美理论在线播放| 久热这里只精品99re8久 | 精品日韩在线| 精品一区日韩成人| 999久久久精品一区二区| 成人在线国产精品| 91成人在线| 国产精品7m视频| 日韩免费福利视频| 欧美最猛黑人xxxx黑人猛叫黄| 变态调教一区二区三区| 久久综合伊人77777| 天天在线视频色| 一本色道久久综合狠狠躁篇怎么玩| 无套内谢的新婚少妇国语播放| 欧美成人性福生活免费看| 国产手机精品视频| 91精品国产综合久久久久久久 | 久久国产精品高清| jizz性欧美23| 国产一区二区免费在线观看| 伊人精品综合| av资源站久久亚洲| 中文字幕视频精品一区二区三区| 91在线观看欧美日韩| 伊人久久大香| 51国产成人精品午夜福中文下载 | 欧美日韩午夜影院| 五月婷婷丁香在线| 欧美日韩五月天| 国产精品日韩无码| 欧美一区二区视频在线观看 | 天天综合中文字幕| 国产精品久久观看| 伊人久久av导航| 中文视频一区| av片在线免费| 日韩一级在线| 妞干网在线免费视频| 丝袜脚交一区二区| 欧美成人黄色网址| 国产真实乱子伦精品视频| 中文字幕无码毛片免费看| 国产成人精品影院| 成人手机在线免费视频| 国产欧美视频一区二区| 国产小视频你懂的| 亚洲蜜桃精久久久久久久| 国产精品第一页在线观看| 午夜不卡av免费| 91丨九色丨海角社区| 这里只有精品电影| 蜜臀av在线观看| 亚洲免费一在线| 日本三级在线播放完整版| 久久国产加勒比精品无码| av有码在线观看| 国产精品电影网站| 国产高清亚洲| 精品一区二区不卡| 色小子综合网| 免费一级特黄毛片| 日本91福利区| 日本人dh亚洲人ⅹxx| 久久嫩草精品久久久精品一| 中文字幕91视频| 亚洲一二三四区| 中文字幕av在线免费观看| 91精品国产91热久久久做人人| 天天操天天舔天天干| 日韩中文在线视频| av男人的天堂在线观看| 国产精品爽爽爽爽爽爽在线观看| 一本一道久久a久久| 色一情一乱一伦一区二区三区丨| 女人香蕉久久**毛片精品| 国产亚洲精品网站| 国产精品18久久久久久vr| 日本一级免费视频| 亚洲一区二三区| 在线观看中文字幕av| 亚洲黄在线观看| 黄色免费网站在线观看| 国产suv精品一区二区三区88区| 亚洲精品69| 欧美一区二区三区电影在线观看 | 久久中文字幕视频| 成人福利视频| 国产欧美日韩伦理| 99久久精品费精品国产风间由美| 欧美日韩黄色一级片| 国产一区二区在线免费观看| 日本xxxxxxxxx18| 亚洲电影中文字幕在线观看| 国产精品伦理一区| 国产亚洲美女久久| 极品视频在线| 99在线视频播放| 国产精品久久久久久麻豆一区软件 | 国产精选久久久久久| 免费av一区| 欧美日韩亚洲一| 丁香五精品蜜臀久久久久99网站 | 天堂在线中文资源| 欧美日韩高清在线观看| 色综合久久久| 亚洲人一区二区| 丝袜亚洲另类欧美综合| 国产黄色三级网站| 亚洲一区二区视频| 亚洲精品国产精品国| 久久影院资源网| **欧美日韩在线| 一区二区三区国| 蜜桃精品视频在线观看| 人与嘼交av免费| 91久久人澡人人添人人爽欧美| 欧美新色视频| 欧美一区三区三区高中清蜜桃| 老汉色老汉首页av亚洲| 日韩 欧美 视频| 99久久久国产精品| 亚洲精品77777| 日韩久久免费视频| 在线日韩影院| 欧美日韩国产不卡在线看| 亚洲欧美日韩视频二区| 中文字幕免费看| 在线观看欧美黄色| 波多野结衣在线网站| 国产精品久久一区主播| 日韩一区二区在线免费| 午夜免费一级片| 夜夜嗨av一区二区三区网页| 亚洲h视频在线观看| 国内免费久久久久久久久久久| 国产精品极品在线观看| 国产黄视频在线| 国产日产精品1区| 曰批又黄又爽免费视频| 久久久精品视频在线观看| 亚洲3区在线| 黄色一级视频片| 国产欧美精品一区| 亚洲一区二区激情| 免费97视频在线精品国自产拍| 国产成人精品福利| 日本在线观看a| 亚洲色图视频网站| 懂色av一区二区三区四区| 97国产成人精品视频| 国产a久久精品一区二区三区 | 国产aⅴ精品一区二区三区色成熟| 久久丫精品久久丫| 亚洲精品自拍视频| 成人免费av电影| 熟妇熟女乱妇乱女网站| 亚洲精品乱码| 人人人妻人人澡人人爽欧美一区| 欧美三电影在线| 欧美色图天堂| 欧美日产一区二区三区在线观看| 六月丁香综合在线视频| 久久久久久久久97| 亚洲欧美日韩精品久久亚洲区 | 国产精品入口尤物| 一个色综合网| 搡老熟女老女人一区二区| 欧美久久久久免费| 国产高清中文字幕在线| 亚洲欧洲久久| aa级大片欧美| 国产精品污视频| 日韩av第一页| 黄页网站一区| 免费黄色国产视频|