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