终极:全方面的采集神器 什么是全埋点?
优采云 发布时间: 2020-08-30 21:10全方位的采集工件,什么是全方位的采集点?
完全埋入点,也称为无埋入点,无代码埋入点和自动埋入点. 完全掩埋点是指预先采集所有用户行为数据,然后根据实际分析需要从中提取行为数据.
全埋点采集事件主要包括以下四种类型:
•$ AppStart事件: 指应用启动,包括冷启动和热启动.
•$ AppEnd事件: 指App退出,包括正常退出,进入后台,App崩溃和被强制终止.
•$ AppViewScreen事件: 是指App页面浏览,对于Android,是指切换Activity.
•$ AppClick事件: 指被单击的App控件.
在采集的四个事件中,采集最重要和最困难的是$ AppClick事件. 因此,整个问题基本上都围绕着采集$ AppClick事件.
总体而言,整体解决方案是找到被点击视图的点击处理逻辑(也称为原创处理逻辑),然后使用某些技术原理“拦截”原创处理逻辑,或在原创的“插入”逻辑之前或之后的相应埋点代码,以达到自动埋点的效果.
关于如何自动“拦截” View的原创单击处理逻辑,通常指的是Android系统中的View单击事件处理机制. 至于如何自动“插入”嵌入的代码,基本上是指编译器对Java代码的处理流程:
JavaCode-> .java-> .class-> .dex
选择在处理的不同阶段“插入”代码,并且所使用的技术或原理也有所不同,因此存在很多用于掩埋点的解决方案.
面对如此众多的全埋方案,我们应该如何选择?
选择完全掩埋的解决方案时,有必要综合考虑效率,兼容性和可伸缩性.
•效率
所有掩埋点的基本原理实际上是使用某些技术来代理(或调用)某些方法(单击“视图”时的处理逻辑),或“插入”代码. 根据“何时代理或插入代码”的条件,Android的全点技术可以大致分为以下两种方式:
静态代理
所谓的静态是指在通过Gradle插件进行编译时“插入”或修改代码(.class文件). 例如,AspectJ,ASM,javassist,AST和其他解决方案都可以通过这种方式实现. 稍后将介绍的第四到第七种解决方案是静态代理.
这些方法的时间可以参考下图:
动态代理
所谓的动态是指代码运行时的代理. 例如,我们更常见的代理View.OnClickListener,Window.Call-back,View.AccessibilityDelegate和其他程序都是以这种方式进行的. 稍后描述的第一个计划到第三个计划都是动态代理.
不同的解决方案具有不同的处理和操作效率,同时,App的沉浸度以及对App整体性能的影响也不同. 在整理方面,静态代理显然优于动态代理. 这是因为静态代理的“操作”是在应用的编译阶段处理的,不会对应用的正常业务(应用运行时)逻辑产生太大影响.
•兼容性
随着Android生态系统的快速发展,Android系统本身以及与Android App开发相关的组件和技术都在快速发展和迭代,这也给全点解决方案的开发带来了一定的困难. 例如,不同的Android应用程序具有不同的开发语言(Java,Kotlin),不同的Java版本(Java7,Java8),不同的开发IDE(Eclipse,Android Studio)和不同的开发方法(本机开发,H5). ,混合开发),不同的第三方开发框架(React Native,APICloud,Weex),不同的Gradle版本以及Lambda,D8,Instant Run,DataBinding,Fragment等,将为整个站点问题带来许多兼容性方面的问题.
•可扩展性
随着业务的发展和数据分析要求的不断提高,即使对于所有埋藏点,也提出了更高的采集要求. 一方面,要求能够自动掩埋所有点(采集范围),同时要求具有更完善的采集控件(采集自定义). 例如,如何将自定义属性添加到控件?如果您不想采集,该如何处理控件的click事件?如果您不想采集如何处理某种控件类型(ImageView)的click事件?如果页面(Activity)如何处理采集上所有控件的单击事件?...任何掩埋所有点的方案都有其优点和缺点. 没有通用的完美解决方案. 针对不同的应用场景,选择最合适的数据采集解决方案.
注意: 此内容来自Shence Data User Behavior Insight Research Institute制作的“ Android Full-Buried Point Solution”白皮书. 要查看完整的白皮书,请单击“ Android Full-Bound Point解决方案”
有关白皮书,报告,干货和案例的更多信息,请遵循“ Shence Data”和“ User Behavior Insight Institute”的官方说明〜