更新记录

1.0.0(2026-10-28)

1.0.0(2026-10-28)

首次发布。

  • 新增 register / getIdCodes / getOAID / isSupported 四个接口
  • 支持 OAID(华为、荣耀、小米、OPPO、vivo、三星、联想、魅族、努比亚、华硕、一加、酷派、360、FreeMe)与谷歌 AAID
  • 同时返回 IMEI、AndroidID、WidevineID、PseudoID、GUID
  • 全部在设备本地读取,插件自身不联网、不上传

平台兼容性

uni-app(3.91)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ × × √ - 4.4 × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

zeng-oaid 设备标识

UTS 原生插件,一次调用读取 Android 设备的多种标识,全部在本机读取后回调,不联网、不上传。同一个插件同时支持 uni-app 和 uni-app x。

支持环境

  • 平台:仅 Android(不支持 iOS、H5、小程序)
  • minSdkVersion:19(Android 4.4)
  • uni-app:Vue2 / Vue3,需 HBuilderX 3.91 及以上
  • uni-app x:需 HBuilderX 3.9 及以上
  • 已内置华为、荣耀广告标识 SDK,并适配小米、OPPO、vivo、三星、联想、魅族、努比亚、华硕、一加、酷派、360、Google 等厂商服务

安装

插件市场页面点击「下载插件并导入 HBuilderX」,选择项目导入,插件会落到 uni_modules/zeng-oaid,manifest.json 无需任何配置。

因为带原生 AAR,真机运行前需要制作自定义调试基座:菜单「运行 → 运行到手机或模拟器 → 制作自定义调试基座」,然后把基座切换为「自定义调试基座」。

API

import { register, getIdCodes, getOAID, isSupported } from '@/uni_modules/zeng-oaid'
方法 说明
register(options) 注册并预取,先注册再获取。请在用户同意隐私政策后调用。
getIdCodes(options) 读取全部标识,内部异步等待,工作线程执行,不阻塞界面。
getOAID(options) 获取 OAID,Google 设备回落为 AAID。
isSupported() 同步返回当前机型是否支持 OAID。

返回结构

{ code: 0, msg: 'register success' }

{
  code: 0,
  msg: 'getIdCodes success',
  data: {
    supportedOAID: true,   // 当前设备是否支持 OAID / AAID
    OAID: '...',           // 厂商 OAID
    AAID: '...',           // Google 广告标识,仅装 GMS 的设备有值
    IMEI: '',              // Android 10+ 不可读;Android 6~9 需电话权限
    AndroidID: '...',      // SSAID,恢复出厂会变
    WidevineID: '...',     // DRM 设备 ID,部分机型可能为空
    PseudoID: '...',       // 硬件信息拼接的伪 ID,不唯一
    GUID: '...'            // 应用内生成并持久化,卸载重装会变
  }
}

{ code: 0, msg: 'getOAID success', data: 'OAID 或 AAID 字符串' }

读不到 OAID 时 code 为 -1,同时走 fail 回调;getIdCodes 的 fail 里仍然带回其他可用字段。读不到的字段一律是空字符串,不会出现 null。

示例

import { register, getIdCodes, getOAID } from '@/uni_modules/zeng-oaid'

register({
  success(res) {
    console.log('已注册', res)
  }
})

getIdCodes({
  success(res) {
    console.log('OAID:', res.data.OAID)
    console.log('AndroidID:', res.data.AndroidID)
  },
  fail(res) {
    console.log('OAID 读取失败', res.data)
  }
})

getOAID({
  success(res) {
    console.log(res.data)
  }
})

uni-app x(.uvue)里需要显式声明参数类型:

import { getIdCodes, GetIdCodesOptions } from '@/uni_modules/zeng-oaid'

getIdCodes({
  success: (res) => {
    console.log(res.data.OAID)
  },
  fail: (res) => {
    console.log('fail')
  }
} as GetIdCodesOptions)

权限与隐私

权限 用途
android.permission.READ_PHONE_STATE 仅 Android 6~9 读取 IMEI 时使用,不需要 IMEI 可不申请
com.google.android.gms.permission.AD_ID Google 设备读取 AAID
com.asus.msa.SupplementaryDID.ACCESS、freemme.permission.msa 对应厂商 OAID 服务查询

插件已在自身 Manifest 声明上述权限和 Android 11+ 所需的 <queries> 包可见性,使用者无需额外配置。所有标识均在本机读取后回调,插件不联网、不采集、不上传。请在用户同意隐私政策后再调用,并在应用隐私政策中说明读取设备标识的用途。

常见问题

模拟器取不到 OAID? 模拟器没有厂商 OAID 服务,属正常现象,请用真机测试。

getIdCodes 很久才返回? OAID/AAID 首次读取要绑定厂商服务,内部最长等待 5 秒。建议先 register,第二次取值会命中缓存,几乎瞬时。

IMEI 为空? Android 10 及以上系统对普通应用永久关闭了 IMEI 读取,任何插件都无法绕过。

国产机型 OAID 为空? 依次排查:① 是否在用户同意隐私政策之后调用;② 是否用了新编译的自定义基座;③ 系统设置里是否关闭了广告标识;④ isSupported() 返回 false 说明机型不在支持列表。

云打包依赖冲突? 本插件把厂商 SDK 打进了 utssdk/app-android/libs/zeng-oaid-bridge.aar。如果项目里另有插件也集成华为/荣耀广告标识 SDK,去掉重复的一份。

需要什么 HBuilderX 版本? uni-app 项目 3.91+,uni-app x 项目 3.9+。

开源声明

厂商协议适配层基于开源项目 Android_CN_OAID(木兰宽松许可证第 2 版)改造,华为、荣耀广告标识 SDK 版权归各自厂商所有。插件包内附 LICENSE-MulanPSL2.txt 与 NOTICE.txt。

更新日志

1.0.0

  • 首次发布:支持 OAID、AAID、IMEI、AndroidID、WidevineID、PseudoID、GUID。

隐私、权限声明

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

android.permission.READ_PHONE_STATE(仅尝试读取 IMEI 时需要,Android 10+ 已无法读取)、com.google.android.gms.permission.AD_ID、com.asus.msa.SupplementaryDID.ACCESS、freemme.permission.msa

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

插件在设备本地读取 OAID、AAID、AndroidID 等标识后回调给调用方,不联网、不上传、不含任何统计上报。

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

无

暂无用户评论。