移動(dòng)端埋點(diǎn)分析

本篇文章主要介紹Android移動(dòng)端埋點(diǎn)的作用以及埋點(diǎn)發(fā)展铃剔,順帶加一點(diǎn)埋點(diǎn)技術(shù)分析檀葛。

埋點(diǎn)是什么

在應(yīng)用中通過(guò)特定的流程收集一些信息麦备,用來(lái)跟蹤應(yīng)用使用的狀況逃默,并作為優(yōu)化產(chǎn)品或者提供運(yùn)營(yíng)的數(shù)據(jù)支撐。

移動(dòng)端埋點(diǎn)可以收集到的數(shù)據(jù)

  • 手機(jī)基礎(chǔ)數(shù)據(jù)(手機(jī)型號(hào)搓彻、版本如绸、網(wǎng)絡(luò)、瀏覽器版本等)
  • 用戶(hù)相關(guān)數(shù)據(jù)(年齡旭贬、性別怔接、職業(yè)、行業(yè)稀轨、喜好等)
  • 渠道相關(guān)數(shù)據(jù)
  • App質(zhì)量和性能相關(guān)數(shù)據(jù)

埋點(diǎn)是用來(lái)做什么的

  • 檢測(cè)運(yùn)營(yíng)狀況
  • 市場(chǎng)趨勢(shì)反映
  • App錯(cuò)誤和缺陷的及時(shí)發(fā)現(xiàn)
  • 交互視覺(jué)效果分析

上面弄清楚了移動(dòng)端埋點(diǎn)的作用和數(shù)據(jù)統(tǒng)計(jì)的維度扼脐,下面說(shuō)說(shuō)如何在代碼中加入這些統(tǒng)計(jì)

代碼埋點(diǎn)

最原始最簡(jiǎn)單的方法是,我們寫(xiě)一堆統(tǒng)計(jì)App數(shù)據(jù)的接口奋刽,然后封裝成sdk瓦侮,集成進(jìn)App中,App任何地方需要統(tǒng)計(jì)任何數(shù)據(jù)佣谐,則在代碼的任何地方埋入接口肚吏,并傳入相應(yīng)的數(shù)據(jù),一般大家叫這種埋點(diǎn)為代碼埋點(diǎn)狭魂。

這種埋點(diǎn)的優(yōu)點(diǎn)很明顯:可以統(tǒng)計(jì)任何維度的數(shù)據(jù)罚攀,而且統(tǒng)計(jì)很精準(zhǔn);但缺點(diǎn)也很明顯:具有版本兼容問(wèn)題(新統(tǒng)計(jì)的數(shù)據(jù)只能在新版本加入接口統(tǒng)計(jì)雌澄,舊版本沒(méi)有數(shù)據(jù))坞生,破壞代碼結(jié)構(gòu)(很多設(shè)計(jì)好的模塊為了傳入一些埋點(diǎn)數(shù)據(jù)需要修改代碼),工作量太大(每個(gè)版本都要為埋點(diǎn)付出大量人力)掷伙。

為了克服代碼埋點(diǎn)的缺點(diǎn),勤(懶)勞(惰)的程序員們發(fā)揮自己的想象力又兵,so任柜,埋點(diǎn)又進(jìn)化了。

無(wú)痕埋點(diǎn)(全埋點(diǎn))

代碼埋點(diǎn)不是工作量大沛厨?不是每個(gè)版本都要埋入代碼么宙地?不是破壞代碼結(jié)構(gòu)么?在無(wú)痕埋點(diǎn)這些問(wèn)題通通不叫事逆皮,一行代碼都不需要寫(xiě)(當(dāng)然是在吹牛)宅粥,數(shù)據(jù)就統(tǒng)計(jì)上去了。
究竟什么叫無(wú)痕埋點(diǎn)呢电谣?通俗點(diǎn)說(shuō)就是加入一些配置秽梅,然后某些控件做一些改動(dòng)抹蚀,就可以自動(dòng)統(tǒng)計(jì)上報(bào)數(shù)據(jù)了(實(shí)現(xiàn)技術(shù)后面談)。

