更新记录
1.0.0(2026-07-31) 下载此版本
初始版本
平台兼容性
uni-app(4.31)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | 5.0 | 1.0.0 | 12 | 1.0.0 | 12 | 1.0.0 |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(4.61)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 | 微信小程序 |
|---|---|---|---|---|---|---|---|---|
| - | - | 5.0 | 1.0.0 | 12 | 1.0.0 | 12 | 1.0.0 | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | √ | √ |
xyz-umeng-analytics
友盟移动统计 UTS 插件,支持 Android、iOS、HarmonyOS 三端。
SDK 版本
| 平台 | SDK | 版本 |
|---|---|---|
| Android | com.umeng.umsdk:common | 9.9.2 |
| Android | com.umeng.umsdk:asms | 1.8.7 |
| iOS | UMCommon | 7.6.4 |
| iOS | UMDevice | 3.6.0 |
| Harmony | @umeng/common | 1.1.12 |
| Harmony | @umeng/analytics | 1.2.12 |
接入步骤
1. 友盟后台配置
在 友盟官网 分别创建 Android、iOS、Harmony 应用,获取各端独立的 AppKey。
2. 初始化(隐私合规)
本插件支持两种初始化方式:
方式一:自动初始化 + 手动完成首次初始化(推荐)
插件已在各端的应用生命周期回调中实现了初始化逻辑:
- Android:在
UTSAndroidHookProxy.onCreate中读取AndroidManifest.xml的UMENG_APPKEY/UMENG_CHANNEL完成preInit,若已同意隐私协议则自动init - iOS:在
UTSiOSHookProxy.applicationDidFinishLaunchingWithOptions中读取info.plist的umconfig.appKey/umconfig.channel,若已同意隐私协议则自动初始化 - Harmony:在
UTSHarmony.onAppAbilityCreate中读取AppScope/resources/rawfile/umconfig.json完成preInit,若已同意隐私协议则自动init
此时开发者只需处理首次启动时的隐私弹窗,在用户同意后调用一次 initSDK 即可。
参考 uni-app x 隐私合规文档,在 App.uvue 中:
<script setup lang="uts">
import * as Umeng from "@/uni_modules/xyz-umeng-analytics"
onLaunch((res: OnLaunchOptions) => {
// 调试时开启日志,发布时删除或注释掉此行
Umeng.setLogEnabled(true)
// #ifdef APP
uni.getPrivacySetting({
success(res) {
if (res.needAuthorization) {
// 用户未同意隐私政策,弹出隐私弹窗页面
uni.openDialogPage({
url: '/pages/privacy'
})
// 在隐私页面中用户点击同意后调用 Umeng.initSDK(appKey, channel)
// 非首次启动且已同意隐私协议时,插件会自动读取配置文件中的 appKey 和 channel 并完成初始化
}
}
})
// #endif
})
</script>
隐私弹窗页面中,同意按钮需使用 button 组件并设置 open-type="agreePrivacyAuthorization":
<template>
<view class="privacy-dialog">
<text>请阅读并同意《隐私政策》</text>
<button class="button" type="primary" open-type="agreePrivacyAuthorization" @click="agree">同意</button>
<button class="button" @click="reject">不同意</button>
</view>
</template>
<script setup lang="uts">
import * as Umeng from "@/uni_modules/xyz-umeng-analytics"
function onAgree() {
// 用户点击同意后初始化友盟
Umeng.initSDK(appKey, channel)
// 关闭弹窗
uni.closeDialogPage({})
}
function onReject() {
// 不同意则关闭弹窗,不初始化
uni.closeDialogPage({})
}
</script>
方式二:完全手动初始化
如果不依赖插件的自动初始化(例如需要自定义初始化时机),可手动调用全部流程:
<script setup lang="uts">
import * as Umeng from "@/uni_modules/xyz-umeng-analytics"
onLaunch((res: OnLaunchOptions) => {
// 1. 手动预初始化(iOS 端为空操作)
Umeng.preInit(appKey, channel)
// 2. 调试时开启日志,发布时删除或注释掉此行
Umeng.setLogEnabled(true)
// 3. 判断隐私协议并初始化
// #ifdef APP
uni.getPrivacySetting({
success(res) {
if (res.needAuthorization) {
uni.openDialogPage({ url: '/pages/privacy' })
} else {
Umeng.preInit(appKey, channel)
Umeng.initSDK(appKey, channel)
}
}
})
// #endif
})
</script>
注意:三端必须使用各自独立的 AppKey,不要混用。配置文件中已设置好各端 AppKey 后,代码中调用
initSDK时也需传入对应的 AppKey:
// #ifdef APP-ANDROID
const appKey = "your_android_appkey"
// #endif
// #ifdef APP-IOS
const appKey = "your_ios_appkey"
// #endif
// #ifdef APP-HARMONY
const appKey = "your_harmony_appkey"
// #endif
const channel = "your_channel"
3. 自定义基座
本插件包含三方原生 SDK 依赖和权限配置等资源变更,必须打自定义基座后才能正常运行。标准基座无法验证。
公共 API(三端统一)
以下 API 三端统一,通过 import * as Umeng from "@/uni_modules/xyz-umeng-analytics" 引入后调用。
初始化
| 方法 | 说明 |
|---|---|
preInit(appKey, channel) |
预初始化(隐私同意前调用,iOS 端空操作) |
initSDK(appKey, channel) |
正式初始化(用户同意隐私政策后调用) |
setLogEnabled(enabled) |
设置是否输出 SDK 日志,默认 false。调试时设为 true,发布时不调用或注释掉 |
自定义事件
| 方法 | 说明 |
|---|---|
onEvent(eventId) |
简单计数事件 |
onEventObject(eventId, params) |
多参数事件,params 为 UTSJSONObject |
账号统计
| 方法 | 说明 |
|---|---|
onProfileSignIn(id) |
用户登录 |
onProfileSignInWithProvider(provider, id) |
带来源的用户登录(provider 不超过 32 字符,id 不超过 64 字符) |
onProfileSignOff() |
用户登出 |
iOS/Android 共有 API
以下 API 在 iOS 和 Android 端可用,Harmony 端不支持,需通过条件编译使用:
// #ifdef APP-ANDROID || APP-IOS
Umeng.onEventWithLabel("purchase", "vip")
Umeng.onPageStart("home")
// ... 页面展示中 ...
Umeng.onPageEnd("home")
// #endif
自定义事件
| 方法 | 说明 |
|---|---|
onEventWithLabel(eventId, label) |
带标签的计数事件 |
onEventValue(eventId, params, value) |
数值型计算事件 |
页面统计
| 方法 | 说明 |
|---|---|
onPageStart(pageName) |
页面进入,需与 onPageEnd 成对调用 |
onPageEnd(pageName) |
页面退出,需与 onPageStart 成对调用 |
setAutoPageEnabled(enabled) |
自动/手动页面采集切换 |
用户属性
| 方法 | 说明 |
|---|---|
userProfile(key, value) |
设置用户自定义属性(键值对) |
userProfileMobile(mobile) |
设置预置用户属性(电话号码) |
userProfileEMail(email) |
设置预置用户属性(邮箱) |
Android 专属 API
以下 API 仅在 Android 端可用:
// #ifdef APP-ANDROID
Umeng.getOaid((oaid: string) => { console.log(oaid) })
Umeng.getUMIDString()
// #endif
| 方法 | 说明 |
|---|---|
setEncryptEnabled(enabled) |
日志加密开关,默认 false |
setProcessEvent(enabled) |
多进程事件采集开关 |
setSessionContinueMillis(millis) |
Session 间隔(毫秒),默认 30000 |
getOaid(callback) |
获取设备 OAID |
getUMIDString() |
获取友盟设备 UMID |
onResume() |
Session 恢复(Activity 时调用) |
onPause() |
Session 暂停(Activity onPause 时调用) |
onKillProcess() |
进程退出时保存统计数据 |
enableImeiCollection(enabled) |
IMEI 采集开关 |
enableImsiCollection(enabled) |
IMSI 采集开关 |
enableIccidCollection(enabled) |
ICCID 采集开关 |
enableWifiMacCollection(enabled) |
WiFi Mac 采集开关 |
reportError(error) |
上报自定义错误信息 |
setCatchUncaughtExceptions(enabled) |
自动捕获未处理异常开关 |
iOS 专属 API
以下 API 仅在 iOS 端可用:
// #ifdef APP-IOS
Umeng.beginEvent("video_play")
// ... 用户看完视频 ...
Umeng.endEvent("video_play")
// #endif
时长事件
| 方法 | 说明 |
|---|---|
beginEvent(eventId) |
时长事件开始计时,需与 endEvent 成对调用 |
endEvent(eventId) |
时长事件结束计时,需与 beginEvent 成对调用 |
beginEventWithLabel(eventId, label) |
带标签时长事件开始,需与 endEventWithLabel 成对调用 |
endEventWithLabel(eventId, label) |
带标签时长事件结束,需与 beginEventWithLabel 成对调用 |
beginEventWithAttributes(eventId, primarykey, attributes) |
带属性时长事件开始,需与 endEventWithPrimarykey 成对调用 |
endEventWithPrimarykey(eventId, primarykey) |
带属性时长事件结束,需与 beginEventWithAttributes 成对调用 |
eventWithDuration(eventId, duration) |
自定义时长事件(毫秒),无需配对 |
eventWithLabelDuration(eventId, label, duration) |
带标签自定义时长,无需配对 |
eventWithAttributesDuration(eventId, attributes, duration) |
带属性自定义时长,无需配对 |
页面统计
| 方法 | 说明 |
|---|---|
logPageView(pageName, seconds) |
手动记录页面展示时长(秒) |
其他
| 方法 | 说明 |
|---|---|
setEncryptEnabled(enabled) |
日志加密开关,默认 false |
setAnalyticsEnabled(enabled) |
统计开关,默认 true |
getUmidString() |
获取友盟设备 UMID |
handleUrl(url) |
集成测试 URL 处理 |
setLatitude(latitude, longitude) |
设置用户位置经纬度 |
Harmony 端说明
Harmony 端基于友盟官方 Harmony SDK,支持的功能较 Android/iOS 少:
- 支持:
preInit、initSDK、setLogEnabled、onEvent、onEventObject、onProfileSignIn、onProfileSignInWithProvider、onProfileSignOff - 不支持:页面统计、时长事件、用户属性、
onEventWithLabel、onEventValue等
Harmony 端的 onEvent 内部通过 onEventObject 实现。事件可在 initSDK 前调用,SDK 最多缓存 1000 条事件。
各端 AppKey 和 Channel 配置(可选)
如果使用方式一(自动初始化),需要在各端配置文件中设置 AppKey 和 Channel。这些文件默认不存在,需手动创建。
Android
手动创建项目根目录下的 AndroidManifest.xml,在 <application> 节点内添加:
<meta-data android:name="UMENG_APPKEY" android:value="your_android_appkey" />
<meta-data android:name="UMENG_CHANNEL" android:value="your_channel" />
uni-app x 项目中 AndroidManifest.xml 的配置方式请参考 官方文档
iOS
手动创建项目根目录下的 info.plist,在 <dict> 节点内添加:
<key>umconfig</key>
<dict>
<key>appKey</key>
<string>your_ios_appkey</string>
<key>channel</key>
<string>your_channel</string>
</dict>
uni-app x 项目中 info.plist 的配置方式请参考 官方文档
HarmonyOS
手动创建 harmony-configs 目录下的 AppScope/resources/rawfile/umconfig.json 文件,内容如下:
{
"appKey": "your_harmony_appkey",
"channel": "your_channel"
}
如果不配置这些文件,插件不会自动初始化,需使用方式二手动调用
preInit和initSDK。
注意事项
- 三端必须使用各自独立的 AppKey
- 必须使用自定义基座验证
- 调用各端专有 API 时必须使用
#ifdef条件编译包裹,否则其他平台编译会报错 - 更多使用细节请参考友盟官方文档:

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 71
赞赏 0
下载 12481562
赞赏 1937
赞赏
京公网安备:11010802035340号