You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Page({data: {beginTime: 0,endTime: 0},onShow: function(){// Do something when page show.this.setData({beginTime: newDate().getTime()})},onHide: function(){// Do something when page hide.letstayTime=newDate().getTime()-this.beginTime;// 这个就是用户在这个页面的停留时间了},})
App({onLaunch(options){// Do something initial when launch.},onShow(options){// Do something when show.},onHide(){// Do something when hide.},onError(msg){console.log(msg)},globalData: 'I am global data'})
varoldRequest=wx.requestwx.request=function(e){// doSomething();console.log('请求拦截操作...')oldRequest.call(this,e);// 调用老的request方法}// 结果报错了:// TypeError: Cannot set property request of [object Object] which has only a getter
某些情况下我们需要对小程序某些用户的行为进行数据进行统计,比如统计某个页面的UV,
PV等,统计某个功能的使用情况等。好让产品对于产品的整个功能有所了解。
在网页里,我们很多人都用过谷歌统计,小程序里也有一些第三方数据统计的库, 比如腾讯的MTA等等。
但是,第三方的数据统计库要么功能太简单,满足不了需求,要么就是要收费。(留下了贫穷的泪水。)
等等,又不是你出钱,怕啥? 贵一点就贵一点呀。
嗯,说的没错。但是,公司团队内部想实现一套完整的自己的数据统计系统以满足自己的需求。所以,还是没有用第三方的。
所以,具体要统计些啥?
产品经理
开发自己
针对产品经理的需求,我们可以知道,Ta想要的是就是数据统计要实现的功能。对于开发来说,我们关注的更多就是错误统小程序性能这块的东西。
好,到这里,我们需求是明白了。就是要实现一套既能统计普通的埋点数据,也要能统计到小程序里一些特殊触发的事件,比如appLaunch, appHide 等,还要可以统计错误。
好,那先来看看如何实现产品的需求吧
用户进入小程序可以在 小程序 onLaunch 回调里拿到参数 的scene 值,这样就可以知道用户是怎么进入小程序的了。小case, 难不到我。
嗯,第一个需求实现了,那如何统计第二个呢?如何统计某个页面的停留时间呢?
这也难不倒我,用户在进入页面时会触发onShow 事件, 同样,在离开页面(或者切后台时)会触发onHide事件,我只需要在onShow里记录一下时间,同时在onHide 里也记录一下时间,把两个时间一减就可以了。
等等,这样确实实现了需求,万一产品要统计所有也面的停留时长? 那我们岂不要在每一个页面都这样写一遍?有没有更好的方法呢?
好,接下来就是数据统计实现的要点了,即拦截微信原生事件,这样可以在某个特殊事件触发时,做一些我们统计的事情。同时,还要拦截微信发生网络请求的方法,这样可以拿到网络请求相关的数据,最后,为了能统计到错误,还需要拦截微信发生错误的方法。
1.特殊事件的监听
App(Object object)
注册小程序。接受一个
Object
参数,其指定小程序的生命周期回调等。App() 必须在 app.js 中调用,必须调用且只能调用一次。不然会出现无法预期的后果。
假如我们要在小程序onLaunch 时打印一句hello Word,我们有哪些方法实现?
方法1:
直接写在onLaunch方法里
方法2:
使用 monkey patch方法 猴子补丁(monkey patch)
举个栗子,假如我们在console.log 方法里都先打印出当前的时间戳,我们可以这样:
同理,我们针对onLaunch 进行猴子补丁
通过上面的方法,我们可以拦截了 App 方法注册的一些全局方法,比如 onLaunch , onShow, onHide, 和Page 注册的事件如 onShow, onHide, onLoad, onPullDownRefresh, 等页面注册事件。
2.网络请求的监听
思路: 拦截微信的请求事件。
疑惑:为什么要使用替换整个wx对象的方法呢? 不直接用我们的request 方法 替换 wx.request 方法
3.错误的监听
3.1 拦截App里注册的 onError事件
3.2 拦截 conole.error
至此,我们已经有能力在小程序发起请求时,发生错误时,生命周期或者特殊函数回调时,我们都能在里面做一些我们想要的数据统计功能了。
说了这么多大家估计也看累了。鉴于篇幅,具体的代码就不在这里贴了。
最终实现的数据统计模块大致实现了以下功能:
整个统计代码的配置文件如下:
具体上报时,上报的数据结构大致长这样:
你们是如何实现小程序数据统计的呢? 欢迎在issue里交流~~
The text was updated successfully, but these errors were encountered: