uniapp多端需为各平台单独申请友盟appkey:ios/android分设bundle id与package name,微信/h5/支付宝等小程序各自创建对应应用,不可混用;初始化须运行时判断平台,避免编译剔除导致统计失效。

uni-app 多端怎么统一配友盟 AppKey?别混用,按平台拆开配
UniApp 一个项目打多端,但友盟不认“跨端”概念——它只认平台。iOS、Android、微信小程序、H5 各自独立申请 AppKey,混用会导致数据错乱或完全不上报。比如你把 iOS 的 appkey_ios 填进小程序环境,umtrack-wx 根本不认,静默失败,连错误都不抛。
- 微信小程序:去友盟「U-Mini Program」创建应用,填小程序 AppID,拿到
appkey(不是 iOS 那个) - H5:在「U-Web」下创建,填主域名(如
https://app.example.com),注意二级域名要提前在友盟后台「域名管理」里加白名单 - App 端(iOS/Android):必须分开建两个应用,iOS 填 Bundle ID,Android 填 package name;manifest.json 里对应填
appkey_ios和appkey_android - 支付宝/字节小程序:同理,各自进「U-Mini Program」选对应平台创建,拿专属 AppKey
main.js 里初始化友盟,为什么不能写死平台逻辑?
直接在 main.js 里用 #ifdef MP-WEIXIN 或 #ifdef APP-PLUS 判断平台再调 SDK 初始化,看似合理,实则埋雷:HBuilderX 编译时会剔除未命中条件的代码,但某些平台(比如 H5)根本不会执行这些块,导致统计完全失效,且毫无提示。
- 正确做法:封装一个
UmengTracker类,在构造时通过运行时判断平台(uni.getSystemInfoSync().platform或全局变量__mpWeixin、process.env.VUE_APP_PLATFORM),再动态引入对应 SDK - 小程序端必须用
umtrack-wx,不能用旧版umeng-sdk,否则useOpenid: true会失效 - App 端不要手写
plus.android反射调用——HBuilderX 3.9+ 已支持 manifest.json 自动注入,优先走配置
页面埋点 onShow/onHide 怎么写才不漏?别只靠 Vue 生命周期
很多人在页面 onShow 里调 this.$umeng.onPageStart('page-name'),结果发现首页没统计、tabBar 页面跳转丢失路径——因为 uni-app 的 onShow 在部分场景(如从后台切回、冷启动)触发时机不可靠,且 tabBar 页面切换时,非当前页的 onShow 不一定执行。
- 推荐方案:在
App.vue的onShow/onHide中监听全局路由变化,用getCurrentPages()拿到栈顶页面路径,自动上报 - 手动埋点页面名别写死字符串,统一从
pages.json或路由 meta 里读取,避免命名不一致导致后台事件散列 - 小程序端若开启
autoGetOpenid: true,务必提前在友盟后台「设置 → 应用信息」填好小程序 AppID 和 AppSecret,否则首次上报会卡住 2–3 秒
自定义事件 trackEvent 为什么总收不到?参数和 ID 是关键
this.$umeng.trackEvent('buy_click', { price: 99, sku_id: '1001' }) 看起来没问题,但后台就是查不到——大概率是事件 ID(第一个参数)在友盟控制台没提前创建,或大小写/下划线不一致。友盟要求事件 ID 必须先在「事件管理」中手工注册,且一旦创建就不能改名,否则历史数据断裂。
- 事件 ID 命名建议全小写 + 下划线(如
login_success),避免驼峰或空格 - 传参对象里的 key 名不能含点号(
user.info.id)、不能以数字开头,否则被丢弃 - H5 端需确保
request合法域名已添加https://umini.shujupie.com,否则请求被浏览器拦截,控制台 Network 面板里看不到任何 umeng 请求 - 调试时打开
debug: true,看 console 是否输出[Umeng] event tracked: buy_click,没这行说明根本没调用成功
最常被忽略的一点:小程序和 App 端的用户标识逻辑不同。小程序依赖 OpenID,App 端依赖设备 ID,如果你在 H5 和小程序之间做用户行为归因,得自己打通登录态并调 setUserId,友盟默认不关联。










