App視覺化埋點技術原理大揭秘

2022-03-17 15:03:06 字數 2661 閱讀 4841

一、背景

運營者能夠對使用者行為進行分析的前提,是對大量資料的掌握。在以往,這個資料通常是由開發者在控制項點選、頁面等事件中,一行行地編寫埋點**來完成資料收集的。然而傳統的操作模式每當公升級改版時,開發和測試人員就需要重複不斷對**進行更新,整個流程耗時長,無法滿足業務的需求。

為幫助開發者解決這一痛點,個推應用統計「個數」推出「視覺化埋點」這一技術來更高效地實現這個這一過程。「個數」的視覺化埋點靈活、方便,開發者不需對資料追蹤點新增任何**,只需要連線管理臺並圈選頁面中需要埋點的元素,即可新增隨時生效的介面追蹤點。

本文將結合個數實踐經驗,對視覺化埋點中的兩大關鍵技術點即控制項唯一標識和事件採集進行分析並提供解決方案。

二、視覺化埋點關鍵技術點

視覺化埋點的難點,或者說核心就是如何在開發者不編寫任何**的情況下,sdk 如何確定任意乙個控制項在該應用內的唯一性,以及如何監聽控制項的點選和頁面的切換。

標識為了防止不同頁面中的控制項標識重複出現,控制項的唯一標識一般由頁面標識加上控制項標識生成。

頁面標識生成

**詳見下圖:

獲取方式也是比較多,不過較於 activity 的獲取會相對麻煩一些,因為系統沒有直接提供 api ,因而需要稍微轉個彎:通過 gradle 插樁的方式,獲取 fragment 的生命週期,以及 fragment 例項物件:

如果該應用的頁面存在乙個 activity 中巢狀多個 fragment 的情況,單單乙個 activity name則可能無法精準地定位到某個頁面,因而還需要加上 fragment 的名稱。fragment的獲取可以通過 gradle 插樁法來實現,即根據 fragment 的生命週期來獲取fragment 例項物件。

1.2控制項標識生成

理想的情況下頁面中的每個控制項都有屬於自己的唯一 id,sdk 直接獲取控制項的 id 當做控制項標識即可。但現實情況卻是,乙個頁面中往往存在多個相同 id 的控制項,或者是沒有 id 的控制項,比如 listview 的 item ,開發者不可能給listview的每個item 設定不同的 id。

因此需要轉變一下思路。我們可以從控制項路徑這個除id 外比較獨特的性質著手來生成控制項標識。開發者可以通過給控制項的路徑加上控制項角標的結構方式,生成控制項的唯一標識。下圖是github 上乙個仿 b 站的應用。我們對這個應用進行一下控制項樹分析。首先我們使用 android studio 自帶的 ui automator viewer 工具檢視該頁面的布局結構:

例如圖中的文字控制項是 textview,且無兄弟布局,則可以標記為 textview[0] 。它的父布局是 linearlayout 且排在兄弟布局中的第二位,那麼就可以寫成是 linearlayout[1],然後使用自己定義的符號拼接,像是 linearlayout[1]/textview[0] 。之後以此類推、迴圈遍歷、層層遞進,將所有經過的控制項以及它們的下標都拼接起來,組成控制項在該頁面中的唯一標識。

對於一些可復用的 view ,我們則需要採取一些特殊處理。例如對於 recyclerview、listview、 viewpager 等復用控制項,我們都需要採取不同的處理方式,去獲取當前 view 在該控制項中的具體下標。如果沒有進行特殊處理,則會導致子控制項錯位,資料統計不準確。

採集在以往的處理中,如果需要知道乙個按鈕的點選次數,開發者就要在該控制項的click事件中加入對應的打點**。這種重複勞作,無疑增加了開發者的開發負擔。對此,我們可以採用動態**方式或gradle 插樁方式來改善這個問題。

動態**方式

當對應的控制項被點選時,系統就會自動呼叫設定過**的方法,儲存或者上報對應資料。

gradle 插樁的方式

android gradle 工具在1.5.0 版本後提供了 transfrom api , 該api 允許第三方 plugin 在打包 dex 檔案之前的編譯過程中操作 .class 檔案。在編譯期,開發者可以通過onclick、onitemclick等方法(詳見下圖)進行監聽,這相當於是正則匹配。

當上述監聽的方法被編譯的時候,就可以將埋點的**操作插入這些方法中,實現自動化埋點的流程。網上相關流程也是非常詳細,有興趣的可以自行搜尋學習。

三、結語

目前個推應用統計——個數這個產品只需要一行初始化**就可以自動幫助開發者採集包括頁面統計、事件埋點、新增活躍等多維度資訊。

藉著萬聖節,悄悄跟你說個恐怖的故事:除個推應用統計服務之外,vip訊息推送、使用者畫像,現在申請均可以免費用一年!一鍵認證服務還可以享受充10萬條送5萬條的優惠哦 !點選碼「上申請吧!

行業前沿、面試寶典,更多技術乾貨,盡在個推技術學院。

視覺化程式設計原理

視覺化程式設計原理 物件 安裝的程式 事件 滑鼠雙擊 單擊 右鍵 回車等快捷鍵的觸發 事件 我們對不同的物件實施相同的事件,結果可能不相同。為什麼?右鍵事件觸發的方法 不一樣。視覺化程式設計介面設計 ui 窗體 控制項 窗體是來存放控制項的容器 例子事件 click mouseclick load ...

sqlite 視覺化 千萬級poi點視覺化方案

本文使用 zhihu on vscode 創作並發布 這篇文章主要對前段時間的兩千萬個點資料視覺化展示問題進行乙個總結,經過兩個周左右的努力,在當前階段,採用快取加多執行緒的方式很好的解決了千萬級poi點在單機環境下高效的視覺化的問題。專案的總體要求就是,兩千萬左右的資料量下,不使用集群技術,減少硬...

點雲視覺化方法 PCLVisualizer

3d點雲視覺化可以通過rviz,cloud viewer或者pclvisualizer等方法進行視覺化,這些介紹pclvisualizer的方法。首先是載入點雲並顯示 include include int main int argc,char argv viewer addpointcloud c...