APP無埋點(diǎn)流程

最近無埋點(diǎn)技術(shù)很是流行,抽空研究了下諸葛IO,talkingData以及百分點(diǎn)這些業(yè)內(nèi)知名公司的無埋點(diǎn)SDK,抽取其中重要的信息供大家參考:

1、首先什么是無埋點(diǎn)呢,其實(shí)所謂無埋點(diǎn)就是開發(fā)者無需再對追蹤點(diǎn)進(jìn)行埋碼,而是脫離代碼,只需面對應(yīng)用界面圈圈點(diǎn)點(diǎn)即可追加隨時(shí)生效的事件數(shù)據(jù)點(diǎn)。

無埋點(diǎn)的好處

其實(shí)無埋點(diǎn)并不是完全不用寫代碼,而是盡可能的少寫代碼。開發(fā)者將SDK集成到項(xiàng)目中,配置并初始化SDK之后,接下來就可以進(jìn)行可視化操作。這個(gè)可以不依賴開發(fā)者,一些實(shí)施人員都是通過后臺的配制,就達(dá)到埋點(diǎn)的配制,還有新增埋點(diǎn)改動都是很方便的實(shí)現(xiàn)。最后就是配制和代碼,可以很靈活地?cái)U(kuò)展,動態(tài)地更新。

2、上面我們寫道無埋點(diǎn)要進(jìn)行可視化操,參考百分點(diǎn)、talkingData采用相對簡單可行的辦法是對當(dāng)前的屏幕進(jìn)行截圖,截圖完了以后做一些處理。做一些壓縮,然后傳到服務(wù)端,服務(wù)端進(jìn)行展現(xiàn),就把屏幕截圖展現(xiàn)出來。屏幕截圖做完了,下一步,需要在管理界面進(jìn)行配置,對于可點(diǎn)擊的組件進(jìn)行配置,就需要把這些界面框起來展現(xiàn)給使用者。下面是截取的talkingData的可視化操作為例,為大家展示可視化埋點(diǎn)的流程:

項(xiàng)目嵌碼之后,進(jìn)入可視化鏈接頁面,搖一搖連接設(shè)備:

搖一搖,連接設(shè)備

鏈接成功之后,平臺獲取當(dāng)前界面截圖:

平臺自動獲取連接設(shè)備當(dāng)前界面

為要統(tǒng)計(jì)的界面元素命名事件,添加追蹤點(diǎn),至此埋點(diǎn)操作完成:

選擇界面中的元素來追加事件

這里需要指出一下,無埋點(diǎn)只是針對一些簡單的操作統(tǒng)計(jì),如按鈕點(diǎn)擊的次數(shù)、時(shí)間等。如果是比較復(fù)雜的應(yīng)用場景,例如支付事件,需要統(tǒng)計(jì)商品名稱、價(jià)格、數(shù)量等,這就需要通過埋點(diǎn)來收集詳細(xì)的參數(shù)。

3、無埋點(diǎn)實(shí)現(xiàn)方式:

整個(gè)技術(shù)里面比較關(guān)鍵的一點(diǎn)是怎么拿到屏幕控件信息。這一塊兒主要就是三個(gè)問題。第一,就是獲取時(shí)機(jī)。第二,就是拿控件什么信息,什么信息是需要用到的。第三,就是比較關(guān)鍵的,如何生成控件的唯一ID,ID是在程序內(nèi)部生成。需要保證在不同的手機(jī)上面,這些ID是一樣的。還要保證每一次啟動ID都是不變。

首先是Android:


然后,接下來我們可以看一下iOS,同樣的,也是面臨三個(gè)問題:

iOS無埋點(diǎn)的核心技術(shù)是利用蘋果的runtime機(jī)制,把系統(tǒng)事件、點(diǎn)擊事件的指針替換成我們自己的函數(shù)來監(jiān)測用戶的操作,我們在自己的函數(shù)中采集并發(fā)送需要的數(shù)據(jù)。

4、遇到的問題和解決辦法

第四部分,講一下我們在實(shí)現(xiàn)無埋點(diǎn)技術(shù)的時(shí)候,遇到了什么坑?以及采用什么方法來解決這些坑。

長連接斷開的問題,我們之前是設(shè)計(jì)每隔5秒發(fā)送一次截圖,一般不會產(chǎn)生斷開。但是,后面做了一些優(yōu)化,我們不會每隔5秒就發(fā),這樣就會導(dǎo)致這個(gè)鏈路長時(shí)間沒有數(shù)據(jù)。然后,我們解決方法也是采取了業(yè)界通用的方法,發(fā)一個(gè)心跳,通過發(fā)一個(gè)心跳來保證這個(gè)鏈路一直是活著的。

