無痕埋點方案,現有方案調研 | 掘金技術徵文

承香墨影發表於2017-04-25

版權宣告:

本賬號釋出文章均來自公眾號,承香墨影(cxmyDev),版權歸承香墨影所有。

未經允許,不得轉載。

一、前言

對於一個線上的產品,我們會通過一些資料指標來監控我們的產品的情況。而市面上有各種統計平臺,友盟和百度統計,都是比較常用的。我們線上專案現在依然還在使用友盟來做到打點統計。

但是這些統計平臺,有一個缺陷就是需要手動以程式碼的形式預埋點,也就是說在發版之前,就確定要需要的統計點,然後以程式碼的形式,硬編碼到專案對應的位置,在發版之後,才會生效並且上報對應的資料。

這樣就帶來一個很大的問題,如果發版本之前,無法預見我們需要的統計點,或者有遺漏,我們只能通過釋出新版本,或者熱更新的方式來補充這個資料統計點。而這,會導致資料的不準確或者調整起來不夠靈活。

所以,無埋點方案就孕育而生,有沒有辦法做到無埋點就解決資料統計的問題?

二、市面上常見的方案

對於市面上常見的統計方案,美團點評的文章已經幫我們總結的很好了。

為了解決前端埋點的準確性、及時性、開發效率等問題,業內各家公司從不同角度,提出了多種技術方案,這些方案大體上可以歸為三類:

  1. 第一類是程式碼埋點,即在需要埋點的節點呼叫介面直接上傳埋點資料,友盟、百度統計等第三方資料統計服務商大都採用這種方案;
  2. 第二類是視覺化埋點,即通過視覺化工具配置採集節點,在前端自動解析配置並上報埋點資料,從而實現所謂的“無痕埋點”, 代表方案是已經開源的Mixpanel
  3. 第三類是“無埋點”,它並不是真正的不需要埋點,而是前端自動採集全部事件並上報埋點資料,在後端資料計算時過濾出有用資料,代表方案是國內的GrowingIO。

1、程式碼埋點

程式碼埋點的最大缺點就是需要有預見性,需要在釋出版本之前,就判斷出我們需要的資料。這種預見性,只能在流程上人為的把控,有幾點建議可以參考一下:

  1. 產品在出產品文件的時候跟隨一篇對應產品的統計文件,開發按照這個文件嚴格執行,將需要的資料都上報。
  2. 在釋出灰度升級的時候,檢測對應的統計點,是否符合預期。如不符合,及時調整後再發布市場。

但是這樣的方案缺陷也很大,可能會引出其他的問題,例如產品功能的迭代,可能一個地方的修改會影響到其他地方的統計之類,或者有突發情況需要了解一些側面資料。

這就很考驗產品經理出的統計需求文件時候的經驗和預見性,當然開發人員在開發這個功能的時候,也可以提出改進意見,一句話,意識很重要。

2、視覺化埋點

視覺化埋點,看了下這個開源專案,維護的還很勤,但是如果按照這個方案修改的話,對於一個現有專案,改動還是挺大的,沒太深入研究。

有興趣的可以看看介紹視訊,當然,可能需要科學上網的方式觀看:

www.youtube.com/watch?v=Kcp…

3、全量上報,服務解析

第三類這種無埋點的方案,它實際上是採集了所有的事件,並且全部上報,最終在服務端,根據使用者需要的統計點,分析出對應的資料進行展示。

上面推薦的 GrowingIO ,大概瞭解一下,實際上它並不是免費的,接入的時候可以提供一個免費的試用賬戶給開發者,但是如果真實上架的 App ,是需要付費使用的。

但是官網上並沒有報價,可以通過客服諮詢問價,我現在瞭解到的,基礎價格是 6W/年,包含起步的 3W 最高日活,高於 3W 日活後,階梯增長收費,每漲 1W日活,多加 2W 塊。不過據說這個價格可以談,有興趣的可以繼續瞭解一下。

這種收費的服務,一般而言不會是我們的首選。

三、美團的方案

美團點評對客戶端埋點的要求:

  1. 資料的準確性和及時性。
  2. 埋點的效率,要能適應版本迭代做到快速埋點。
  3. 動態部署和修復埋點的能力。

所以他們獨立開發了一套自己的無埋點的方案。會將常用的 UI 控制元件,全部自定義一遍,重寫事件的響應方法,在這些事件的響應內填寫埋點的程式碼,在需要上報的時候,動態上報即可。

這樣實際上,改動只需要通過一個介面下發我們需要的埋點控制元件的 id、以及上報的埋點統計的 Key 即可,當然實現起來會比這個跟複雜一些。

這裡只需要知道美團點評的方案,就是重寫 UI 控制元件,然後攔截其事件,符合要求的,傳送統計資料到統計系統中。

但是這樣的一個方案,雖然可以解決問題,但是又需要面臨另外一個問題,移植的成本非常的高。

所以美團想到的了兩個方案:

  1. 參考 v7 支援庫的思路,通過 AppCompatDelegate 代理自動替換 UI 控制元件。
  2. 編寫一個 Gradle 外掛,在執行的時候,動態修改其控制元件的父類,達到移植的效果。

方案一,的問題在於,只能替換你 App 內直接使用的 UI 控制元件,對於第三方庫中重寫的 UI 控制元件,這樣的方案是不行的,所以才演變出需要方案二。

而方案二實際上是在編譯期間做的改動,所以也不會影響執行效率,只是可能會耽誤一點編譯的時間,這點效率問題,其實我們是可以接受的。

四、總結

今天就先說到這裡,之後會繼續詳細講解以上介紹的兩種方案的技術實現細節,需要關注的點和會遇到的坑。

那麼我們就敬請期待吧!

本文參加掘金技術徵文:juejin.im/post/58d8e9…

無痕埋點方案,現有方案調研 | 掘金技術徵文
公眾號二維碼.jpg

相關文章