APP無埋點流程

最近無埋點技術很是流行,抽空研究了下諸葛IO,talkingData以及百分點這些業內知名公司的無埋點SDK,抽取其中重要的信息供大家參考:
1、首先什么是無埋點呢,其實所謂無埋點就是開發者無需再對追蹤點進行埋碼,而是脫離代碼,只需面對應用界面圈圈點點即可追加隨時生效的事件數據點。

無埋點的好處
其實無埋點并不是完全不用寫代碼,而是盡可能的少寫代碼。開發者將SDK集成到項目中,配置并初始化SDK之后,接下來就可以進行可視化操作。這個可以不依賴開發者,一些實施人員都是通過后臺的配制,就達到埋點的配制,還有新增埋點改動都是很方便的實現。最后就是配制和代碼,可以很靈活地擴展,動態地更新。
2、上面我們寫道無埋點要進行可視化操,參考百分點、talkingData采用相對簡單可行的辦法是對當前的屏幕進行截圖,截圖完了以后做一些處理。做一些壓縮,然后傳到服務端,服務端進行展現,就把屏幕截圖展現出來。屏幕截圖做完了,下一步,需要在管理界面進行配置,對于可點擊的組件進行配置,就需要把這些界面框起來展現給使用者。下面是截取的talkingData的可視化操作為例,為大家展示可視化埋點的流程:
項目嵌碼之后,進入可視化鏈接頁面,搖一搖連接設備:
搖一搖,連接設備
鏈接成功之后,平臺獲取當前界面截圖:
為要統計的界面元素命名事件,添加追蹤點,至此埋點操作完成:
選擇界面中的元素來追加事件

這里需要指出一下,無埋點只是針對一些簡單的操作統計,如按鈕點擊的次數、時間等。如果是比較復雜的應用場景,例如支付事件,需要統計商品名稱、價格、數量等,這就需要通過埋點來收集詳細的參數。
3、無埋點實現方式:
整個技術里面比較關鍵的一點是怎么拿到屏幕控件信息。這一塊兒主要就是三個問題。第一,就是獲取時機。第二,就是拿控件什么信息,什么信息是需要用到的。第三,就是比較關鍵的,如何生成控件的唯一ID,ID是在程序內部生成。需要保證在不同的手機上面,這些ID是一樣的。還要保證每一次啟動ID都是不變。
首先是Android:


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


iOS無埋點的核心技術是利用蘋果的runtime機制,把系統事件、點擊事件的指針替換成我們自己的函數來監測用戶的操作,我們在自己的函數中采集并發送需要的數據。
4、遇到的問題和解決辦法
第四部分,講一下我們在實現無埋點技術的時候,遇到了什么坑?以及采用什么方法來解決這些坑。
長連接斷開的問題,我們之前是設計每隔5秒發送一次截圖,一般不會產生斷開。但是,后面做了一些優化,我們不會每隔5秒就發,這樣就會導致這個鏈路長時間沒有數據。然后,我們解決方法也是采取了業界通用的方法,發一個心跳,通過發一個心跳來保證這個鏈路一直是活著的。
第二個問題就是搖一搖遇到的問題,我們遇到的問題是這樣的,你拿著手機搖一搖,什么時候連接成功呢?你得給用戶一個反饋,要不用戶就是一直搖下去,我們后來想的方法是,搖成功給他一個振動,振動了,用戶有反饋,就知道這個連接成功了,不需要搖了。然后,就是帶來另外一個問題。有時候運動當中,又會產生一些誤操作,就是導致手機會振一下。這個怎么解決呢?我們就想了一下,可以通過給服務端有一個交互,管理界面里面發現有一個請求過來要連了會有一個確認的按鈕,用戶確認之后,SDK收到確認消息以后,我們再去振動。這樣的話,既可以給用戶反饋,也不會說在它誤操作情況下振動。這樣就不會造成誤操作,也不會無緣無故地進行振動。
界面傳輸的優化,因為在整個配制過程當中,傳輸數據量最大的就是屏幕的截圖。怎么把這個優化一下?就可以更好地提升我們的體驗度,還有流暢性。圖片采用jpeg格式,把圖片質量選擇0.6,剛好是可以看清楚的。然后,也最大限度地降低了這個圖片大小。
然后,整個傳輸效率,有這樣一個問題。我在當前界面,默認就是5秒傳一次。我點了一下,我在當前一個列表界面,點了一下切換到詳情界面。最壞的情況下就是等5秒,加上網絡傳輸效果,管理界面就看到新的屏幕。這種體驗是很差的,因為實時性太差。所以,這一塊做了一個優化。盡量讓它實時傳過去,我們在屏幕切換的時候,主動發一次截圖。這樣的話,等的時間就是網絡傳輸的時間,不用等5秒固定的時間。這一塊用戶體驗上面就是更流暢一些。
有的時候屏幕界面沒有任何的變化的,這個時候每隔5秒傳一次沒有必要的。所以,我們把屏幕截圖做一個md5進行保留,傳輸時對比md5,當切換到下一個的時候,我們就發新的屏幕截圖。這樣就會減少很多不必要的屏幕的傳輸。然后,也會節省很多的流量。
控件ID重復的問題。前面說過我們的ID生成規則可以解決90%的問題,但是,有一些問題還是解決不了。生成ID重復,重復的話就會產生一個什么樣的效果和問題?同樣兩個按紐,一個注冊,對于注冊定義了一個埋點,就是注冊點擊,用戶實際操作的時候點登陸的時候也是發過來一個注冊點擊消息。這樣就是統計不準,因為這種比較的特殊,我們采用的解決方案,通過服務端發一些特殊配制。把這些配制里面,因為這兩個button里的text不一樣,一個是注冊,一個是登陸。我們把text信息放在ID的這個生成規則里面,最終生成兩個不同的ID,也是可以解決這個問題。
還有一個難點通過可視化埋點的事件名稱會先通過平臺傳到服務器,服務器再傳給所有用戶APP中的SDK,SDK進行判別是哪個界面的哪個事件被動態埋點了,然后進行統計,并發送數據到后臺進行統計分析。判斷某個界面的某個事件應該會比較棘手,在這里先做一個標記。
當然在寫SDK的過程中肯定還有很多的坑,我會在以后的時間里一一記錄下來,同時也歡迎大家提出自己的見解。
主要參考:以上是之前找的資料,時間久了就忘了出處,故沒有粘貼作者信息,但這些信息給自己在實踐的過程中提供了很多的指導,這里多謝作者,以后找到出處一定補上。
終于找到來源了,嘿嘿嘿:http://chuansong.me/n/952687251048#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1