第二個(gè)問題就是搖一搖遇到的問題,我們遇到的問題是這樣的,你拿著手機(jī)搖一搖,什么時(shí)候連接成功呢?你得給用戶一個(gè)反饋,要不用戶就是一直搖下去,我們后來想的方法是,搖成功給他一個(gè)振動,振動了,用戶有反饋,就知道這個(gè)連接成功了,不需要搖了。然后,就是帶來另外一個(gè)問題。有時(shí)候運(yùn)動當(dāng)中,又會產(chǎn)生一些誤操作,就是導(dǎo)致手機(jī)會振一下。這個(gè)怎么解決呢?我們就想了一下,可以通過給服務(wù)端有一個(gè)交互,管理界面里面發(fā)現(xiàn)有一個(gè)請求過來要連了會有一個(gè)確認(rèn)的按鈕,用戶確認(rèn)之后,SDK收到確認(rèn)消息以后,我們再去振動。這樣的話,既可以給用戶反饋,也不會說在它誤操作情況下振動。這樣就不會造成誤操作,也不會無緣無故地進(jìn)行振動。

界面?zhèn)鬏數(shù)膬?yōu)化,因?yàn)樵谡麄€(gè)配制過程當(dāng)中,傳輸數(shù)據(jù)量最大的就是屏幕的截圖。怎么把這個(gè)優(yōu)化一下?就可以更好地提升我們的體驗(yàn)度,還有流暢性。圖片采用jpeg格式,把圖片質(zhì)量選擇0.6,剛好是可以看清楚的。然后,也最大限度地降低了這個(gè)圖片大小。

然后,整個(gè)傳輸效率,有這樣一個(gè)問題。我在當(dāng)前界面,默認(rèn)就是5秒傳一次。我點(diǎn)了一下,我在當(dāng)前一個(gè)列表界面,點(diǎn)了一下切換到詳情界面。最壞的情況下就是等5秒,加上網(wǎng)絡(luò)傳輸效果,管理界面就看到新的屏幕。這種體驗(yàn)是很差的,因?yàn)閷?shí)時(shí)性太差。所以,這一塊做了一個(gè)優(yōu)化。盡量讓它實(shí)時(shí)傳過去,我們在屏幕切換的時(shí)候,主動發(fā)一次截圖。這樣的話,等的時(shí)間就是網(wǎng)絡(luò)傳輸?shù)臅r(shí)間,不用等5秒固定的時(shí)間。這一塊用戶體驗(yàn)上面就是更流暢一些。

有的時(shí)候屏幕界面沒有任何的變化的,這個(gè)時(shí)候每隔5秒傳一次沒有必要的。所以,我們把屏幕截圖做一個(gè)md5進(jìn)行保留,傳輸時(shí)對比md5,當(dāng)切換到下一個(gè)的時(shí)候,我們就發(fā)新的屏幕截圖。這樣就會減少很多不必要的屏幕的傳輸。然后,也會節(jié)省很多的流量。

控件ID重復(fù)的問題。前面說過我們的ID生成規(guī)則可以解決90%的問題,但是,有一些問題還是解決不了。生成ID重復(fù),重復(fù)的話就會產(chǎn)生一個(gè)什么樣的效果和問題?同樣兩個(gè)按紐,一個(gè)注冊,對于注冊定義了一個(gè)埋點(diǎn),就是注冊點(diǎn)擊,用戶實(shí)際操作的時(shí)候點(diǎn)登陸的時(shí)候也是發(fā)過來一個(gè)注冊點(diǎn)擊消息。這樣就是統(tǒng)計(jì)不準(zhǔn),因?yàn)檫@種比較的特殊,我們采用的解決方案,通過服務(wù)端發(fā)一些特殊配制。把這些配制里面,因?yàn)檫@兩個(gè)button里的text不一樣,一個(gè)是注冊,一個(gè)是登陸。我們把text信息放在ID的這個(gè)生成規(guī)則里面,最終生成兩個(gè)不同的ID,也是可以解決這個(gè)問題。

還有一個(gè)難點(diǎn)通過可視化埋點(diǎn)的事件名稱會先通過平臺傳到服務(wù)器,服務(wù)器再傳給所有用戶APP中的SDK,SDK進(jìn)行判別是哪個(gè)界面的哪個(gè)事件被動態(tài)埋點(diǎn)了,然后進(jìn)行統(tǒng)計(jì),并發(fā)送數(shù)據(jù)到后臺進(jìn)行統(tǒng)計(jì)分析。判斷某個(gè)界面的某個(gè)事件應(yīng)該會比較棘手,在這里先做一個(gè)標(biāo)記。

當(dāng)然在寫SDK的過程中肯定還有很多的坑,我會在以后的時(shí)間里一一記錄下來,同時(shí)也歡迎大家提出自己的見解。

主要參考:以上是之前找的資料,時(shí)間久了就忘了出處,故沒有粘貼作者信息,但這些信息給自己在實(shí)踐的過程中提供了很多的指導(dǎo),這里多謝作者,以后找到出處一定補(bǔ)上。

終于找到來源了,嘿嘿嘿:http://chuansong.me/n/952687251048#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1

技術(shù)交流群:有需要可以進(jìn),若掃碼群滿請加作者wx:chu2478

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容