| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 神策分析 Android SDK 架构解析 -> 正文阅读 |
|
[移动开发]神策分析 Android SDK 架构解析 |
前言神策分析 Android 埋点 SDK,是一款轻量级用于 Android 端的数据采集埋点 SDK,包含代码埋点、全埋点、点击图和可视化全埋点功能。全埋点通过配合神策 Android 埋点插件来实现,神策分析 Android 埋点插件使用字节码插桩(ASM)的技术实现 Android 端的全埋点(无埋点 / 无码埋点 / 无痕埋点 / 自动埋点)。 SDK 目录分层神策分析 Android 埋点 SDK 自开源以来,从最开始为了满足代码埋点的需求,到后来全埋点、可视化全埋点的支持,SDK 的目录结构不断发生调整以及相关代码的优化。目前开源代码中存在demo、demoAndroidX、SensorsAnalyticsSDK?三个工程项目,其中:
下面将以最新的 SDK 版本 v3.2.10?为基础介绍 SensorsAnalyticsSDK 的目录分层。
数据流程一条数据从触发采集代码到最终删除的流程图如下所示: SDK 采集一条数据首先会存入本地 SQLite 数据库,判断是否符合数据上报策略,如果符合则上报数据,若上报成功则删除已上报的数据,失败则不删除;如果不符合发送策略,则数据不上传、不删除。未上报的本地数据会在下一条数据采集时再次触发该流程上报数据或者 APP 进入后台时触发上报,以此循环。 架构详解一、简介如上所述,神策分析 Android SDK?是一款轻量级用于 Android 端的数据采集埋点 SDK。而数据采集是构建数据平台的核心要素,数据采集是否完整,采集的数据是否准确,采集是否及时,采集的数据能否关联打通,都直接影响整个数据平台的应用效果。因此,神策分析 Android SDK 采用了良好的架构来保证数据的采集。 二、架构图神策分析 Android SDK 总体架构图如下所示: 三、架构详解(一)配置模块SDK 初始化配置模块中,不仅支持本地参数初始化配置,同时可支持后台远程配置初始化参数。下面将介绍?SDK 初始化配置及远程配置策略。 1.? SDK 初始化配置 在引入神策分析 Android SDK 之后,进行 SDK 的初始化时通过传入 SAConfigOptions 进行 SDK 的相关配置。SAConfigOptions 提供默认配置项,无特殊需求客户可以直接使用默认值进行初始化 SDK。涉及的文件:
示例: 点击图片查看详细内容 2. SDK 远程配置 远程配置通过访问对应的数据接收地址下的 config 接口,得到 disableDebugMode、disableSDK 和 autoTrackMode 这三个配置项的值,来控制相应的功能。 初始化 SDK 可配置?SAConfigOptions?中的参数mDisableRandomTimeRequestRemoteConfig?,该参数控制是否禁用随机时间请求远程配置,该配置目的是通过设置可分散降低 SDK 远程配置请求的频次。 如果该值设置为 true,则每次 APP 启动后都会访问远程配置接口获取远程配置,如果开启随机时间请求远程配置后,可设置远程配置请求最小间隔时长 mMinRequestInterval (单位为小时,默认值 24 )、远程配置请求最大间隔时长 mMaxRequestInterval(单位为小时,默认值 48 ),SDK 根据设定的时间按照一定规则判断是否满足请求远程配置条件,如果满足条件则触发远程配置请求,若不满足则不请求。请求失败后,会自动最多重试 3 次。请求成功后更新配置,生效配置。 具体时间约束规则,参考 Android SDK 源码?SensorsDataUtils?类中?isRequestValid?方法。远程配置请求流程如下图所示: 下面分别介绍下这三个配置项的取值含义: (1)disableDebugMode(目前已经废弃)
(2)disableSDK
(3)autoTrackMode
如果要开启全埋点中的部分事件,需要用下面的几个值进行组合:
比如,我想开启 $AppStart 和 $AppClick 事件,那 autoTrackMode 的值就是 5,即:1 + 4 = 5 (二)数据采集模块数据采集模块是核心模块,主要负责准确、完整地通过埋点来采集数据。数据采集模块主要提供了下面几个功能:
(三)数据存储模块为了最大限度的保证事件数据的准确性和及时性,会要求数据采集 SDK 尽快将事件数据同步到服务端。但在某些情况下,例如用户处于断网环境,或者根据实际需求(对用户体验要求比较高的情况)会要求只有在 Wi-Fi 环境中才会同步数据,可能会导致事件数据无法同步或者同步失败。因此,数据采集 SDK 一般采取的策略是:先把事件数据缓存在本地,待符合一定的策略之后,再去同步数据。 在 Android 应用程序中,使用 SQLite 数据库进行埋点事件的存储。 (四)网络模块在数据存储模块中,介绍了如何把事件数据存储到客户端本地。如果事件数据一直缓存在本地,是没有意义的,我们还需要把数据同步到服务端,然后再经过服务端的存储、抽取、分析和展现,才能充分发挥数据的价值。因此,网络模块主要负责如何把缓存在本地的事件数据同步给服务端。 在 Android 开发中,常见的网络请求框架有:OkHttp、Volley 等。但是对于 SDK 来说,一般的原则是不依赖第三方的库,所以这里我们通过简单封装 HttpURLConnection 类进行网络请求的发送。这里会涉及到数据的网络发送策略,网络策略一方面是为了降低用户使用数据采集 SDK 的难度和成本,另一方面更是为了确保数据的正确性、完整性和及时性。 在这里,我们以最常用的三种数据同步策略为例来介绍:
上述三种策略是自动同步数据策略,三种策略为“或”的关系,当满足其中一个策略 SDK 就会上报数据。如果需要手动触发数据同步,可以直接调用 flush() 方法同步数据。 (五)辅助工具神策分析 Android SDK 提供了许多埋点相关的工具类,这些辅助工具可以帮助埋点的实现。例如 AopUtil 提供了获取控件内容、获取页面标题内容,获取组件显示的文本内容、获取控件位置等等方法;SensorsDataUtils 工具类获取运营商信息、获取 UA、合并 JSON 、检测 Android Permission 等等方法,关于这些辅助工具的功能和实现就不逐一赘述了,具体可以参考 SDK 的源码。 (六)日志服务扫码打开调试模式后,SDK 同时自动开启日志输出功能,也可在测试阶段通过 enableLog 接口打开 SDK 日志输出功能。 SDK 日志输出开启后,在 IDE Logcat 日志控制台中筛选 SA. 关键词进行日志筛选。
日志示例: 点击图片查看详细内容 总结随着业务不断地发展以及 Android 技术的不断更新,技术架构是一个持续更新的过程,以适应业务的不断的发展。 *如果你喜欢更多内容,欢迎关注「神策数据开源社区服务号」,也可以在服务号回复“ 3?”,获取进入开源社区社群的方式,和一群热爱技术的人聊技术、分享技术! |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:53:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |