【求助】Cocos Creator 微信小游戏接入 ThinkingData 后,新增/活跃用户比微信后台少约 10%,如何对齐统计口径?

我们有一款使用 Cocos Creator 3.8.4 开发的微信小游戏,目前接入了 ThinkingData(TD)进行数据分析,SDK 版本为 3.6.1。

最近在对比微信公众平台和 TD 看板的数据时,发现 TD 统计的新增用户数、活跃用户数始终比微信后台少。

因为目前项目用户量不算大,所以不排除绝对差值不大、换算成比例后显得比较高。不过制作人反馈,他之前公司的一些项目,第三方数据平台与微信后台的误差可以控制在 1% 左右,因此怀疑我们这里可能存在初始化时机、埋点方式或者统计口径的问题。

数据差异示例

之前某一天的数据如下:

  • 微信新增用户:581
  • TD 新增用户:550
  • 新增用户差异约:5.3%
  • 微信活跃用户:739
  • TD 活跃用户:686
  • 活跃用户差异约:7.2%

最近几天观察下来,部分日期的误差会接近 10%。

当前 TD 初始化方式

我们已经将 TD 初始化放在第一个 Load 场景组件的 onLoad() 中,并且是 onLoad() 里最先执行的业务逻辑之一:

onLoad() {
    super.onLoad();

    // 微信端进入 Load 场景后立即初始化 TD
    // 不等待隐私、广告、后台配置或其他异步请求
    this.initThinkingDataEarly();

    // 后续才执行其他加载逻辑
}

目前微信端没有等待隐私授权,TD 初始化也不依赖登录、广告 SDK、后台配置等异步流程。

TD 初始化完成后,会由 SDK 自动上报 ta_mg_show 。理论上,这已经是我们在 Cocos 业务代码层面能够做到的比较早的初始化时机。

当前看板统计方式

目前大致按以下方式统计:

  • 活跃用户:当天触发事件的去重用户数,主要参考 SDK 自动上报的 ta_mg_show
  • 新增用户:触发事件且 is_new_user=true 的去重用户数
  • 时区统一使用东八区
  • 游戏名称、渠道均进行了相同筛选

我们也尝试过使用“任意事件的触发用户数”,数据变化只有个位数,没有明显缩小与微信后台的差距。

我们目前的猜测

我们怀疑微信后台和 TD 的用户统计起点可能不同。

例如:

  1. 微信是否在用户点击广告、卡片或小游戏入口并开始拉起游戏时,就已经将其计入访问/活跃用户?
  2. 如果玩家点击后,在小游戏代码包、引擎或首场景初始化完成前退出、崩溃或者加载失败,微信是否仍然计数?
  3. TD 必须等 JavaScript 运行,并且 TD SDK 初始化成功后才能上报事件。这部分未成功进入到业务代码的用户,是否就是主要差值来源?
  4. Cocos Creator 第一个场景的 onLoad() ,相对于微信开始统计用户的时间点,是否已经晚了一段?
  5. 是否应该在 Cocos 构建生成的入口脚本、启动脚本或者 game.js 阶段初始化 TD,而不是等第一个场景的 onLoad() ?这样做是否安全,会不会受到构建覆盖影响?

想请教大家的问题

想请教有类似接入经验的开发者:

  1. 微信公众平台的“新增用户”和“活跃用户”,准确统计起点分别是什么?
  2. TD 的 ta_mg_show 触发用户数,是否可以直接与微信后台活跃用户进行对比?
  3. 微信新增用户和 TD 的 is_new_user=true ,两者是否本来就不是同一口径?
  4. Cocos Creator 微信小游戏中,TD 放在首场景 onLoad() 初始化是否足够早?
  5. 有没有必要把 TD 初始化继续提前到引擎或小游戏入口脚本?
  6. 微信开发者工具能否准确模拟、观察玩家点击小游戏入口到首场景执行之间的过程,还是必须在真机上验证?
  7. 大家实际项目中,微信后台与 TD、神策等第三方平台的用户误差通常是多少?1% 是否是普遍可以达到的水平?
  8. 如果大家的误差可以控制在 1% 左右,具体使用的是哪个事件和统计口径?

目前我们认为,10% 的差距可能同时包含以下因素:

  • 微信与 TD 的统计口径不同
  • 用户在 TD 初始化完成前退出或加载失败
  • 微信旧版本代码包缓存,不同版本埋点字段不一致
  • TD 网络上报失败或事件尚未成功发送
  • 微信与 TD 对新增用户的身份识别方式不同
  • 数据延迟、去重身份及时区边界差异

但暂时还没有足够证据判断哪一项是主要原因。

如果有做过 Cocos Creator 微信小游戏,并且成功将微信后台与第三方数据平台误差控制在较低范围的朋友,希望能分享一下初始化位置、事件配置、看板口径和排查方法,非常感谢!