TamicAppMonitoring
Android App 无痕迹全埋点方案
本次基于的埋点框架: https://github.com/Tamicer/SkyMonitoring
背景
目前统计已经是一个产品常见的需求,尤其在业务模式探索的前期,埋点功能更是必不可少的功能,下面将介绍最简单的 app 全埋点方案!
什么是数据埋点
数据埋点是一般项目采用统计 UV,PV,Action,Time 等一系列的数据信息,对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。
为什么要数据埋点
产品或运营分析人员,基于埋点数据分析需要,对用户行为的每一个事件进行埋点布置,并通过 SDK 上报埋点的数据结果,进行分析,并进一步优化产品或指导运营。
数据埋点包括哪些
这里有我之前写的一篇文章App 优质精准的用户行为统计和日志打捞方案
地址:http://blog.csdn.net/sk719887916/article/details/50931485
数据埋点采集模式
自动埋点
App 通过代理,调用 Sdk 相关 API,进行的将数据埋点上报的模式.
无痕埋点
无需通过专门提供代理类,直接由 sdk 提供相关接口,或者通过编译工具,预编译替换代码等,直接由 sdk 全部负责采集上报
可视化埋点
可视化埋点指 前端或者 app 端基于 dom 元素和控件所精准自动埋点的上报的方案。
对比分析:
自动埋点:
缺点: 1 开发人员工作量大,需对业务提供唯一的 ID,来区分每一个业务,无论是否提供 sdk 代理,业务开发人员至少需要多次调用 sdk 相关 API.
2 业务人员和产品沟通成本提高,需要对具体业务制定相关的业务标识,以便于产品分析和统计
优点:
产品运营工作量少,对照业务映射表,就能分析出还原相关业务场景, 数据比较精细,无需大量的加工和处理。
无痕埋点
缺点:
1 sdk 开发人员需提供一套无痕埋点技术成品,包括能正确获取 PV,UV,ACtion,TIme 等多项统计指标。前期技术投入大。
2 数据量大,需后端落地进行大量处理,并由产品进行自我还原业务员场景。 无论采用智能系统平台,还是通过原生的数据库查询数据,都是一种大量的分析精力。
优点:
1 开发人员工作量小,无需对业务标识进行唯一区分,由 sdk 自动进行生成,ID 规则由 sdk 和产品进行约定。减少业务人员的沟通成本和使用步骤。
2 数据量全面,覆盖面广,产品可按需进行分析。做到毫无遗漏。
3 支持动态页面和局部动效的统计。
可视化埋点
优点:
1 相对数据量而言 相比较于无埋点相而言对较低,但是这个可视化元素的识别技术是客户端或者前端所要实现的,唯一 id 生成也无需客户端去自定义规则,这套生成规则由相关产品在自动化工具的情况下生成配置表,下发到客户端,再由客户端按坑就班到相关界面去实现。
2 数据量相对精确
缺点:
1 可视化工具的平台的搭建,静态页面的元素识别都需要额外开发。 2 动态效果可能会遗漏。
实现方案:
埋点需求可参考我之前的文章:
自动埋点实际上也是,提供一个 base 类,由业务类继承 base 类,在 base 里面做相关统计 api 调用, 可参考我的github:https://github.com/Tamicer/SkyMonitoring
核心实现:
以 android 作为列子:
提供自动遍历元素 并能扑捉点击的控件的 activity, 并能在生命周期统计 pv 的打开和关闭,调用我开源的SkyMonitoring的对应的 api.
复写dispatchTouchEvent(MotionEvent ev) 事件函数,确定被点击的 view 的相关位置,并生成唯一的 ID,企业级 app 都是从服务器下发对应的 ID,对应页面去调用埋点 sdk Api,实现事件行为TcStatInterface.initEvent(path.viewTree);。
这个 path 就是 view 的路径,页面的深度路径,包括打开和关闭 sdk 在 SkyMonitoring 中已能自动获取。
本次 demo 是 id 生成规则是按照 :包名+ Activity+ Viewgroup+ Layout+ view + View index + viewID 实现的。
业务直接去继承TamicActivity即可,就能去实现所有可视化 view 的埋点功能。
App 项目集成使用,初始化 url 和相关统计配置字典,这个字典可以从服务器下发下来,我本次只是通过简单的本地文件做实践。
public class StatAppliation extends Application {
@Override
public void onCreate() {
super.onCreate();
// you app id
int appId = 21212;
// assets
String fileName = "my_statconfig.json";
String url = "https://github.com/Tamicer/TamicAppMonitoring";
// init statSdk
TcStatInterface.initialize(this, appId, "you app chanel", fileName);
TcStatInterface.setUrl(url);
TcStatInterface.setUploadPolicy(TcStatInterface.UploadPolicy.UPLOAD_POLICY_DEVELOPMENT, TcStatInterface.UPLOAD_TIME_ONE);
}
}
可视化也可以通过 aop 插桩实现,但是实现起来对代码的入侵性太高,这里不做介绍。
Aop 插桩对碎片化 fragment 支持比较好。对这块的介绍可看我以前在公众号推送的一篇文章 :AOP 编程之 AspectJ 实战实现数据无痕埋点
项目地址:
github:https://github.com/Tamicer/TamicAppMonitoring
Tamic 原创 http://blog.csdn.net/sk719887916/article/details/79074556
第一时间获取我的技术文章请关注微信公众号!

