一、场景
场景是给外部小程序导流量,发现我们出去的量(点击事件UV)跟对方拿到的量(来源统计UV)差异很大, 对方称在【app onShow】里上报的事件统计。
-
经过对比数据,我们自己后端统计的用户统计跟微信统计的统计数据一致(点击事件)。
-
自测微信API上报事件来源统计: APP生命周期上报【 app:onShow】上报统计量(uv)为A, 跟 页面的生命周期 (测试页面为首页)) 【page: onReady】 上报统计量(uv)定义为B, 如果按期预期A应该约等于B, 但是实测 B ~= 4*A, 数据相差4倍。
app.js
onShow (options) {
wx.reportAnalytics('track_source', {
source: 'A'
})
}
}
pages/index.js
onReady () {
// 微信自定义事件分析统计
wx.reportAnalytics('track_source', {
source: 'B'
})
}
二、分析
分析:为何这么大差距? onshow事件没有被触发? 微信的api没上报成功?
然后在同样的两个位置加上了阿拉丁的事件分析: 结果还是 A(阿拉丁app onShow上报的事件统计)*3.5 = B(阿拉丁page onReady上报的事件统计)
翻小程序的线上错误日志:“app:onshow : app.aldstat.sendEvent(阿拉丁的统计方法) 错误”, 怀疑app.aldstat在apponshow的时候还没初始化, 于是做了一个延迟上报处理
setTimeout(() => {
let app = getApp()
app.aldstat.sendEvent('普通来源show-' + sourceQuery, '来源')
}, 100)
上线之后发现数据A约等于B了,说明延迟100毫秒生效了。 然而微信api上报还是差4倍(没有加setTimeout延迟上报),证明微信自定义分析api上报这个方法在app.onshow事件中直接调用(wx.reportAnalytics), 存在数据遗漏问题, 怀疑在调用onShow的时候wx.reportAnalytics可能也存未初始化完成的问题。
三、 解决方案
延迟1秒上报数据
onShow (options) {
setTimeout(() => {
wx.reportAnalytics('track_source', {
source: 'A'
})
}, 1000)
setTimeout(() => {
// 阿拉丁统计
let app = getApp()
app.aldstat.sendEvent(sourceQuery, 'A')
}, 1000)
}
}
网友评论