主頁 > 移動端開發 > 神策分析 Android SDK 架構決議

神策分析 Android SDK 架構決議

2021-08-17 08:01:39 移動端開發

圖片

前言

神策分析 Android 埋點 SDK,是一款輕量級用于 Android 端的資料采集埋點 SDK,包含代碼埋點、全埋點、點擊圖和可視化全埋點功能,全埋點通過配合神策 Android 埋點插件來實作,神策分析 Android 埋點插件使用位元組碼插樁(ASM)的技術實作 Android 端的全埋點(無埋點 / 無碼埋點 / 無痕埋點 / 自動埋點),

SDK 目錄分層

神策分析 Android 埋點 SDK 自開源以來,從最開始為了滿足代碼埋點的需求,到后來全埋點、可視化全埋點的支持,SDK 的目錄結構不斷發生調整以及相關代碼的優化,目前開源代碼中存在demo、demoAndroidX、SensorsAnalyticsSDK 三個工程專案,其中:

  • /sa-sdk-android/demo :簡單的測驗工程

  • /sa-sdk-android/demoAndroidX :基于 AndroidX 庫的測驗工程

  • /sa-sdk-android/SensorsAnalyticsSDK:神策分析 SDK 工程專案

圖片

下面將以最新的 SDK 版本 v3.2.10 為基礎介紹 SensorsAnalyticsSDK 的目錄分層,

圖片

  • /src/androidTest:單元測驗代碼

  • /src/main/assets:用于運營商映射配置表

  • /src/main/java:SDK 核心代碼

  • /src/main/res:SDK 用到的資源檔案

資料流程

一條資料從觸發采集代碼到最終洗掉的流程圖如下所示:

圖片

SDK 采集一條資料首先會存入本地 SQLite 資料庫,判斷是否符合資料上報策略,如果符合則上報資料,若上報成功則洗掉已上報的資料,失敗則不洗掉;如果不符合發送策略,則資料不上傳、不洗掉,未上報的本地資料會在下一條資料采集時再次觸發該流程上報資料或者 APP 進入后臺時觸發上報,以此回圈,

架構詳解

一、簡介

如上所述,神策分析 Android SDK 是一款輕量級用于 Android 端的資料采集埋點 SDK,而資料采集是構建資料平臺的核心要素,資料采集是否完整,采集的資料是否準確,采集是否及時,采集的資料能否關聯打通,都直接影響整個資料平臺的應用效果,因此,神策分析 Android SDK 采用了良好的架構來保證資料的采集,

二、架構圖

神策分析 Android SDK 總體架構圖如下所示:

圖片

三、架構詳解

(一)配置模塊

SDK 初始化配置模塊中,不僅支持本地引數初始化配置,同時可支持后臺遠程配置初始化引數,下面將介紹 SDK 初始化配置遠程配置策略

1. SDK 初始化配置

在引入神策分析 Android SDK 之后,進行 SDK 的初始化時通過傳入 SAConfigOptions 進行 SDK 的相關配置,SAConfigOptions 提供默認配置項,無特殊需求客戶可以直接使用默認值進行初始化 SDK,涉及的檔案:

  • AbstractSAConfigOptions

  • SAConfigOptions

示例:

圖片

點擊圖片查看詳細內容

2. SDK 遠程配置

遠程配置通過訪問對應的資料接收地址下的 config 介面,得到 disableDebugMode、disableSDK 和 autoTrackMode 這三個配置項的值,來控制相應的功能,

初始化 SDK 可配置 SAConfigOptions 中的引數mDisableRandomTimeRequestRemoteConfig ,該引數控制是否禁用隨機時間請求遠程配置,該配置目的是通過設定可分散降低 SDK 遠程配置請求的頻次,

如果該值設定為 true,則每次 APP 啟動后都會訪問遠程配置介面獲取遠程配置,如果開啟隨機時間請求遠程配置后,可設定遠程配置請求最小間隔時長 mMinRequestInterval (單位為小時,默認值 24 )、遠程配置請求最大間隔時長 mMaxRequestInterval(單位為小時,默認值 48 ),SDK 根據設定的時間按照一定規則判斷是否滿足請求遠程配置條件,如果滿足條件則觸發遠程配置請求,若不滿足則不請求,請求失敗后,會自動最多重試 3 次,請求成功后更新配置,生效配置,

具體時間約束規則,參考 Android SDK 原始碼 SensorsDataUtils 類中 isRequestValid 方法,遠程配置請求流程如下圖所示:

圖片

下面分別介紹下這三個配置項的取值含義:

(1)disableDebugMode(目前已經廢棄)

  • true: 代表關閉 debugMode

  • false: 代表不做處理

  • 默認值為 0,無法通過這種方式開啟 debugMode

(2)disableSDK

  • true:關閉 SDK

  • false:開啟 SDK

  • 默認值為 false

(3)autoTrackMode

  • -1: 代表不做任何處理

  • 0:代表關閉全埋點的所有事件

  • 默認值:-1

如果要開啟全埋點中的部分事件,需要用下面的幾個值進行組合:

  • $AppStart:1

  • $AppEnd:2

  • $AppClick:4

  • $AppViewScreen:8

