uni-app中友盟统计需分端接入:App端用插件市场umeng-statistics插件;H5端在index.html引入JS SDK并挂载;小程序需专用SDK及独立AppKey。
直接用 uni-app 官方推荐的插件市场方案最稳,别自己手动引 JS。iOS 和 Android 原生层必须走原生 SDK,H5 端才能用 JS 版——混着用会漏数据。
uni-app 插件市场安装 umeng-statistics 插件,它会自动注入原生 SDK 并桥接 uni.$um 方法index.html 中引入友盟 JS SDK,并挂载到 window._czc 或用 uni.getSystemInfoSync().platform === 'h5' 分支处理初始化失败基本是配置没对上,不是代码问题。尤其是 iOS 上容易卡在白屏或报 UMConfigure is not initialized 错误。
manifest.json → App SDK 配置 → 友盟统计 中填入正确的 appkey 和 channel,且必须勾选「启用」;漏勾选会导致原生层完全不加载android:name 是否写在 application 标签下(不是 activity),否则 UMConfigure.init 不触发logcat 或 Xcode 控制台里有没有 UMDebug 输出别在 onLoad 里直接调 uni.$um.onPageStart,生命周期执行顺序和页面栈管理会让它错乱。要用 onShow + 页面路径判重。
pages.json 的每个页面配置 style.navigationBarTitleText,然后在 onShow 中取 getCurrentPages().pop().route 当做 pageId 传给 uni.$um.onPageStart
onHide 里调 onPageEnd —— 页面被遮挡(比如弹窗、tabBar 切换)也会触发,导致提前结束;应只在真正离开页面时(如跳转前)手动调一次uni.$um.onEvent,事件名别带空格或特殊字符,后端解析时会截断;参数值建议用字符串或数字,别传对象(SDK 会丢掉)不是代码写错了,是各端统计口径天然不同:App 端按 Activity 生命周期,H5 按路由变化,小程序按 Page 实例。强行“统一”反而失真。
uni.addInterceptor 的路由拦截,或改用 vue-router 的 afterEach 钩子补全uni.$um.profileSignIn,H5 用 _czc.push(['_setAccount', uid]),两者字段名、时机、有效期都不一样,别指望后端自动合并UMConfigure.setLogEnabled(true)),看每条日志是否打出、时间戳是否合理,比看后台报表准得多跨端埋点最难的从来不是怎么写,而是接受“同一套逻辑在不同端必然产出不同数据”。关键路径先保 App 和小程序,H5 单独校验,别试图用一个 if 分支打天下。