無(wú)痕埋點(diǎn)的優(yōu)點(diǎn)是:無(wú)版本兼容問(wèn)題(應(yīng)該每個(gè)版本統(tǒng)計(jì)的數(shù)據(jù)都是一樣的企垦,不存在兼容問(wèn)題)环壤,不會(huì)破壞代碼架構(gòu)(不像代碼埋點(diǎn)那樣到處插入統(tǒng)計(jì)代碼了);當(dāng)然也有缺點(diǎn):可記錄的數(shù)據(jù)維度有限(基本只能記錄一些用戶(hù)交互數(shù)據(jù)钞诡,業(yè)務(wù)相關(guān)數(shù)據(jù)無(wú)法記錄)郑现,統(tǒng)計(jì)的數(shù)據(jù)量過(guò)大(無(wú)差別統(tǒng)計(jì)每個(gè)控件的相關(guān)交互操作事件,統(tǒng)計(jì)量過(guò)多)荧降。

以上關(guān)于無(wú)痕埋點(diǎn)的分析都基于開(kāi)發(fā)層面接箫,還有些基于運(yùn)營(yíng)層面的問(wèn)題,例如:上報(bào)的控件事件如何區(qū)分是哪個(gè)頁(yè)面的朵诫?后臺(tái)人員是否可以配置辛友?控件區(qū)分問(wèn)題由開(kāi)發(fā)和運(yùn)營(yíng)人員討論確定就行,配置問(wèn)題就涉及到無(wú)痕埋點(diǎn)的升級(jí)了拗窃。

可視化埋點(diǎn)

可視化埋點(diǎn)可以理解為無(wú)痕埋點(diǎn)的升級(jí)版瞎领,即可配置的無(wú)痕埋點(diǎn)=可視化埋點(diǎn);此實(shí)現(xiàn)策略主要通過(guò)調(diào)用服務(wù)器接口埋點(diǎn)配置數(shù)據(jù)随夸,根據(jù)這份配置九默,確認(rèn)需要上報(bào)的埋點(diǎn)數(shù)據(jù),規(guī)避了無(wú)痕埋點(diǎn)中上報(bào)很多垃圾數(shù)據(jù)問(wèn)題宾毒。

作為無(wú)痕埋點(diǎn)的升級(jí)版驼修,亦不能完全規(guī)避無(wú)痕埋點(diǎn)的缺點(diǎn)(譬如數(shù)據(jù)統(tǒng)計(jì)維度問(wèn)題),so诈铛,代碼埋點(diǎn)并沒(méi)有過(guò)時(shí)乙各,可視化埋點(diǎn)僅是埋點(diǎn)開(kāi)發(fā)過(guò)程中為了提升效率產(chǎn)生的一種方案。
下面簡(jiǎn)單談?wù)劅o(wú)痕埋點(diǎn)的實(shí)現(xiàn)原理幢竹。

無(wú)痕埋點(diǎn)實(shí)現(xiàn)

現(xiàn)在市面上的無(wú)痕埋點(diǎn)方案基本都是統(tǒng)計(jì)控件的點(diǎn)擊耳峦、長(zhǎng)按之類(lèi)的事件,統(tǒng)計(jì)方式基本分為動(dòng)態(tài)hook焕毫,靜態(tài)hook蹲坷;

  • 動(dòng)態(tài)hook

在代碼中某個(gè)位置監(jiān)聽(tīng)所有控件的點(diǎn)擊、長(zhǎng)按相關(guān)事件邑飒,在事件里插入統(tǒng)計(jì)相關(guān)代碼循签;Android中會(huì)在Application中添加Activity的生命周期監(jiān)聽(tīng),即ActivityLifecycleCallbacks疙咸,在里面獲取相關(guān)Activity的RootView县匠,從RootView出發(fā)深度優(yōu)先遍歷控件樹(shù),為滿(mǎn)足特定條件的View設(shè)置代理監(jiān)聽(tīng),這里面主要涉及到幾個(gè)技術(shù)點(diǎn):View的唯一ID確定乞旦,F(xiàn)ragment生命周期問(wèn)題

1)ViewID

