所谓埋点就是在应用中特定的流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑,包括访问数(Visits),访客数(Visitor),停留时长(Time On Site),页面浏览数(Page Views)和跳出率(Bounce Rate)。这样的信息收集可以大致分为两种:页面统计(track this virtual page view),统计操作行为(track this button by an event)。
从技术层面上,埋点可分为代码埋点、可视化埋点、无埋点这三种
1、代码埋点
代码埋点出现的时间很早了,在 Google Analytics 年代,就已经出现了类似的方案了。目前,国内的主要第三方数据分析服务商,如百度统计、友盟、TalkingData 等都提供了这一方案。Sensors Analytics 也一样提供了** iOS、Android、Web** 等主流平台的代码埋点方案。
它的技术原理也很简单,在APP或者界面初始化的时候,初始化第三方数据分析服务商的SDK(Software Development Kit),然后在某个事件发生时就调用SDK里面相应的数据发送接口发送数据。例如,我们想统计APP里面某个按钮的点击次数,则在APP的某个按钮被点击时,可以在这个按钮对应的 OnClick 函数里面调用SDK提供的数据发送接口来发送数据。
第一个例子是在使用者的某个 Android APP 里面,统计某个由 Activity 构成的页面的访问次数,下面是友盟官方给出的例子:
super.onResume();
MobclickAgent.onPageStart("SplashScreen"); //统计页面(仅有Activity的应用中SDK自动调用,不需要单独写。"SplashScreen"为页面名称,可自定义)
MobclickAgent.onResume(this); //统计时长
}
public void onPause() {
super.onPause();
MobclickAgent.onPageEnd("SplashScreen"); // (仅有Activity的应用中SDK自动调用,不需要单独写)保证 onPageEnd 在onPause 之前调用,因为 onPause 中会保存信息。"SplashScreen"为页面名称,可自定义
MobclickAgent.onPause(this);
}
第二个例子稍微复杂点,它不再是统计页面访问这样一个默认的事件,而是统计一个自定义事件。例如,一个电商APP,在用户点击“购买”按钮时,想统计“购买”这个自定义事件的相应信息,那么,可以使用下面的代码:
HashMap<String,String> map = new HashMap<String,String>();
map.put("type","book");
map.put("quantity","3");
MobclickAgent.onEvent(mContext, "purchase", map);
优点:
(1)使用者控制精准,可以非常精确地选择什么时候发送数据
(2)使用者可以比较方便地设置自定义属性、自定义事件,传递比较丰富的数据到服务端。
缺点:
(1)埋点代价比较大,每一个控件的埋点都需要添加相应的代码,不仅工作量大,而且限定了必须是技术人员才能完成
(2)更新的代价比较大,每一次更新埋点方案,都必须改代码,然后通过各个应用市场进行分发,并且总会有相当多数量的用户不喜欢更新APP,这样埋点代码也就得不到更新了
(3)所有前端埋点方案都会面临的数据传输时效性和可靠性的问题了,这个问题就只能通过在后端收集数据来解决了
2、可视化埋点
可视化埋点是指开发人员除集成采集 SDK 外,不需要额外去写埋点代码,而是由业务人员通过访问分析平台的 圈选 功能来“圈”出需要对用户行为进行捕捉的控件,并给出事件命名。圈选完毕后,这些配置会同步到各个用户的终端上,由采集 SDK 按照圈选的配置自动进行用户行为数据的采集和发送。
如下是腾讯移动分析的可视化埋点界面优点:
(1)可视化埋点很好地解决了代码埋点的埋点代价大和更新代价大两个问题。但是,可视化埋点能够覆盖的功能有限,目前并不是所有的控件操作都可以通过这种方案进行定制
(2)埋点只需业务同学接入,无需开发支持
缺点:
(1)无法做到自定义获取数据,可视化埋点覆盖的功能有限;
(2)企业针对SDK开发难度相比代码埋点大
(3)仅支持客户端行为
3.无埋点
无埋点是指开发人员集成采集 SDK 后,SDK 便直接开始捕捉和监测用户在应用里的所有行为,并全部上报,不需要开发人员添加额外代码;或者是说用户展现界面元素时,通过控件绑定触发事件,事件被触发的时候系统会有相应的接口让开发者处理这些行为。现在市面上主流无埋点做法有两种,一种是预先跟踪所有的渲染信息,一种是滞后跟踪的渲染信息。
数据分析师/数据产品 通过管理后台的圈选功能来选出自己关注的用户行为,并给出事件命名。之后就可以结合时间属性、用户属性、事件进行分析了。所以无埋点并不是真的不用埋点了。
优点:
(1)由于采集的是全量数据,所以产品迭代过程中是不需要关注埋点逻辑的,也不会出现漏埋、误埋等现象。
(2)无埋点方式因为收集的是全量数据,可以大大减少运营和产品的试错成本,试错的可能性高了,可以带来更多启发性的信息。
(3)无需埋点,方便快捷
(4)减少了因为人员流动带来的沟通成本
(5)无需开发,业务人员埋点即可;
(6)支持先上报数据,后进行埋点
缺点:
(1) 缺点与可视化埋点相同,未解决个性化自定义获取数据的问题,缺乏数据获取的灵活性;
(2) 企业针对SDK开发难度较大,一般由数据分析企业研发提供,使用第三方提供的埋点方案,有如下缺陷:
a、数据源丢失,应用上报的数据上传至第三方服务端,可能造成
企业泄密或用户的关键数据丢失;
b、供应商数据丢包问题,无法根据应用特性进行改善
(3)无埋点采集全量数据,给数据传输和服务器增加压力
(4)仅仅支持客户端