比如,我想開啟 $AppStart 和 $AppClick 事件,那 autoTrackMode 的值就是 5,即:1 + 4 = 5

(二)資料采集模塊

資料采集模塊是核心模塊,主要負責準確、完整地通過埋點來采集資料,資料采集模塊主要提供了下面幾個功能:

  • 代碼埋點:在 SDK 初始化之后,對需要采集的事件,呼叫 track 介面方法埋點采集事件,

  • 全埋點:無需開發工程師寫代碼或者寫少量的代碼,即可預先自動收集用戶的所有或者絕大部分的行為資料,

  • 點擊圖:應用一種特殊高亮的顏色形式,顯示頁面或頁面組區域中不同元素被點擊的次數和占比,

  • 可視化全埋點:通過可視化的方式,對界面上標識的可埋點元素創建新的埋點,標識顯示名或事件名,對已埋點元素可修改顯示名,

  • 預制屬性:埋點 SDK 自動采集的一些任何用戶觸發的任何事件都需要攜帶一些最基本的屬性(資訊)(比如作業系統型別、作業系統版本號、運營商資訊、應用程式版本號、設備廠商等)

(三)資料存盤模塊

為了最大限度的保證事件資料的準確性和及時性,會要求資料采集 SDK 盡快將事件資料同步到服務端,但在某些情況下,例如用戶處于斷網環境,或者根據實際需求(對用戶體驗要求比較高的情況)會要求只有在 Wi-Fi 環境中才會同步資料,可能會導致事件資料無法同步或者同步失敗,因此,資料采集 SDK 一般采取的策略是:先把事件資料快取在本地,待符合一定的策略之后,再去同步資料,

在 Android 應用程式中,使用 SQLite 資料庫進行埋點事件的存盤,

(四)網路模塊

在資料存盤模塊中,介紹了如何把事件資料存盤到客戶端本地,如果事件資料一直快取在本地,是沒有意義的,我們還需要把資料同步到服務端,然后再經過服務端的存盤、抽取、分析和展現,才能充分發揮資料的價值,因此,網路模塊主要負責如何把快取在本地的事件資料同步給服務端,

在 Android 開發中,常見的網路請求框架有:OkHttp、Volley 等,但是對于 SDK 來說,一般的原則是不依賴第三方的庫,所以這里我們通過簡單封裝 HttpURLConnection 類進行網路請求的發送,這里會涉及到資料的網路發送策略,網路策略一方面是為了降低用戶使用資料采集 SDK 的難度和成本,另一方面更是為了確保資料的正確性、完整性和及時性,

在這里,我們以最常用的三種資料同步策略為例來介紹:

  • 策略一:客戶端本地存盤的資料超過一定條數時同步資料(默認 100 條)

  • 策略二:客戶端與上次發送的時間間隔大于預設的發送時間間隔 flushInterval (默認 15 秒)時同步資料

  • 策略三:客戶端 APP 應用程式進入后臺時為了最大限度的保證資料的完整性,盡可能同步本地快取的所有資料

上述三種策略是自動同步資料策略,三種策略為“或”的關系,當滿足其中一個策略 SDK 就會上報資料,如果需要手動觸發資料同步,可以直接呼叫 flush() 方法同步資料,

(五)輔助工具

神策分析 Android SDK 提供了許多埋點相關的工具類,這些輔助工具可以幫助埋點的實作,例如 AopUtil 提供了獲取控制元件內容、獲取頁面標題內容,獲取組件顯示的文本內容、獲取控制元件位置等等方法;SensorsDataUtils 工具類獲取運營商資訊、獲取 UA、合并 JSON 、檢測 Android Permission 等等方法,關于這些輔助工具的功能和實作就不逐一贅述了,具體可以參考 SDK 的原始碼,

(六)日志服務

掃碼打開除錯模式后,SDK 同時自動開啟日志輸出功能,也可在測驗階段通過 enableLog 介面打開 SDK 日志輸出功能,

SDK 日志輸出開啟后,在 IDE Logcat 日志控制臺中篩選 SA. 關鍵詞進行日志篩選,

  • 埋點事件觸發成功時,SDK 會輸出 【track event】 開頭的事件資料;

  • 事件資料上報成功時,SDK 會輸出 【valid message】欄位開頭的事件資料;

  • 事件資料上報失敗時,SDK 會輸出 【invalid message】 欄位開頭的事件資料并輸出錯誤原因,

日志示例:

圖片

點擊圖片查看詳細內容

總結

隨著業務不斷地發展以及 Android 技術的不斷更新,技術架構是一個持續更新的程序,以適應業務的不斷的發展,

*如果你喜歡更多內容,歡迎關注「神策資料開源社區服務號」,也可以在服務號回復“ 3 ”,獲取進入開源社區社群的方式,和一群熱愛技術的人聊技術、分享技術!

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/294252.html

標籤:其他

上一篇:解決Android Handler的handleMessage()方法內TextView.setText偶爾不執行的問題

下一篇:面試總結——Android篇

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more