数据采集基本可分为代码埋点和无埋点。近年来无埋点的数据采集方案越来越普及,而无埋点的实现方案也有多种,我们今天讨论的问题是数据采集的一种方案,是无需开发人员重复进行采集事件的代码埋点就能达到采集客户端所需数据的解决方案,也就是无埋点数据采集方案。
介绍无埋点数据采集方案之前,需要大家对以下几个知识点非常了解:
1.view 的事件分发机制
2. 使用gradle编译Android 项目的流程
3. 动态修改字节码
一、无埋点的意义和价值:
客户端埋点是数据收集的最基本手段,但由于业务迭代速度很快,手动埋点方案虽然灵活多变,但是极大的增加了客户端开发人员的工作量。开发完成业务功能需要花费很大的时间和精力去处理埋点事宜,而且随着迭代版本,埋点的数量会越来越多,这些老旧埋点的维护工作也需要付出很多资源,而且,手动埋点的正确性也没有想像的那么高,因为这个埋点的准确性需要开发人员非常了解业务逻辑和非常认真的检查埋点。所以,如果能够研发出一款不需要或者很少需要开发人员介入就能实现根据不同业务场景埋点的功能sdk对于提高版本迭代速度和释放开发人员的经历绝对是一件非常有价值的事情。
二、无埋点的实现原理介绍
为了实现无埋点我们需要解决事件触发的控件(view)唯一标识问题,首先我们都知道页面是由一个viewtree构成的,通过层级排列和位置顺序我们能唯一找到一个view。
我们主要是通过页面名称 + viewtree的layout名称 + layout位置 + 控件的属性来确定这个view的唯一标识。所谓的控件属性就是根据不同的view子类的特性获得相应不同的特殊属性来做到最大限度的确定唯一性。
所以我们就需要便利 view tree,首先需要获得根view,
View decorView = ((Activity)
context).getWindow().getDecorView();
之后通过事件的触发位置来遍历寻找目标控件。
当事件触发时我们可以找到目标view时,我们就可以唯一确定这个view的标识,这样我们也就可以将事件和业务数据进行绑定,为以后可视化埋点打下基础。也保证了事件的准确性和真实性。
我需要找到你要埋单的位置,之后通过在编译期修改字节码的方式将埋点代码插入到相应的位置。
在Android app的编译期进行干预,实现修改目标class文件,从而实现自动插入埋点代码。
主要过程是当编译开始时,gradle插件负责启动agent,agent 负责修改字节码,帮我们插入埋点代码。
到此我们的无埋点才算完成。
以上完成
我们只是做到了收集全量事件的目的,我们有很多时候是需要对某个特定事件做重新定义,比如登陆事件,我们需要知道一段时间内有多少人登陆,这时候我们需要在登陆事件下做特殊处理,正常思维是我们需要手动埋点之后发送,但是作为无埋点,我们就要引入一个新的概念就是可视化埋点修改,就是不需要开发人员修改代码,通过手机可视化的方式来直接修改。
先来了解下可视化埋点。
请看以下几个可视化埋点的功能界面,可以非常直观的了解无埋点的效果:
第一步:启动集成了数极客无埋点SDK的APP
第二步:切换到埋点模式,圈选埋点内容
第三步:保存圈选的按钮的可视化埋点名称
实现过程:
我们首先要知道我们点击的是哪个控件,也就是目标view,这就用到了之前说过的,我们要便利view tree,要唯一确定一个view。
当我们能找到我们点击目标view时,我们就可以将这个view拿出来,通过view的唯一标识来区分这个view,当我们将view的相关属性设置好后,我们将数据传给服务器,当时服务器配置生效后
,我们再push给客户端,当时这个事件再次发生时,我们通过view 的唯一标识就能就之前设置好的信息,和这次事件对应上,这样就实现了可视化的修改埋点的目的。
最后再介绍一下数极客:
数极客是国内新一代用户行为分析平台,支持无埋点采集、前端代码埋点采集、后端代码埋点采集等多种混合数据采集方式, 支持30多种数据可视化效果,是增长黑客必备的大数据分析工具,支持APP数据分析和网站分析及用户画像,独创了6大转化率分析模型,是用户行为分析领域首家应用定量分析与定性分析方法的数据分析产品,运用数极客用户行为录屏系统,可以分析并优化用户体验的细节,基于用户行为分析系统,提供了会员营销系统和A/B测试工具两大数据智能应用解决方案,使得企业可以快速的实现数据驱动增长。
欢迎关注数极客微信公众号:shujujike,更全面的get无埋点及用户行为大数据分析的要点。
原创作者:杨永强 数极客 技术合伙人
网友评论