什么是埋點
所謂“埋點”,是數據采集領域(尤其是用戶行為數據采集領域)的術語,指的是針對特定用戶行為或事件進行捕獲、處理和發送的相關技術及其實施過程。
埋點的技術實質,是先監聽軟件應用運行過程中的事件,當需要關注的事件發生時進行判斷和捕獲,然后獲取必要的上下文信息,最后將信息整理后發送至服務器端。所監聽的事件,通常由操作系統、瀏覽器、APP框架等平台提供,也可以在基礎事件之上進行觸發條件的自定義(如點擊某一個特定按鈕)。一般情況下,埋點可以通過監測分析工具提供的SDK來進行編程實現。
(SDK:軟件開發工具包,Software Development Kit)
埋點的目的
在簡書上看到@老虎色 舉的例子:
平時我們支付的時候打開支付寶,打開掃一掃,掃描對方的二維碼,輸入金額(2元,小金額免輸入支付密碼),點擊確認,支付成功。
你為了資金的安全,做了兩個設定。打開支付寶,打開掃一掃,掃描對方的二維碼,彈出提示“您正在付款,請輸入密碼”,然后要你先輸入支付密碼(不能免輸入),然后在輸入金額(2元),點擊確認時,彈出提示“為了保障你的安全,請先進行實名認證”,接着跳轉到認證的頁面。
先不管這兩個設定是否合情合理,你這里就可以以埋點的形式將兩次彈出做行為收集,並對相應的動作進行連串行為分析,並以此為根據形成用戶畫像等最終數據。
幾種埋點方式
手記上的@譙洪敏對幾種埋點做了詳細的總結。
1.手動埋點(代碼埋點)
純手動寫代碼,調用埋點SDK的函數,在需要埋點的業務邏輯功能位置調用接口上報埋點數據。
手動埋點優勢:手動埋點讓使用者可以方便地設置自定義屬性、自定義事件。所以當你需要深入下鑽,並精細化自定義分析時,比較適合使用手動埋點。
手動埋點缺陷:項目工程量大,需要埋點的位置太多,而且需要產品開發運營之間相互反復溝通,容易出現手動差錯,如果錯誤,重新埋點的成本也很高。這會導致整個數據收集周期變的很長,收集成本變的很高,而且效率很低。因為手動埋點需要開發人員完成,所以每次有埋點更新,或者漏埋點,都需要重新走上線發布流程,更新成本也高,對線上系統穩定性也有一定危害。
手動埋點的本質:
從javascript中能輕松獲得以下信息:
域名:document.domainURLdocument.URL
頁面標題:document.title
分辨率:window.screen.height & window.screen.width
顏色深度:window.screen.colorDepth
Referrer:document.referrer
客戶端語言:navigator.language
除了上面的列舉的常規信息以外,還有大量的業務數據,都需要通過手動寫javascript去實現。
手動埋點常用方式:
(1)命令式
$(document).ready(()=>{ // ... 這里是你的業務邏輯代碼 sendData(params); //這里是發送你的埋點數據,params是你封裝的埋點數據 }); // 按鈕點擊時發送埋點請求 $('button').click(()=>{ // ... 業務邏輯 sendData(params); //同上 });
這里的sendData有很多種方式,比如基於ajax發送json數據,或者使用url連接帶上params,或者使用一像素圖片帶上數據,在或者使用head帶上埋點也可以。封裝方式多種多樣。
(2)聲明式
<button data-mydata="{key:'uber_comt_share_ck', act: 'click',msg:{}}">打車</button>
這里聲明了自定義屬性data-mydata,可以在你的SDK中去掃描和識別這些自定義屬性,並解析封裝數據,在SDK中按照自定義規則去綁定事件並發送埋點數據。
(3)前端框架式
如果使用Vue或者React等前端框架,這些框架都有自己的各種生命周期,為了減少重復性的手動埋點次數,可以在各個生命周期位置,根據你的需求封裝你所需的埋點。比如你是SPA單頁應用,你希望在每一個頁面的componentDidMount埋點,並由此確定用戶已經打開了頁面。
(4)css埋點
.link:active::after{ content: url("http://www.example.com?action=yourdata"); } <a class="link">點擊我,會發埋點數據</a>
這里使用了很巧妙的css的某些特征,這些可以觸發發送請求的特征。
以上是比較常見的手動埋點方案,當然還有很多其他方式和有待挖掘的方案。
2.可視化埋點(框架式埋點、無痕埋點)
解決了純手動埋點的開發成本和更新成本,通過可視化工具快速配置采集節點(圈點),在前端自動解析配置,並根據配置上傳埋點數據,比起手動埋點看起來更無痕,這里的配置數據可以設置過濾條件,避免針對所有元素(比如全埋點),可以在調用開啟自動監控API時通過設置一些特征屬性,來過濾不符合條件的元素,實現只針對某些元素進行自動上報數據的需求。
可視化埋點配置化能力相對手動埋點更強,是對手動埋點的補充而不是代替,很多手動埋點點都可以通過好的規划和架構變為可視化埋點。
3.無埋點
無埋點並不是沒有任何埋點,所謂無只是不需要工程師在業務代碼里面插入侵入式的代碼。只需要簡單的加載了一段定義好的SDK代碼,技術門檻更低,使用與部署也簡單,避免了需求變更,埋點錯誤導致的重新埋點。
通過這個SDK代碼,前端會自動全量采集全部事件並上報埋點數據,能夠呈現用戶行為的每一次點擊、每一次跳轉、每一次登錄等全量、實時用戶行為數據,這些數據傳到后端后,可通過用戶分群、漏斗對比等功能,分析不同訪問來源、不同城市、不同廣告來源等多維度的不同轉化細節,細而全。
無埋點的優勢:無埋點相比可視化埋點,在解決數據“回溯”問題上更有優勢,如果你想分析某一天某個控件的點擊情況,如果你沒有針對這個按鈕做可視化埋點,則只能從你針對這個按鈕做可視化配置的這一時刻之后才有埋點數據,而無埋點,則從你部署SDK那一刻就一直有數據在收集;無埋點做熱力圖也更有優勢,無埋點可以告訴使用者這個界面上每個控件分別被點擊的概率是多大,通過熱力圖清晰可見。
無埋點劣勢:自定義屬性不靈活,傳輸時效性差,數據可靠性欠佳,耗費網絡流量,還會增加服務器負載,而且兼容性也不佳。
埋點數據采集能力比較
比如這個頁面,點擊確認按鈕,如果使用無埋點和可視化埋點,在這里可能只能獲取到某時刻某個人點擊了確認,提交了一個訂單,僅此而已。如果你希望拿到里面的首付款,月供,車型車款、用戶詳情等深度業務信息,就只能靠手動埋點獲取。
無埋點和可視化埋點雖然使用和部署都很簡單,但是在數據精確度和詳細程度的獲取能力上代碼埋點更強大。一般來說,我們的產品都是根據業務場景混合使用三種埋點模式來完成我們的數據收集。