每個(gè)需要統(tǒng)計(jì)的View要確保ID是唯一的贼穆,不可變的,這樣才能讓后臺(tái)統(tǒng)計(jì)到的數(shù)據(jù)準(zhǔn)確杆查,為了做到這點(diǎn)扮惦,聰明的程序員們也是用盡手段:一種確定唯一ID方式為通過(guò)RootView路徑和View的Index來(lái)標(biāo)記ViewID(LinearLayout[0]#rootView/FrameLayout[0]/RelativeLayout[0]),一種是在代碼中給每個(gè)View確定一個(gè)唯一ID亲桦。兩種方案都可以解決問(wèn)題崖蜜,好壞不表,但這種設(shè)計(jì)方式碰到RecyclerView客峭、ListView之類(lèi)的列表View就可能會(huì)出現(xiàn)錯(cuò)誤了豫领,因?yàn)樗暮芏嘧覸iew都是復(fù)用,常規(guī)的唯一ID統(tǒng)計(jì)方案在這里不起作用舔琅,這時(shí)就要加入一些特殊標(biāo)記了等恐,比如在列表的每個(gè)子View的唯一ID加入在列表中的位置

2)Fragment生命周期

上面介紹到我們統(tǒng)計(jì)Activity中的控件是在Application中做的,但是Fragment的相關(guān)Application卻無(wú)法統(tǒng)計(jì)备蚓,這時(shí)候改如何辦呢课蔬?首先確定Fragment的生命周期,它的生命周期并不能簡(jiǎn)單的按照onCreate郊尝、onResume二跋、onDetory來(lái)決定,需要根據(jù)setUserVisibleHint流昏、onHiddenChanged來(lái)共同確定扎即,確定生命周期后,再把Fragment關(guān)聯(lián)到相關(guān)的Activity况凉,通過(guò)Activity就能調(diào)用到Fragment中的View了

  • 靜態(tài)Hook

靜態(tài)hook則是在代碼編譯期在需要統(tǒng)計(jì)的地方插入相應(yīng)的統(tǒng)計(jì)代碼谚鄙,主要了解AbstractProcessor類(lèi)就好

以上僅介紹無(wú)痕埋點(diǎn)的大概實(shí)現(xiàn),以及所使用到的技術(shù)刁绒,若需使用到項(xiàng)目中還需更深入的研究闷营。

有人可能會(huì)問(wèn)這幾種埋點(diǎn)方式用哪種好?對(duì)一般的創(chuàng)業(yè)團(tuán)隊(duì)來(lái)說(shuō)知市,直接接第三方的埋點(diǎn)就可以傻盟,基本都是代碼埋點(diǎn)+可視化埋點(diǎn);當(dāng)然有能力的團(tuán)隊(duì)可以按需打造自己的埋點(diǎn)平臺(tái)初狰。

參考:網(wǎng)易HubbleData之Android無(wú)埋點(diǎn)實(shí)踐

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市互例,隨后出現(xiàn)的幾起案子奢入,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腥光,死亡現(xiàn)場(chǎng)離奇詭異关顷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)武福,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)议双,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捉片,你說(shuō)我怎么就攤上這事平痰。” “怎么了伍纫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵宗雇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我莹规,道長(zhǎng)赔蒲,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任良漱,我火速辦了婚禮舞虱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘母市。我一直安慰自己矾兜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布窒篱。 她就那樣靜靜地躺著焕刮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墙杯。 梳的紋絲不亂的頭發(fā)上配并,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音高镐,去河邊找鬼溉旋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嫉髓,可吹牛的內(nèi)容都是我干的观腊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼算行,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梧油!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起州邢,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤儡陨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體骗村,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫌褪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胚股。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笼痛。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖琅拌,靈堂內(nèi)的尸體忽然破棺而出缨伊,到底是詐尸還是另有隱情,我是刑警寧澤财忽,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布倘核,位于F島的核電站,受9級(jí)特大地震影響即彪,放射性物質(zhì)發(fā)生泄漏紧唱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一隶校、第九天 我趴在偏房一處隱蔽的房頂上張望漏益。 院中可真熱鬧,春花似錦深胳、人聲如沸绰疤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)轻庆。三九已至,卻和暖如春敛劝,著一層夾襖步出監(jiān)牢的瞬間余爆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工夸盟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛾方,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓上陕,卻偏偏與公主長(zhǎng)得像桩砰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子释簿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容