SDK無埋點技術(shù)介紹_第1頁
SDK無埋點技術(shù)介紹_第2頁
SDK無埋點技術(shù)介紹_第3頁
SDK無埋點技術(shù)介紹_第4頁
SDK無埋點技術(shù)介紹_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、SDK無埋點技術(shù)介紹技術(shù)創(chuàng)新,變革未來SDK無埋點技術(shù)簡介SDK無埋點技術(shù)如何實現(xiàn)實踐中遇到的坑和解決方法目錄01 SDK無埋點技術(shù)簡介無埋點解決什么問題?解決代碼埋點本身成本過高,可視化操作,更容易 上手;把核心代碼和配置進(jìn)行分離;不懂代碼的人也可以通過后臺配置錨點并實時下發(fā) 到客戶端生效;避免代碼寫死,需要更新版本才能生效的笨拙方式。 變得更為主動靈活高效;什么是埋點?第三階段數(shù)據(jù)建模統(tǒng)計第四階段數(shù)據(jù)展示第二階段數(shù)據(jù)存儲數(shù)據(jù)采集第一階段所謂埋點就是通過在代碼的關(guān)鍵部位 植入統(tǒng)計代碼,追蹤用戶的行為埋點長啥樣?一段埋點代碼埋點過程中的痛點需要開發(fā)寫代碼、熟悉api、容易錯埋漏埋;修改需要重新

2、編譯 打包,更新代價大擴(kuò)展性靈活性差,增 加功能就得再次埋點無埋點又是什么噱頭可視化可視化埋點操作,運營 和實施人員就可以完成配置即代碼靈活、可擴(kuò)展埋點功能由配置控制Codeless 開發(fā)人員只需要集成 幾行初始化代碼即可熱更新修改、添加方便,無需重新 編譯打包,效率高,成本低無埋點長啥樣?無埋點長啥樣?埋點vs無埋點u 無埋點解決了埋點的部分痛點u 無埋點是一種自然的進(jìn)化,方便客戶 集成,操作可視化u 無埋點也有自己的一些問題,例如 無法傳遞一些復(fù)雜的信息,只能捕獲 一些簡單的點擊和文字變化事件行為u 兩者不是對立的,相輔相成,各有各 的使用場景02 SDK無埋點技術(shù)如何實現(xiàn)整體架構(gòu)圖Web

3、配置頁面SDK通信服務(wù)器配置服務(wù)器探頭服務(wù)KafkaLoader/Format erMongoDBHDFS/HiveHbase傳輸協(xié)議基于TCP層的長連接因為SDK和配置后臺都需要和通信服務(wù)器進(jìn)行雙向交互。這種情況用http協(xié) 議就無法滿足雙向交互和實時反饋的需求;而且http輪詢也耗費性能;所以 最終SDK 跟服務(wù)端使用socket 建立長連接, 配置Web 端跟服務(wù)器使用 websocket建立長連接傳輸?shù)臄?shù)據(jù)使用json格式,數(shù)據(jù)量小而且便于解析傳輸?shù)倪^程中跟服務(wù)端約定秘鑰,使用對稱加密算法對內(nèi)容進(jìn)行加密, 同時也采用壓縮算法盡可能減小傳輸?shù)臄?shù)據(jù)量如何觸發(fā)無埋點配置通過手勢搖一搖觸發(fā)發(fā)通

4、過手勢搖一搖來觸發(fā),結(jié)合震動給用戶反饋, 這種不需要界面交互,剛好可以滿足需求最終我們選擇的也是這種方式SDK是內(nèi)嵌在App內(nèi),沒有任何和用戶交互的界面通過第三方程序觸發(fā)?例如通過手機(jī)掃描一個二維碼,然后二維碼里包含 一個特殊的UrlSchemal和參數(shù)來觸發(fā)app內(nèi)的SDKapp界面如何傳輸?shù)脚渲庙撁嫱ㄟ^一些遠(yuǎn)程桌面協(xié)議例如VNC協(xié)議來進(jìn)行傳輸?SDK截取頁面屏幕,每隔一段時間傳遞給服務(wù)端VNC協(xié)議的優(yōu)勢在于傳遞速度快,但是協(xié)議比較復(fù)雜,而且需要在SDK內(nèi)實現(xiàn)VNC的服務(wù)端,不太現(xiàn)實,舍棄這種方案這種方案相對比較簡單,易于實現(xiàn)。只需要把截圖數(shù)據(jù)進(jìn)行base64之后傳遞給服務(wù)端即可,主要是關(guān)注

