金小俊 孫艷霞 趙化 陳勇
摘要:數據支撐業務的發展,驅動決策的落地。建立完整的數據采集、上報和分析平臺非常必要。數據埋點作為一種最常用的用戶行為統計方式,能夠快速、準確地采集用戶使用習慣以及App功能的反饋。埋點的本質為追蹤用戶操作或功能行為的發生,而用戶的操作則會觸發App功能的變化,這些變化最終會體現數據和狀態的變化。由此,該文提出了一種基于數據和狀態的移動應用可視化埋點方法,通過可視化界面設置埋點對應的數據和狀態,繼而在數據和狀態發生變化時記錄相應埋點。結果表明,該文提出的埋點方法靈活高效、可擴展性更強,具有較高實際應用價值。
關鍵詞:數據埋點;數據采集;數據和狀態;移動應用;可視化
中圖分類號:TP311.56? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2022)10-0019-02
在發展日新月異的移動互聯網時代,數據扮演著極其重要的角色。數據支撐業務的發展,驅動決策的落地。建立完整的數據采集、上報和分析平臺非常必要,而其中數據采集的全面,精準和效率尤其重要[1]。埋點作為一種最簡單最直接的用戶行為統計方式,能夠全面精確地采集用戶的使用習慣以及各功能點的迭代反饋等,有了這些數據才能更好地驅動產品的決策設計和新業務場景的規劃[2]。
傳統埋點方式包括代碼埋點、全埋點和可視化埋點。代碼埋點需要在代碼中手動置入相關埋點代碼,缺點為造成埋點邏輯和業務代碼強耦合,且需要發布版本才能使埋點生效[3]。全埋點不區分埋點邏輯,需要后期使用大數據技術在獲取的信息中尋找相應埋點值,查詢成本和維護成本較高。可視化埋點通過可視化界面配置埋點信息,其埋點維護友善,但僅能設置用戶界面相關的埋點[4]。另外,由于iOS和Android系統界面元素不同,需要針對不同應用系統分別進行埋點配置,增加了使用成本[5]。為解決現有埋點技術存在的不足,本文提出了一種基于數據和狀態的可視化埋點方法。
1 數據埋點方案
埋點的本質是追蹤用戶的操作或功能行為的發生。用戶的操作會觸發App功能的變化,這些變化最終會體現在數據和狀態的變化。比如點擊某個按鈕,會導致頁面發生變化,或者觸發某個網絡請求后返回新的數據值。而頁面的變化其實也是數據的變化(導航棧或頁面層級棧的內容發生了變化) 。簡而言之,用戶的所有操作導致App行為的變化都可以用某個值(或者某些值的組合) 的變化來表示,因此埋點操作可以轉換為監控這些數據,當某個(些) 數據值發生變化時記錄相應的埋點。基于數據和狀態的埋點方案總體思想為:
(1) 總能將用戶的操作或功能行為的發生用某個(些) 數據值的變化來表示;
(2) 埋點的發生由數據和狀態的變化來驅動;
(3) 埋點的記錄即是在簡單的指定狀態下數據值的匹配過程。
進一步將數據和狀態與可視化埋點方案結合。一方面,對于埋點只需將數據和狀態進行配置和管理,而無須識別頁面內的各控件,也無須對控件做唯一標識。另一方面,多平臺自然統一(埋點對應的數據名稱是相同的,只是在各平臺代碼中綁定的變量名不同) 。埋點方案流程如圖1所示。
2 數據與狀態
2.1 數據
數據分為數據名稱,數據變量和數據值。數據名稱是指在埋點配置可視化界面中提供的供運營人員配置埋點的數據名,比如訂單狀態。數據變量是指各平臺代碼中對應的變量名,比如iOS中訂單狀態對應的變量名為self.orderType, Android中訂單狀態對應的變量名為this.orderType。數據值指程序實際運行中該變量對應的值,比如訂單狀態為已預訂的時候訂單狀態的數據值為1,訂單狀態為行程中的時候訂單狀態對應的數據值為2。數據名稱、數據變量和數據值在埋點配置界面進行綁定。如此,埋點配置流程即為,選擇訂單狀態,當訂單狀態為已預訂時記錄埋點值order_reserved,當訂單狀態為行程中時記錄埋點值order_ongoing。App端接收到埋點配置表后,對相應的數據變量進行匹配,當變量值為1時記錄埋點值order_reserved,當變量值為2時記錄埋點值order_ongoing。數據綁定和配置如圖2所示。
2.2 狀態
App端在對數據變量值進行匹配時需要一個觸發時機,即什么時候去檢查數據的變量值。傳統的可視化埋點是在用戶點擊了埋點控件后在事件響應方法中記錄埋點值,也就是觸發的時機是控件事件發生時。由此,本文引入狀態的概念,在狀態發生變化的時候檢查數據的變化。狀態包含以下幾類:
(1) 發生用戶操作事件時(hook點擊事件、手勢事件等)
hook各類控件的各類事件響應方法,比如按鈕的點擊事件或者視圖的手勢事件等。這些事件的響應方法被觸發即代表用戶進行了某種類型的操作,當該狀態發生時對變量值進行檢測和埋點處理。
(2) UI發生變化時,比如導航棧中的控制器發生了增減
監控系統導航棧,當導航棧的內容發生變化時,對其內的數據進行匹配檢查。具體示例:假設需要在用戶進入訂單詳情頁時記錄埋點值,則App端在導航棧發生變化及頁面發生跳轉的時候檢測當前頁面是否訂單詳情頁,若是,則記錄埋點值。
(3) 當前頁面或Window上的視圖層發生了變化
監控當前頁面或者Window圖層的變化,比如用戶刪除訂單時會彈出彈窗,讓用戶確認是否刪除,并記錄埋點值user_delete_order,同時需要判斷用戶是個人用戶還是企業用戶。相應埋點配置流程為:在[視圖交互]-[彈窗]狀態時,當[彈框頁面]為[刪除訂單]時,且[用戶類型]為[個人用戶]時,記錄埋點值individual_user_delete_order。
(4) 頁面內指定的某個函數(方法) 執行前或執行后
在此情況下,狀態為某個函數的執行。hook指定函數,當函數執行時即為狀態發生,此時檢查數據的變化進行匹配并記錄埋點。比如,當用戶請求行程預估價格時,記錄埋點值request_estimate_price,請求預估價格失敗時記錄埋點值request_estimate_price_failed。相應埋點配置流程為:在[方法執行]-[請求行程預估價格]-[開始]狀態時,記錄埋點值request_estimate_price,在[方法執行]-[請求行程預估價格]-[結束]狀態時,當[返回值]為[false]時,記錄埋點值request_estimate_price_failed。如此,埋點的配置過程也是一個語義化的描述過程。狀態綁定和配置如圖3所示。
3 埋點實施
埋點實施包含兩部分:埋點配置系統和移動應用埋點SDK(簡稱埋點SDK) 。
3.1 埋點配置系統
以頁面(iOS為UIViewController, Android為Activity) 為單位進行埋點配置,頁面以類名作為唯一標識。若存在該頁面的設計圖,則直接將設計圖導入埋點配置系統,若沒有相應的設計圖,則在App端進行截屏并將該頁面截圖上傳。頁面導入成功后,由開發人員將數據名稱,數據變量和數據值進行綁定。綁定后生成數據列表,供運營人員配置埋點時使用。
狀態配置為指定在何種情況下(觸發條件) 進行埋點值的匹配和記錄。配置系統默認提供3種類型的可選狀態,分別為[控件交互][頁面交互]和[視圖交互]。除此之外,還提供自定義的[方法執行]狀態。[控件交互]包括[點擊事件、長按手勢、拖動手勢、滑動手勢、縮放手勢],表示用戶對App進行交互的狀態。[頁面交互]狀態主要用來記錄PV埋點,包括[頁面進入,頁面退出],在配置系統可直接配置[頁面進入]和[頁面退出]分別對應的埋點值。[視圖交互]狀態包括[普通視圖,彈窗]兩種,[普通視圖]為當前頁面上添加或展現的視圖,[彈窗]則為Window上添加或展現的視圖。在設置視圖交互狀態時還需指定視圖的名稱,視圖的名稱以視圖的類名來標識,如果是非自定義的視圖(比如系統默認彈窗視圖) ,則不同的彈窗其類名是相同的,這種情況下視圖標識符取類名加彈窗上的標題文本(若類名相同標題亦相同則認為是同一個視圖) 。[方法執行]狀態用來表示某種操作的進行,以頁面中的指定方法開始執行和結束執行為依據。其默認提供[開始]和[結束]兩個子狀態,對應到埋點SDK端即hook的時候,在原方法執行前注入埋點代碼和原方法執行后注入埋點代碼。
3.2 埋點SDK
將下發的埋點配置表中的變量在狀態條件滿足時進行匹配(即讀取運行時的數據值和表中的值進行匹配) 。運行時讀取值的方法:iOS端采用KVC的方式,Android采用反射的方式。對于狀態的監控分別為對控件交互狀態、頁面交互狀態、視圖交互狀態、方法執行狀態進行監控。
控件交互狀態通過hook控件的響應事件來進行監控。對于點擊事件,hook系統的點擊事件方法(iOS hook UIControl的sendAction:to:forEvent:方法,Android hook onClick方法) ,當該方法執行時表示點擊事件發生,此時讀取埋點配置表中該狀態下的數據列表,對數據值(或數據值組合) 進行匹配,根據匹配結果記錄埋點值。手勢事件的監控同理。
頁面交互狀態通過對系統的導航棧進行監控,若導航棧內的頁面發生變化,即代表頁面發生了跳轉(頁面交互) ,根據導航棧內頁面是增加還是減少來判斷是頁面進入或是頁面退出。
視圖交互狀態則對當前視圖或Window視圖的所有子視圖列表進行監控,若列表發生增減,即代表視圖發生了變化,根據發生變化的視圖標識符來進行埋點匹配。
方法執行狀態的監控通過讀取系統下發的埋點配置表中指定的狀態方法名對所有指定的方法進行hook操作,hook時根據子狀態是[開始]還是[結束]來判斷hook的操作是在原方法執行前生效還是執行后生效。另外,hook方法時同時獲取方法的入參和出參(返回值) ,供埋點的子狀態下數據匹配時使用。
4 結束語
本研究提出了一種基于數據和狀態的可視化埋點方法。在移動應用中總能將用戶的操作或功能行為的發生用某個(些) 數據值的變化來表示,因而,埋點的發生可由數據和狀態的變化來驅動。基于此思想,埋點的記錄即是簡單的指定狀態下數據值的匹配過程。通過進一步將數據和狀態與可視化埋點方案結合,則對于埋點只需對數據和狀態進行配置和管理,而無須識別頁面內的各控件,也無須對控件做唯一標識。應用表明,本文提出的埋點方法靈活高效、可擴展性更強,具有較高實際價值。
參考文獻:
[1] 趙強,彭瑋.新聞App用戶行為分析的實現[J].中國傳媒科技,2019(3):39-43.
[2] 李旭,翟穎琳.基于數據分析平臺的App交互設計測試評估研究[J].包裝工程,2018,39(2):143-148.
[3] 廖愛紅,羅銘濤.埋點管理系統分析與設計[J].辦公自動化,2020,25(16):33-35.
[4] 蔡榆榕.運用埋點技術實現高校應用服務平臺過程監控[J].中國管理信息化,2021,24(15):187-190.
[5] 吳榮燦,羅嘉龍,鄭伙群,等.基于大數據技術的用戶行為分析平臺的設計與實現[J].電腦知識與技術,2021,17(12):40-42.
【通聯編輯:代影】
收稿日期:2021-09-22
基金項目:國家自然科學基金項目(32072498)
作者簡介:金小俊(1987—),男,工程師,碩士,主要從事軟件工程及人工智能技術研究;孫艷霞(1988—),女,工程師,碩士,主要從事機器人及工程機械研究;趙化(1988—),男,助理工程師,學士,主要從事軟件架構與設計研究;通信作者:陳勇(1965—),男,教授,博士生導師,博士,主要從事機電一體化研究。