uni.report是uni-app官方轻量级埋点接口,调用平台原生统计能力(如wx.reportAnalytics),不受白名单限制、不触发隐私弹窗、不占网络配额、数据直送uni统计后台;推荐因其跨端兼容、审核合规、稳定可靠。

uni-app 小程序数据埋点,优先走 uni.report 或官方 uni-stat 模块,别自己封装 request 上报——它不跨端、不兼容小程序审核要求,且容易被拦截或丢包。
uni.report 是什么?为什么推荐用它
uni.report 是 uni-app 官方提供的轻量级埋点接口,专为小程序平台优化,已在微信、支付宝、百度等主流小程序中预置上报通道。它不依赖第三方 SDK,也不走 uni.request,而是调用平台原生统计能力(如微信的 wx.reportAnalytics),因此:
- 不受小程序域名白名单限制
- 不触发用户隐私弹窗(无需额外申请 scope)
- 不占用网络请求配额
- 数据直接进 uni 统计后台(https://www.php.cn/link/e6df50e20158a9ea2c49817409f3ad38)
常见误用:uni.report('page_view', { page: 'home' }) 传参必须是扁平对象,不能嵌套,也不能含 null 或 undefined 值,否则整条事件会被丢弃。
uni-stat 模块怎么启用和配置
uni-stat 是 uni-app 内置的完整统计模块,支持自动 PV/UV、页面停留时长、自定义事件,但需手动开启并注意平台差异:
- 在
manifest.json中打开开关:"uniStatistics": { "enable": true }(HBuilderX 可视化操作更稳妥) - 小程序端必须在
mp-weixin(或对应平台)节点下单独配置白名单:tongji.dcloud.io加入 request 合法域名 - 仅发行版(非调试版)才会上报;H5 和 App 端行为不同:H5 会 fallback 到
uni.request,App 端则走原生插件 - 自动埋点默认只覆盖非 tabBar 页面;tabBar 页面需手动调用
uniStat.trackPageStart/uniStat.trackPageEnd
手动埋点时最容易踩的三个坑
即使用了 uni.report 或 uni-stat,业务层调用仍常出错:
-
生命周期时机错位:在
onLoad里调uni.report可能因页面未 ready 导致事件丢失;应改用onShow或加setTimeout微延迟(10ms 足够) -
事件名含非法字符:只允许字母、数字、下划线;
'user_login_success'✅,'user-login-success'❌(微信侧直接静默丢弃) -
参数值类型越界:字符串长度超 256 字符、数字超出 ±9007199254740991、布尔值写成字符串
"true"—— 全部不报错但不上报
第三方 SDK(如友盟)集成要注意什么
若必须用友盟等第三方,关键不是“怎么引入”,而是“怎么隔离平台”:
- 用条件编译包裹 SDK 初始化:
#ifdef MP-WEIXIN/#ifdef APP-PLUS,避免 H5 环境报require is not defined - 不要在
main.js全局Vue.prototype挂载,而应在App.vue的onLaunch中按平台判断后初始化 - 禁止混用:
uni.report和友盟同时上报同一事件,会造成数据重复和归因混乱 - 微信小程序中,友盟的
event方法底层仍走wx.reportAnalytics,所以命名规则、参数限制和uni.report完全一致
真正难的不是调用接口,而是让所有页面、所有跳转路径、所有 tab 切换都稳定触发埋点——这需要路由拦截 + 生命周期补全 + tabBar 特殊处理三层兜底,漏掉任意一层,数据就断档。


