作者:woniu
鏈接:https://www.jianshu.com/p/6f47fc648e69
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286530.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286530.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286530.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Esri Maps For Office制作漂亮的地圖

ArcGISOnline是一個基于云架構的資源中心,在這里你可以發布自己的地圖資源、瀏覽其它ArcGIS愛好者發布的應用程序;總之,它為我們提供了一個在線交流的場所。 EsriMapsForOffice是ArcGISonline推出的一個Office環境的插件,可以讓我們在Excel、Powerpoint中進行制圖,就像在…

《什么是 eBPF》O'Reilly 報告中文版放送

祝大家端午安康,國泰民安,世界和平。今年端午節,鄙人人在北京,所在區有中風險地區,而老家又是所在省的唯一一個中風險地區,既出不了京,也回不了家。可謂有家不能回,真是每逢佳節倍思…

介紹一個代碼管理系統-Git

Git是一個跨平臺的代碼管理系統,據說比SVN好很多,呵呵!! http://git.or.cz/ 一個基于Git管理的代碼共享網站 http://github.com/ 在windows下的客戶端程序(msysgit):http://code.google.com/p/msysgit/ 還沒有圖形客戶…

優秀博客鏈接(linux c/c++ java go php android ios 前端 j2ee windows linux 算法 ACM 深度/機器學習 AI opencv nlp)

pudn阿甘兄 前端 服務端 底層 移動端 大數據 云計算 AI 培訓機構的課程差不多就這一套了 大數據 AI NLP 高等數學 LeetCode、《數據結構與算法之美》學習筆記、AI前端資料學習,vue.js react.js flutterleetCode刷完的神機器學習數據挖掘基礎Linux c/c大神 目前cs…

一鍵將Python2代碼自動轉化為Python3

Python2的代碼直接在Python3環境運行的話會報錯誤: 如果大量的代碼,無論是批量替換,還是逐行修改都夠累的,這活兒表示不能干!!! 有沒有辦法一鍵轉換呢? 百度了一下發現網上的方法如…

【前端就業課 第一階段】HTML5 零基礎到實戰(十)JavaScript基礎一篇入門

注意:手機(APP)打開,內容顯示更佳,不會的私聊博主即可 想要拿代碼或加入學習計劃(** 博主會監督你并且教你寫文章 **)的拉到最下面(PC端Web打開)加博主即可,目…

推理集 —— 實證

現實世界的諸多事就像物理定律,而不是數學定理,也即不保證絕對正確,而需要不斷地驗證,實證。 不能不經實證就輕言一件事是行還是不行,尤其在事情如果實證的成本較低,比如今天圖書館是不是開門,路…

一款開源的跨平臺實時web應用框架——DotNetify

今天給大家介紹一個開源的輕量級跨平臺實時HTMLC#.NET Web應用程序開發框架——DotNetify,允許你在C#.NET后端上創建具有React、React Native、Vue或Blazor 前端的實時、響應式、跨平臺應用程序。它的主要特點是:簡單且輕量響應式后端MVVM內置實時解決方…

