前言
目前趋势下,不管是客户端SDK还是小程序SDK,都在趋向于无埋点的数据收集方式。本文和大家分享下微信小程序无埋点数据收集的初体验。
1. 实现要点
确定页面生命周期方法:
通过app.js中的生命周期方法捕捉小程序的启动与关闭,目前应用的是:
// 标记为小程序展示
onShow: function () {
}
// 标记为小程序关闭
onHide: function () {
}
通过普通页面的方法生命周期方法捕捉页面的曝光,目前应用的是:
// 标记为页面出现
onShow: function () {
}
// 标记为页面关闭,onHide会在页面隐藏时调用,onUnload会在页面卸载时调用
onHide: function () {
}
onUnload: function () {
}
重写生命周期方法:
实现无埋点功能的核心,就是重写需要的生命周期方法,在方法中调用相应的数据生成方法并上报对应的日志,比如在页面的onShow方法中实现曝光日志的生成并发送,便实现了曝光事件的无埋点采集,具体的代码实现如下。
2. 代码实现
在这里我们以onLoad和onHide两个生命周期方法为例,分别对应页面的出现和关闭。
1. 在SDK的init方法中重写对应方法:
Page: {
init: function() {
// 获取当前页面对象
var currentPage = getCurrentPages()[getCurrentPages().length - 1];;
var pageName = currentPage.route;
// 重写生命周期方法
currentPage.onShow && !function() {
var b = currentPage.onShow;
// 重写方法
currentPage.onShow = function() {
// 曝光, PV开始
STAT.Event.stat('evt_show', pageName);
STAT.Event.stat('evt_pvBegin', pageName);
// 调用页面方法,修改this的指向
b.call(this, arguments);
}
}();
currentPage.onHide && !function() {
var b = currentPage.onHide;
currentPage.onHide = function() {
// PV结束
STAT.Event.stat('evt_pvEnd', pageName);
b.call(this, arguments);
}
}();
2. 在页面中引入SDK:
Page为例
// 引入SDK文件
var STAT = require('../utils/stat.js');
// 在onLoad方法中进行init
onLoad: function (options) {
STAT.Page.init();
}
完成初始化之后,页面的曝光等事件就可以被SDK收集到了
当我们进入一个新的页面,来看一下打印信息
不足
实际上在进行集成SDK的过程中开发者仍然要引入代码,并没有实现完全的无埋点,并且在进行点击等事件采集的时候,仍然需要开发者手动调用SDK统计接口。
所以无埋点的方案也在一步步优化,希望在后期实践中慢慢探索到更纯粹的无埋点收集方案。