微信小程序统计误差 - wx.reportAnalytics简析

一、场景

场景是给外部小程序导流量,发现我们出去的量(点击事件UV)跟对方拿到的量(来源统计UV)差异很大, 对方称在【app onShow】里上报的事件统计。

  1. 经过对比数据,我们自己后端统计的用户统计跟微信统计的统计数据一致(点击事件)。

  2. 自测微信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)
  }
}

你可能感兴趣的:(微信小程序统计误差 - wx.reportAnalytics简析)