【GeoDataBase】Geodatabase智能化操作:屬性域

Geodatabase中所包含的不僅僅是要素類、要素集和表,還可能包含關系類、注釋類、幾何網絡、拓撲等不同的結構和類別。 地理數據庫按照面向對象的模型存儲地理信息,也可以將其非空間信息保存在表中。對于要素和表可以設置一些規則進行限制,對屬性的約束稱為屬性域。 屬性域是描…

Android之All children of ConstraintLayout must have ids to use ConstraintSet

1 問題 Fatal Exception: java.lang.RuntimeException: All children of ConstraintLayout must have ids to use ConstraintSetat androidx.constraintlayout.widget.ConstraintSet.readFallback(ConstraintSet.java:459)at androidx.constraintlayout.motion.widget.MotionS…

Lua性能優化

規則1:不要優化。 規則2:仍然不要優化(專家除外) 當用Lua編程時,這兩條規則顯得尤為重要。Lua以性能著稱,而且在腳本語言中也因此而值得贊美。 然而,我們都知道性能是編程的一個關鍵因素。具有復…

常用的LINQ to SQL 用法

一、Where操作 適用場景:實現過濾,查詢等功能。 說明:與SQL命令中的Where作用相似,都是起到范圍限定也就是過濾作用的,而判斷條件就是它后面所接的子句。 Where操作包括3種形式,分別為簡單形式、關系條件形…

用Python寫一個將Python2代碼轉換成Python3代碼的批處理工具

之前寫過一篇如何在windows操作系統上給.py文件添加一個快速處理的右鍵功能的文章:《一鍵將Python2代碼自動轉化為Python3》,作用就是為了將Python2的文件升級轉換成Python3的文件。之后,有朋友問,如果有很多文件需要轉換&#xf…

WP 手機Lumia 820 鎖屏密碼的POJI研究

Windows Phone lumia 手機鎖屏密碼的POJI研究大家好今天給大家分享一個最新研究案例,近日筆者Nokia Lumia 820,由于客戶密碼失誤太多,導致鎖屏23000余分鐘,,請看:型號Nokia Lumia820條件:Lumia8…

ArcGIS10從入門到精通系列實驗圖文教程(附配套實驗數據持續更新)

文章目錄1. 專欄簡介2. 專欄地址3. 專欄目錄1. 專欄簡介 本教程《ArcGIS從入門到精通系列實驗教程》內容包括:ArcGIS平臺簡介、ArcGIS應用基礎、空間數據的采集與組織、空間數據的轉換與處理、空間數據的可視化表達、GIS空間分析導論、矢量數據的空間分析、柵格數據…

【iVX 初級工程師培訓教程 10篇文拿證】09 聊天室制作

目錄 【iVX 初級工程師培訓教程 10篇文拿證】01 了解 iVX 完成新年賀卡 【iVX 初級工程師培訓教程 10篇文拿證】02 數值綁定及自適應網站制作 【iVX 初級工程師培訓教程 10篇文拿證】03 事件及猜數字小游戲 【iVX 初級工程師培訓教程 10篇文拿證】04 畫布及我和 iVX 合照 【iV…

為什么Dapr是比SpringCloud和Istio更優雅的微服務框架?

作者:徐磊文章首發地址:https://smartide.cn/zh/blog/2022-0601-dapr/Dapr 是微軟主導的云原生開源項目,2019年10月首次發布,到正式發布 V1.0 版本的不到一年的時間內,github star 數達到了 1.2萬(現在已經…

Android之模擬網絡請求返回http 502、400、401、402錯誤碼

1 問題 app 網絡框架協程沒有做網絡異常捕獲處理,想本地測試網絡接口,希望網絡接口返回Http的錯誤碼 比如502、400、401、402 2 解決辦法 1、pc安裝Fiddler Everywhere 2、讓Fiddler Everywhere支持抓http和https的包 3、保持手機和電腦同一個局域網&am…

12c分頁查詢特性FETCH FIRST ROWS,OFFSET ROWS FETCH NEXT ROW LIMIT Clause子句

Database 12c的FETCH FIRST ROWS特性可以簡化老版本中ROW_NUM()或ROWNUM的分頁排序寫法, 大幅節約開發花在分頁查詢語句上的時間。 row-limiting子句用以限制某個查詢返回的行數 可以通過FETCH FIRST/NEXT關鍵字指定返回結果的行數可以通過PERCENT關鍵字指定返回結果…

tomcat結合nginx使用小結

tomcat結合nginx部署 相信很多人都聽過nginx,這個小巧的東西慢慢地在吞食apache和IIS的份額。那究竟它有什么作用呢?可能很多人未必了解。 說到反向代理,可能很多人都聽說,但具體什么是反向代理,很多人估計就不清楚了。…