5、截圖和傳輸?shù)膬?yōu)化即可屏幕截圖的關(guān)鍵代碼Android關(guān)鍵代碼:iOS關(guān)鍵代碼:控件信息獲取及ID生成技術(shù)首先是安卓1獲取時機(jī)主要是監(jiān)控所有activity的生命周期回調(diào),在onResume里觸發(fā),主要是實現(xiàn) 了系統(tǒng)的ActivityLifecycleCallbacks接口2獲取控件的哪些信息因為后臺配置頁面要在截圖上繪制每個組件的坐標(biāo)并框選出來,所以需要獲取控件的坐標(biāo)x,y還有width和height,同時還要獲取控件是否可 見以及透明度等有用的信息3如何生成控件的唯一ID主要是根據(jù)一個控件不變的屬性組合來生成,例如控件的類名、tag,當(dāng)前 activity的包名,控件位于整個view tre

6、e的路徑等信息組合起來然后做一個md5控件信息獲取及ID生成技術(shù)首先是安卓1獲取時機(jī)主要是監(jiān)控所有activity的生命周期回調(diào),在onResume里觸發(fā),主要是實現(xiàn) 了系統(tǒng)的ActivityLifecycleCallbacks接口控件信息獲取及ID生成技術(shù)首先是安卓2獲取控件的哪些信息因為后臺配置頁面要在截圖上繪制每個組件的坐標(biāo)并框選出來,所以需要獲取控件的坐標(biāo)x,y還有width 和height,同時還要獲取控件是否可見 以及透明度等有用的信息控件信息獲取及ID生成技術(shù)首先是安卓主要是根據(jù)一個控件不 變的屬性組合來生成, 例如控件的類名、tag, 當(dāng)前activity的包名,控 件位于整個

7、view tree的 路徑等信息組合起來然 后做一個md53如何生成控 件的唯一ID控件信息獲取及ID生成技術(shù)然后是 ios1獲取時機(jī)主要是hook所有的viewcontroller的viewDidAppear函數(shù),利用ios的運行時 使用method swizzling技術(shù)攔截系統(tǒng)函數(shù),替換為自己的函數(shù)實現(xiàn)2獲取控件的哪些信息這塊和android的差不多,主要是控件的坐標(biāo)x,y還有width和height, 同時還要獲取控件是否可見以及透明度等有用的信息3如何生成控件的唯一ID主要是根據(jù)一個控件不變的屬性組合來生成,例如控件的類名, 當(dāng)前viewcontroller的類名,控件的點擊事件名s

8、elctor,控件位于整個view tree的路徑等信息組合起來然后做一個md5控件信息獲取及ID生成技術(shù)然后是 ios1獲取時機(jī)主要是hook所有的viewcontroller的viewDidAppear函數(shù),利用ios的運行時 使用method swizzling技術(shù)攔截系統(tǒng)函數(shù),替換為自己的函數(shù)實現(xiàn)2獲取控件的哪些信息這塊和android的差不多,主要是控件的坐標(biāo)x,y還有width和height, 同時還要獲取控件是否可見以及透明度等有用的信息控件信息獲取及ID生成技術(shù)然后是 ios3如何生成控件的唯一ID主要是根據(jù)一個控件不變的屬性組合來生成,例如控件的類名, 當(dāng)前viewcontr

