深入浅出:移动端(Android 和 iOS)数据采集埋点 SDK
隨著大數(shù)據(jù)時(shí)代的到來(lái),越來(lái)越多公司注意到數(shù)據(jù)帶來(lái)的價(jià)值,開(kāi)始自建或購(gòu)買(mǎi)一些第三方的數(shù)據(jù)平臺(tái)。從數(shù)據(jù)流的角度看,平臺(tái)對(duì)于數(shù)據(jù)的處理,一般有以下幾個(gè)步驟:
其中,數(shù)據(jù)采集工作是后面幾個(gè)步驟的基礎(chǔ),數(shù)據(jù)采集的豐富性、準(zhǔn)確性和及時(shí)性,都直接影響整個(gè)數(shù)據(jù)平臺(tái)的應(yīng)用效果。神策數(shù)據(jù)在大數(shù)據(jù)行為分析和數(shù)據(jù)采集行業(yè)積累了豐富的實(shí)戰(zhàn)經(jīng)驗(yàn),神策數(shù)據(jù)推出的移動(dòng)端(Android 和 iOS) 數(shù)據(jù)采集埋點(diǎn) SDK?具有安全、透明和穩(wěn)定等特點(diǎn):
安全:神策分析 SDK 支持 HTTPS 數(shù)據(jù)傳輸以及對(duì)采集的數(shù)據(jù)進(jìn)行加密,保障客戶的數(shù)據(jù)隱私安全;
透明:神策分析 SDK 所有源碼都是開(kāi)源的,SDK 代碼托管在 GitHub ?上,開(kāi)源是對(duì)客戶的一種保障;
穩(wěn)定:超過(guò) 2000+ 家的付費(fèi)客戶使用我們的 SDK,其中包括中國(guó)銀聯(lián)、翼支付、中國(guó)移動(dòng)等客戶。
在功能上覆蓋了代碼埋點(diǎn)、全埋點(diǎn)、點(diǎn)擊圖和可視化全埋點(diǎn)等,接下來(lái)我們將對(duì)這些功能逐一進(jìn)行介紹。
一、功能介紹
(一)代碼埋點(diǎn)
1.?功能介紹
代碼埋點(diǎn)出現(xiàn)的時(shí)間很早了,在 Google Analytics 年代,就已經(jīng)出現(xiàn)了類(lèi)似的方案了。目前,國(guó)內(nèi)的主要第三方數(shù)據(jù)分析服務(wù)商,如百度統(tǒng)計(jì)、友盟等都提供了這一方案。是一種最原始的埋點(diǎn)方式,同時(shí)也是 “最萬(wàn)能” 的埋點(diǎn)方式。其實(shí)現(xiàn)原理是:在 SDK 初始化之后,對(duì)于每一個(gè)關(guān)注的事件,調(diào)用 SDK 中的? track ?等相關(guān)接口,將需要采集的事件名、屬性字段等先保存到本地,然后按照一定的發(fā)送策略將數(shù)據(jù)發(fā)送到數(shù)據(jù)服務(wù)器。
2.?使用場(chǎng)景
代碼埋點(diǎn)有很多優(yōu)點(diǎn):
當(dāng)然,代碼埋點(diǎn)也有相應(yīng)的缺點(diǎn):
因此,代碼埋點(diǎn)適用于需要精準(zhǔn)控制埋點(diǎn)位置、靈活的自定義事件和屬性等精細(xì)化需求的場(chǎng)景。
(二)全埋點(diǎn)
1.?功能介紹
全埋點(diǎn),也叫無(wú)埋點(diǎn)、無(wú)碼埋點(diǎn)、無(wú)痕埋點(diǎn)、自動(dòng)埋點(diǎn)。全埋點(diǎn)是指無(wú)需應(yīng)用程序開(kāi)發(fā)工程師寫(xiě)代碼或者只寫(xiě)少量的代碼,就能預(yù)先自動(dòng)收集用戶的所有或者絕大部分的行為數(shù)據(jù),然后就可以根據(jù)實(shí)際的業(yè)務(wù)分析需求從中篩選出所需行為數(shù)據(jù)并進(jìn)行分析。?
全埋點(diǎn)目前可以采集的事件有:
(1)App 啟動(dòng)事件
是指應(yīng)用程序啟動(dòng),同時(shí)包括冷啟動(dòng)和熱啟動(dòng)場(chǎng)景。熱啟動(dòng)也就是指應(yīng)用程序從后臺(tái)恢復(fù)的情況。
這里需要注意的是,在 iOS 中有一種特殊的啟動(dòng)事件叫?App 被動(dòng)啟動(dòng)事件。這是一種通過(guò)系統(tǒng)后臺(tái)喚醒的啟動(dòng)事件,事件屬性和 App 啟動(dòng)事件相同。對(duì)于 iOS 設(shè)備,除了用戶主動(dòng)啟動(dòng) App,設(shè)備中某些條件觸發(fā)時(shí)(例如收到通知、用戶位置信息變化等),系統(tǒng)可能會(huì)喚醒 App,使程序在后臺(tái)運(yùn)行。當(dāng)程序在后臺(tái)啟動(dòng)并運(yùn)行時(shí),SDK 觸發(fā) App 被動(dòng)啟動(dòng)事件。
關(guān)于 iOS 設(shè)備后臺(tái)啟動(dòng)和運(yùn)行的更多信息,可參考 Apple 文檔 About the Background Execution Sequence。
(2)App 退出事件
是指應(yīng)用程序退出,包括應(yīng)用程序的正常退出、進(jìn)入后臺(tái)、應(yīng)用程序被強(qiáng)殺、應(yīng)用程序奔潰等場(chǎng)景觸發(fā)的事件。這里需要注意在 Android SDK 中有一個(gè) Session 的時(shí)間概念,例如應(yīng)用程序進(jìn)入后臺(tái),并不會(huì)馬上觸發(fā)退出事件,需要等待超過(guò)一個(gè) Session 時(shí)長(zhǎng)后才算觸發(fā)退出事件。
(3)App 瀏覽頁(yè)面事件
是指應(yīng)用程序頁(yè)面瀏覽,對(duì) Android 應(yīng)用來(lái)說(shuō)是指切換 Activity 或 Fragment。而對(duì) iOS 應(yīng)用來(lái)說(shuō)是指 ViewController 的?- viewDidAppear:?被調(diào)用。
(4)App 元素點(diǎn)擊事件
控件被點(diǎn)擊時(shí),觸發(fā) App 元素點(diǎn)擊事件,例如點(diǎn)擊一個(gè) Button。
2.使用場(chǎng)景
全埋點(diǎn)有如下優(yōu)點(diǎn):
前期埋點(diǎn)代價(jià)相對(duì)比較小;
分析需求或事件設(shè)計(jì)若發(fā)生變更,無(wú)需應(yīng)用程序更改埋點(diǎn)和發(fā)版;
可以有效的解決 “歷史數(shù)據(jù)回溯” 問(wèn)題。
同時(shí),全埋點(diǎn)也有一些缺點(diǎn):
由于技術(shù)方面的原因,對(duì)于一些復(fù)雜的操作,可以覆蓋的功能有限,比如縮放、滾動(dòng)等;
無(wú)法自動(dòng)采集業(yè)務(wù)相關(guān)的數(shù)據(jù);
無(wú)法滿足更精細(xì)化的分析需求;
各種兼容性方面的問(wèn)題(比如不同系統(tǒng)版本之前的兼容性)。
因此,可以知道全埋點(diǎn)適用于以較小的埋點(diǎn)代價(jià)收集盡可能多的用戶行為數(shù)據(jù)的場(chǎng)景。
(三)點(diǎn)擊圖
1.功能介紹
點(diǎn)擊圖,即應(yīng)用一種特殊高亮的顏色形式,顯示頁(yè)面或頁(yè)面組區(qū)域中不同元素點(diǎn)擊密度的圖示。在上圖中,清晰展示某個(gè)(些)元素被點(diǎn)擊的次數(shù)和占比,從而幫助使用者直觀的判斷用戶熱衷的區(qū)域,評(píng)估頁(yè)面設(shè)計(jì)的科學(xué)性。點(diǎn)擊圖功能依賴于全埋點(diǎn)中的點(diǎn)擊事件,因此需要先開(kāi)啟全埋點(diǎn)點(diǎn)擊事件的采集。開(kāi)啟點(diǎn)擊圖后,點(diǎn)擊事件會(huì)采集控件路徑信息屬性。
2.?使用場(chǎng)景
一般而言,大多數(shù)用戶行為分析產(chǎn)品的功能,是將發(fā)生在多頁(yè)面的用戶行為采集并進(jìn)行分析。但運(yùn)營(yíng)人員難于知道:特定某頁(yè)面上用戶都進(jìn)行了哪些具體操作?這些操作都發(fā)生在什么位置?點(diǎn)擊圖能夠幫助運(yùn)營(yíng)人員了解用戶和頁(yè)面上各元素的交互情況,判斷哪些元素對(duì)用戶最有吸引力,為優(yōu)化和調(diào)整頁(yè)面設(shè)計(jì)提供了科學(xué)依據(jù)。然而,在使用 “點(diǎn)擊圖” 功能時(shí),以下兩個(gè)問(wèn)題值得注意:
(1)不要忽視位置等因素對(duì)點(diǎn)擊率的影響,以及元素之間的交叉影響。點(diǎn)擊分析的目的和頁(yè)面上某個(gè)元素所處的位置密切相關(guān),但我們?cè)诜治鰰r(shí)常常忽視位置對(duì)點(diǎn)擊次數(shù)和占比的影響,也不會(huì)在意頁(yè)面上其他元素受到的交叉影響。
(2)僅通過(guò)頁(yè)面的整體表現(xiàn),是無(wú)法實(shí)現(xiàn)精細(xì)化運(yùn)營(yíng)的。基礎(chǔ)的點(diǎn)擊分析功能是對(duì)頁(yè)面宏觀層面的了解,僅能從中知道頁(yè)面上各元素的整體表現(xiàn),功能相對(duì)基礎(chǔ),無(wú)法滿足精細(xì)化運(yùn)營(yíng)需求。
(四)可視化全埋點(diǎn)
1.?功能介紹
可視化全埋點(diǎn),是指通過(guò)可視化的方式進(jìn)行埋點(diǎn)。它的前提是要開(kāi)啟全埋點(diǎn),然后通過(guò)設(shè)備連接神策分析的可視化全埋點(diǎn)界面,該界面上標(biāo)識(shí)了已埋點(diǎn)元素和可埋點(diǎn)元素,對(duì)于可埋點(diǎn)元素可以創(chuàng)建新的埋點(diǎn),并標(biāo)識(shí)顯示名和事件名;對(duì)于已埋點(diǎn)元素只能修改顯示名。可視化全埋點(diǎn)的實(shí)現(xiàn)原理與創(chuàng)建?虛擬事件?基本類(lèi)似,是基于全埋點(diǎn)的 App 元素點(diǎn)擊事件創(chuàng)建虛擬事件;若該事件刪除后再次被添加,則歷史數(shù)據(jù)也會(huì)生效。
2. 使用場(chǎng)景
可視化全埋點(diǎn)對(duì)非技術(shù)人員是很友好的一個(gè)功能,它在全埋點(diǎn)基礎(chǔ)上提供了自定義配置的功能,同時(shí)避免了代碼埋點(diǎn)的繁瑣,降低研發(fā)成本的同時(shí)也提高了分析的效率。
二、數(shù)據(jù)采集和發(fā)送
一般來(lái)說(shuō),數(shù)據(jù)采集分為三種方式:客戶端埋點(diǎn)、服務(wù)端埋點(diǎn)和工具導(dǎo)入(歷史數(shù)據(jù)導(dǎo)入)。我們目前討論的是移動(dòng)端,直接使用 SDK 進(jìn)行埋點(diǎn)就可以實(shí)現(xiàn)數(shù)據(jù)采集。采集的數(shù)據(jù)需要同步到服務(wù)端,然后再經(jīng)過(guò)服務(wù)端的存儲(chǔ)、抽取、分析和展現(xiàn),才能充分發(fā)揮數(shù)據(jù)的價(jià)值。因此,下面我們主要介紹如何發(fā)送采集的數(shù)據(jù):
默認(rèn)情況下,為了保證用戶體驗(yàn)、減少性能和電量損耗,SDK 中事件觸發(fā)后不會(huì)立即上報(bào),而是先將事件緩存在本地,然后定時(shí)、批量進(jìn)行上報(bào)。如果預(yù)制的條件不滿足需求,可以在 SDK 初始化后,調(diào)用相關(guān)接口修改發(fā)送條件,如設(shè)定觸發(fā)發(fā)送條目數(shù)、發(fā)送時(shí)間間隔以及是否在 App 進(jìn)入后臺(tái)時(shí)發(fā)送數(shù)據(jù)等,來(lái)定制自己的需求。下面我們來(lái)看下具體的數(shù)據(jù)發(fā)送策略。
(一)普通模式
SDK 每次觸發(fā)事件時(shí)會(huì)檢查如下條件,以判斷是否向服務(wù)器上傳數(shù)據(jù):
當(dāng)前網(wǎng)絡(luò)是否符合「預(yù)設(shè)的允許發(fā)送網(wǎng)絡(luò)策略 flushNetworkPolicy」?(2G、3G、4G、5G、WiFi);
與上次發(fā)送的時(shí)間間隔是否大于「預(yù)設(shè)的發(fā)送時(shí)間間隔 flushInterval」 (默認(rèn) 15 秒);
本地緩存的事件條目數(shù)是否大于「預(yù)設(shè)的觸發(fā)發(fā)送條目數(shù) flushBulkSize」?(默認(rèn) 100 條);
當(dāng) App 進(jìn)入后臺(tái)時(shí)是否立即嘗試發(fā)送數(shù)據(jù)(默認(rèn) YES)。
只有?a、b?或?a、c?或?a、d?滿足時(shí),SDK 才會(huì)進(jìn)行發(fā)送數(shù)據(jù)。以上參數(shù)支持自定義,可以通過(guò)修改相應(yīng)參數(shù)值來(lái)達(dá)到控制事件上報(bào)的頻率。
(二)Debug 模式
在 Debug 模式下,對(duì)于任何操作,無(wú)論什么網(wǎng)絡(luò)條件,都會(huì)立即發(fā)送數(shù)據(jù),并校驗(yàn)返回的結(jié)果。
注意:Debug 模式是為方便開(kāi)發(fā)者調(diào)試而設(shè)置的模式,該模式會(huì)逐條校驗(yàn)數(shù)據(jù)并在校驗(yàn)失敗時(shí)拋出異常,性能遠(yuǎn)低于正常模式。線上環(huán)境使用 Debug 模式會(huì)嚴(yán)重影響性能并存在崩潰風(fēng)險(xiǎn),產(chǎn)品上線前請(qǐng)務(wù)必替換掉/關(guān)閉 Debug 模式。
(三)手動(dòng)觸發(fā)
用戶可以在任何時(shí)候,調(diào)用 「flush 接口」來(lái)嘗試發(fā)送本地?cái)?shù)據(jù)。當(dāng)數(shù)據(jù)發(fā)送失敗時(shí),會(huì)繼續(xù)緩存在本地;發(fā)送成功后,事件數(shù)據(jù)會(huì)被刪除。當(dāng)緩存數(shù)據(jù)量超過(guò)「最大緩存閾值」時(shí),會(huì)刪除最舊的 100 條數(shù)據(jù),然后再存入新的數(shù)據(jù)。
總結(jié)
本文對(duì)于神策數(shù)據(jù)官方移動(dòng)端 SDK 的功能進(jìn)行了簡(jiǎn)明扼要的介紹,旨在讓大家對(duì)于 SDK 的功能有一個(gè)初步的了解。關(guān)于 SDK 的具體使用和實(shí)現(xiàn)原理等相關(guān)知識(shí),會(huì)在后續(xù)的文章中逐步向大家介紹。
交流合作
本文著作權(quán)歸「神策數(shù)據(jù)開(kāi)源社區(qū)」所有,商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系我們獲得授權(quán);非商業(yè)轉(zhuǎn)載請(qǐng)注明出處,并附上神策數(shù)據(jù)開(kāi)源社區(qū)服務(wù)號(hào)二維碼。
你還可以掃描二維碼,加入社區(qū)交流群,與大家一同討論。也歡迎關(guān)注我們的公眾號(hào),最新內(nèi)容盡在掌握!
?
?
▼▼▼
【更多精彩內(nèi)容】
-
神策分析 Android SDK 之用戶路徑采集
-
深入淺出:移動(dòng)端數(shù)據(jù)采集埋點(diǎn) SDK
-
神策分析 iOS SDK 架構(gòu)解析
-
神策分析 Android SDK 架構(gòu)解析
·END·
神策數(shù)據(jù)開(kāi)源社區(qū)服務(wù)號(hào)
匯聚數(shù)據(jù)采集菁英,推動(dòng)技術(shù)交流與發(fā)展
?
點(diǎn)擊鏈接?神策數(shù)據(jù)開(kāi)源社區(qū),進(jìn)入開(kāi)源社區(qū)官網(wǎng)~
總結(jié)
以上是生活随笔為你收集整理的深入浅出:移动端(Android 和 iOS)数据采集埋点 SDK的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 抢鲜体验:十一大行业 demo 全新上线
- 下一篇: 直播报名 | 教你从 0 到 1 打造数