更新记录

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.xmlUMENG_APPKEY / UMENG_CHANNEL 完成 preInit,若已同意隐私协议则自动 init
  • iOS:在 UTSiOSHookProxy.applicationDidFinishLaunchingWithOptions 中读取 info.plistumconfig.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 少:

  • 支持:preInitinitSDKsetLogEnabledonEventonEventObjectonProfileSignInonProfileSignInWithProvideronProfileSignOff
  • 不支持:页面统计、时长事件、用户属性、onEventWithLabelonEventValue

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"
}

如果不配置这些文件,插件不会自动初始化,需使用方式二手动调用 preInitinitSDK

注意事项

  1. 三端必须使用各自独立的 AppKey
  2. 必须使用自定义基座验证
  3. 调用各端专有 API 时必须使用 #ifdef 条件编译包裹,否则其他平台编译会报错
  4. 更多使用细节请参考友盟官方文档:

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android: ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE、INTERNET; iOS: 无额外权限; Harmony: ohos.permission.INTERNET、ohos.permission.GET_NETWORK_INFO、ohos.permission.APP_TRACKING_CONSENT

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件使用的 友盟 SDK 会采集数据,详情可参考:https://www.umeng.com/analytics

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议