9、oller的類名,控件的點擊事件名selctor,控件位于整個view tree的路徑等信息組合起來然后做一個md5控件信息獲取及ID生成技術(shù)然后是 ios動態(tài)綁定控件事件 (Android)主要是可利用Android中View 的sendAccessibilityEvent(int eventType)方法來實現(xiàn)事件觸發(fā)的;只要設(shè)置了代理就可以對具 備Accessibility能力的view 實現(xiàn)點擊事件的響應(yīng)。 View.AccessibilityDelegate具體說明請參考Android 的開發(fā)者文檔。動態(tài)綁定控件事件(ios)ios主要遍歷當(dāng)前界面所有的控件,并根據(jù)配置信息篩選需要綁

10、定的控件,然后通過methodswizzling 的技術(shù)替換控件的點擊事件來達(dá)到綁定控件的事件;03 實踐中遇到的坑和解決方法長連接斷開的問題解決方法:這是使用長連接經(jīng)常遇到的一 個問題,處理方法就是要有一 個簡單的心跳機(jī)制,來保活鏈 路,防止因長時間沒有數(shù)據(jù)流 動被防火墻或者網(wǎng)關(guān)殺掉問題:鏈路如果長時間沒有數(shù)據(jù)通信就會斷開并且服務(wù)端和客戶端也沒有及時的回調(diào)通知?搖一搖遇到的問題問題:搖一搖觸發(fā)成功如何給用戶反饋?以及用 戶有時候運動中的搖一搖誤觸發(fā)怎么解決?解決方法:搖一搖觸發(fā)成功連上服務(wù)器后可以用震 動的形式給用戶反饋,以反饋給用戶,用戶就不用 一直搖來搖去;防止誤觸發(fā)主要是通過服務(wù)端返回

11、一個消息通知成功后才給用戶以震動的提示,然后開始傳輸截屏和 控件的信息到服務(wù)器;這樣就不會走著走著手機(jī)突 然就震動了;問題:ios如何能在所有界面都能監(jiān)聽的搖一搖事件解決方法:這個主要是利用ios的運行時的一些技術(shù),攔截到系統(tǒng)的 rootViewController,然后動態(tài)的給注入一個搖一搖的監(jiān)聽方法,這 樣就能在所有的界面監(jiān)聽搖一搖的事件了。界面?zhèn)鬏斝市阅艿膬?yōu)化截圖使用jpeg格式進(jìn)行最大的壓縮比,然后圖片質(zhì)量選擇0.6 這樣既不影響清晰度,也能夠最大限度的減少數(shù)據(jù)傳輸量, 進(jìn)而提高傳輸?shù)男势聊唤貓D的傳輸頻率,默認(rèn)是每隔5秒傳輸一次,但這樣的話 手機(jī)操作時無法實時傳送到服務(wù)端以及web

12、管理段,這給用 戶一種延時的感覺,這塊我們主要是針對界面切換和列表以 及滾動這些事件做了主動觸發(fā),這樣用戶就能感覺到管理頁 面跟手機(jī)幾乎是同步的有些時候屏幕界面是沒有變化,所以這時候發(fā)送截圖沒有必要, 所以我們隊截圖做一個md5保存,然后下次發(fā)送屏幕截圖時先 對比一下兩次截圖的md5值是否一樣,如果一樣就不發(fā)送截圖123控件ID重復(fù)導(dǎo)致錯誤和重復(fù)發(fā)送問題:通用的ID生成規(guī)則針對某些特殊情況的控件會產(chǎn)生相 同的ID,例如同樣類名的button,并且位于相同的父view上,而且程序邏輯控制每次動態(tài)add其中一個, 這樣他們的view tree上的path也一樣;導(dǎo)致生成的ID 重復(fù);進(jìn)而影響界面繪制和事件統(tǒng)計解決方案:因為SDK能拿到的控件信息有限,所以當(dāng)這些通用規(guī) 則都失效的情況下,只能通過服務(wù)端對這些控件進(jìn)行 特殊的配置,進(jìn)行定制,例如button里的text可能不 一樣,所以可以用這項信息添進(jìn)去?SDK技術(shù)發(fā)展趨勢盡量讓第三方app集成起來方便,盡量做到讓第三方開發(fā)者調(diào)用最少的代碼就能 集成SDK,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論