更新记录
1.0.0(2026-08-24)
- 首次发布
- 支持 Android / iOS / HarmonyOS Next 三端
- 提供 getDeviceIdentifierInfo / getOaid / getIdfa / getDeviceBaseInfo / clearLocalUuid 五个 API
- 内置多级降级链路(Android:OAID->ANDROID_ID->UUID;iOS:IDFV->Keychain UUID;鸿蒙:ODID->OAID->UUID)
- Android 可选集成 MSA OAID SDK;iOS 通过 Keychain 实现卸载重装标识不变
平台兼容性
uni-app(3.8.2)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | - | - | 5.0 | 1.0.0 | 12 | 1.0.0 | √ | 1.0.0 |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(3.8.2)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
uts-device-id 跨端设备标识符(uni-app x / UTS 插件)
适用于 uni-app x(UTS 原生插件)的跨端设备标识插件。 支持 Android / iOS / HarmonyOS Next(鸿蒙) 三端,开箱即用,内置多级降级链路, 不依赖任何付费 SDK(OAID 需可选集成 MSA 免费 SDK)。
一、插件简介
在 uni-app x 工程中,一键获取设备匿名标识符(OAID / ANDROID_ID / IDFV / ODID)与 基础设备信息。适用于:
- 设备唯一标识 / 去重 / 激活统计
- 风控、账号安全、登录插件配套(可搭配 UniLogin 使用)
- 广告归因、灰度、埋点打点
核心设计:多级降级链路,任何一级失败自动降级到下一级,保证一定返回一个可用的主标识符。
| 平台 | 降级链路 |
|---|---|
| Android | OAID(MSA,可选) -> ANDROID_ID -> 本地持久化 UUID |
| iOS | IDFV(标识符供应商) -> Keychain 持久化 UUID(卸载重装不变) |
| HarmonyOS | ODID -> OAID -> 本地持久化 UUID |
二、安装 / 使用
1. 导入插件
将 uni_modules/kyokasanagi-devid 目录(连同 uni_modules 一起)复制到你的 uni-app x 工程根目录,
或通过 HBuilderX 插件市场安装。导入后插件会自动参与三端编译,无需额外配置即可使用
(Android 默认走 ANDROID_ID -> UUID;iOS 走 IDFV -> Keychain;鸿蒙走 ODID -> OAID -> UUID)。
2. 页面中引用
import {
getDeviceIdentifierInfo,
getOaid,
getIdfa,
getDeviceBaseInfo,
clearLocalUuid
} from '@/uni_modules/kyokasanagi-devid'
// 获取设备标识符(主入口,自动降级)
const info = await getDeviceIdentifierInfo()
console.log('主标识:', info.mainId, '类型:', info.mainIdType)
console.log('OAID:', info.oaid, 'ANDROID_ID:', info.androidId, 'IDFV:', info.idfv, 'ODID:', info.odid)
console.log('本地UUID:', info.localUuid)
// 获取设备基础信息
const base = await getDeviceBaseInfo()
console.log(base.brand, base.model, base.system, base.platform, base.screenWidth, base.screenHeight)
// 清除本地 UUID(再次获取将生成新 UUID)
await clearLocalUuid()
⚠️ 请勿直接 import 插件 utssdk 内部各平台目录下的文件,统一从
@/uni_modules/kyokasanagi-devid导入。
三、API 说明
getDeviceIdentifierInfo(): Promise<DeviceIdResult>
主入口。返回当前平台的主标识符及全部可用标识符。
| 字段 | 类型 | 说明 |
|---|---|---|
| success | boolean | 是否获取成功 |
| mainId | string | 最终采用的主标识符 |
| mainIdType | string | OAID | ANDROID_ID | IDFV | ODID | LOCAL_UUID |
| oaid | string | Android OAID(未获取到为空串) |
| androidId | string | Android ANDROID_ID |
| idfv | string | iOS IDFV |
| odid | string | HarmonyOS ODID |
| localUuid | string | 本地持久化 UUID |
| errorMsg | string | 降级过程说明(无错误为空串) |
getOaid(): Promise<string>
获取 Android 广告标识符(需集成 MSA,见下方配置);非 Android 平台返回空串。
getIdfa(): Promise<IdfaResult>
获取 iOS 广告标识符 IDFA(独立接口,只读状态,不弹窗)。
| 字段 | 类型 | 说明 |
|---|---|---|
| status | number | 0 未授权 / 1 受限 / 2 拒绝 / 3 已授权 |
| idfa | string | 已授权时返回 IDFA,否则为空串 |
getDeviceBaseInfo(): Promise<DeviceBaseInfoResult>
| 字段 | 类型 | 说明 |
|---|---|---|
| brand | string | 品牌(apple / huawei / xiaomi ...) |
| model | string | 型号 |
| system | string | 系统版本 |
| platform | string | Android / iOS / HarmonyOS |
| screenWidth / screenHeight | number | 屏幕宽高(px) |
clearLocalUuid(): Promise<boolean>
清除本地持久化 UUID。清除后再次调用 getDeviceIdentifierInfo 会生成新的 UUID。
四、各平台配置
1. Android:可选集成 OAID(广告标识符)
默认 不集成,Android 开箱即用(ANDROID_ID -> UUID)。 如需获取 OAID(广告标识符,市场主流做法),按下面 4 步操作:
- 获取 MSA OAID SDK:在移动安全联盟 MSA 注册并申请
AppId,下载 OAID SDK 的 aar(常见文件名如
msa_mdid_1.0.23.aar), 放入uni_modules/kyokasanagi-devid/utssdk/app-android/libs/目录。 - 配置 AppId:编辑
utssdk/app-android/AndroidManifest.xml,取消注释并填入 AppId:<application> <meta-data android:name="com.bun.miitmdid.APPID" android:value="你的MSA AppId" /> </application> - 开启启用开关:编辑
utssdk/app-android/index.uts,取消顶部import { getOaidImpl } from './OaidHelper.uts'的注释, 并取消getDeviceIdentifierInfo/getOaid中对应调用行的注释。 - 真机验证:OAID 仅在设备"设置 > 隐私 > 广告与隐私 > 广告跟踪"开启时可能返回非全 0 值; 模拟器上 OAID 大概率不可用(此时插件自动降级到 ANDROID_ID / UUID)。
未放置 aar 时 OaidHelper.uts 不参与编译,不影响任何功能。
2. iOS:IDFA / ATT 授权
- 插件已在
app-ios/config.json中声明依赖AdSupport、AppTrackingTransparency、Security。 - 插件 不会主动弹 ATT 授权窗。需要 IDFA 时,请在宿主业务层(用户同意隐私政策后)调用
系统 ATT 授权:
import { ATTrackingManager } from 'AppTrackingTransparency' // 在宿主中先弹自定义隐私说明,用户同意后再请求: const status = await ATTrackingManager.requestTrackingAuthorization() - 授权后调用
getIdfa()即可拿到 IDFA;未授权返回 status=0/2。 - iOS 的 IDFV 与 Keychain UUID 获取 不需要任何授权,开箱即用。
- 插件附带
NSUserTrackingUsageDescription文案(app-ios/Info.plist),可自行修改。
3. HarmonyOS:ODID / OAID 权限
- 插件已在
utssdk/app-harmony/module.json5中声明ohos.permission.APP_TRACKING_CONSENT(ODID / OAID 读取所需)。 - 插件本身不弹授权框。宿主需在业务层(用户同意隐私政策后)通过能力访问控制 申请该权限(或由系统在首次调用时引导授权),未授权时插件自动降级到本地 UUID。
- ODID / OAID 依赖鸿蒙系统 API(@kit.DeviceInfoKit / @kit.AdsKit)支持,
建议在真机上验证;若目标 API level 不支持,可改用
@ohos.identifier.odid/@ohos.ads.oaid。
五、合规与隐私说明(重要)
- 不获取任何硬件永久标识:本插件不提供、不承诺 IMEI / 序列号 / MAC 等 不可重置的硬件标识,符合各大应用商店隐私合规要求。
- 所有标识均可重置:
- ANDROID_ID:恢复出厂设置 / 部分系统"重置广告标识"后会变化;
- OAID / IDFA / ODID:用户在系统设置中可重置;
- 本地 UUID:卸载重装会变化(iOS 的 Keychain UUID 除外,卸载重装不变)。
- 隐私政策申报:在你的 App 隐私政策中声明你使用了哪些标识符及用途。
- 授权时机:涉及 IDFA(iOS)/ ODID / OAID(鸿蒙)时,请务必在用户同意隐私政策后 再触发授权与读取,建议封装"同意 -> 授权 -> 读取"流程。
- 本插件不做任何权限弹窗、不做任何网络上报、不收集用户行为数据。
六、降级策略说明
| 场景 | 结果 |
|---|---|
| OAID / ODID 全 0 或未授权 | 自动降级到 ANDROID_ID / OAID / UUID |
| ANDROID_ID 不可用(罕见/模拟器) | 自动降级到本地 UUID |
| iOS IDFV 不可用 | 自动降级到 Keychain UUID |
| 所有标识符均失败 | success=false,mainId 为空串 |
七、变更记录
见 changelog.md。
八、许可
见 license.md。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 16
赞赏 0
下载 12529049
赞赏 1944
赞赏
京公网安备:11010802035340号