什么是无痕埋点?

所谓的”无痕埋点”,其实就是通过技术手段,无差别的记录用户在产品中的行为,当有一天突然想对某一个控件做点击分析时,不再需要开发手动添加数据采集信息。因为从部署埋点方案的时候,就一直在收集所有的用户的数据了。用户的数据并不是分析需求产生的那一刻才有的。无痕埋点在无差别的记录用户所有行为,而实际的埋点结果产出取决于BI工程师对无痕埋点数据的清洗。

从技术角度总结以往埋点项目结果产出困难的原因,这些也是无痕埋点方案想要解决的核心问题。

  • 通过代码手动埋点比较原始,出错概率较高。
  • 埋点链路较长,出现错埋漏埋需要重新发布
  • 埋点数据准确性无法校验

所以,在项目上使用无痕埋点来解决项目链路过长的问题的方法是将埋点数据的产生过程分成两个并行的部分。将数据的采集过程前置,不再依赖运营和产品经理的需求产出。现有全量用户数据,再由运营和产品分析数据产出结果。

0x02 移动端无痕埋点如何实现?

移动端埋点的方案以在Android系统上实现为例,关键在于解决2个问题:

  • 如何统一标识控件
  • 统一拦截用户操作行为。这里说的用户操作主要还是用户的单击事件。

2.1 如何标识控件

为了自动生成事件标识,我们需要获取每个控件自身的ID、类名以及位于所属父组件的Index等特征信息,并逐级向上遍历找到根节点。约定控件标识的生成规则为 /root/ClassName:id/ClassName:id,以某一个业务界面的扫一扫按钮为例,寻找它到root节点的控件路径,它的控件标识字符串应该是 /root/RelativeLayout:-1/FrameLayout:1997209645/RelativeLayout:-1/RelativeLayout:1997209836/LinearLayout:1997209965/TextView:1997209967,并通过md5算法将这个标识字符串生成为XPATH就是我们想要的控件标识。当后台上报数据中包含1e3cdc9499fac8088220756a46c85599的点击时。我们就认为是扫一扫控件被点击了。

2.2 如何统一拦截单击事件

还是以Android端上的实现为例,如何统一拦截用户的单击事件呢?先看如何实现一个单击操作的响应,在Android上一般的做法是针对View设置一个单击的监听。

1
/**
 * Interface definition for a callback to be invoked when a view is clicked.
 */
public interface OnClickListener {
    /**
     * Called when a view has been clicked.
     *
     * @param v The view that was clicked.
     */
    void onClick(View v);
}

那么有没有办法统一把所有的单击事件都替换掉呢?在运行时!业务开发的工程师还是按照原生Android系统的api实现对单击事件的响应,埋点SDK在运行时统一替换所有的View.OnClickListener,将其替换成原有View.OnClickListener的包装。当执行AutoTraceListenerWrapper的时候实际执行的还是原有Listener的单击事件,同时又能统一拦截所有的单击事件。

1
public class AutoTraceListenerWrapper implements View.OnClickListener {

    private View.OnClickListener mClickListener;

    public AutoTraceListenerWrapper(View.OnClickListener listener) {
        mClickListener = listener;
    }

    @Override
    public void onClick(View view) {
        onViewClick(view);

        if (mClickListener != null) {
            mClickListener.onClick(view);
        }
    }
}

那么如何统一替换所有的View的单击监听呢?只需要遍历安卓视图结构的View Tree,使用反射机制替换掉所有的原生OnClickListener就可以了。

0x03 总结

埋点问题是不能通过一个方案适配所有业务场景的,不同的场景下需要选择不同的埋点方案。无痕埋点方案针对的是用户的简单用户行为事件,比如如何规范采集用户的点击事件。例如针对页面跳转的事件统计还是需要你单独埋点。埋点数据能不能最终完美的呈现依赖的不单单是技术方案,还有更多的是数据规范的问题。例如在面对运行时才能获知的业务信息时,如何使用埋点技术将需要的业务信息做统一的上报,是另一个重要的关键点。例如在做数据清洗时如何建立规范的数据中间表?无痕埋点只是获取完整埋点数据的第一步。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值