Loading...
正在加载...
请稍候

Android(及海外手机)设备的「唯一用户/设备标识」(Unique Device Identifier / OAID / AAID 等)

✨步子哥 (steper) 2026年03月17日 05:49
**XUID 这里指的就是 Android(及海外手机)设备的「唯一用户/设备标识」(Unique Device Identifier / OAID / AAID 等),用于用户追踪、反作弊、防刷、广告归因等场景。** 目前(2026 年 3 月)国内开发者最主流、最推荐的**完整开源替代方案**就是: ### 首推:**Android_CN_OAID**(GitHub 最活跃项目) - **仓库**:https://github.com/gzu-liyujiang/Android_CN_OAID (Gitee 镜像同名) - **许可证**:Mulan PSL v2(完全开源、可商用、可修改) - **核心定位**:专门替代**移动安全联盟(MSA)统一 SDK**(那个 miit_mdid_xxx.aar 是闭源的,企业才能用)。个人开发者、独立 APP 直接用这个就行。 - **支持内容**(一套完整解决方案): - **OAID**(国内厂商开放匿名设备标识)—— 主流方案 - **AAID**(Google Advertising ID,海外手机) - 其他常见 ID:IMEI/MEID、AndroidID、PseudoID、GUID(全局唯一随机 ID) - 已弃用 WidevineID(避免闪退) **支持的国内厂商**(覆盖 95%+ 市场): - 华为 / 荣耀(HMS / MagicOS) - 小米 / Redmi / 黑鲨(MIUI) - vivo / iQOO(OriginOS / Funtouch OS) - OPPO / Realme(ColorOS) - 三星、联想、魅族、一加、努比亚、酷派、酷赛、卓易 等 - 其他海外机型走 AAID(GMS) **最新状态**(2026 年 3 月): - 最新版本 ≈ 4.2.16(2025 年 11 月更新) - 持续维护中(最近 4 个月还有 release),支持 Android 5.0+ 到最新版本 - Stars 很高,Issues 响应快 **集成超级简单**(Gradle): ```gradle // 1. 添加仓库 repositories { maven { url 'https://jitpack.io' } maven { url 'https://developer.huawei.com/repo' } maven { url 'https://developer.hihonor.com/repo' } } // 2. 添加依赖 implementation 'com.github.gzu-liyujiang:Android_CN_OAID:4.2.16' // 最新版 runtimeOnly "com.huawei.hms:ads-identifier:3.4.62.300" runtimeOnly "com.hihonor.mcs:ads-identifier:1.0.2.301" ``` **使用示例**(Application.onCreate 中初始化): ```kotlin // 初始化(必须在用户同意隐私政策后) DeviceIdentifier.register(this) // 同步获取 OAID(最常用) val oaid = DeviceIdentifier.getOAID(this) // 异步获取(推荐,防止主线程卡顿) DeviceID.getOAID(this, object : IGetter { override fun onOAIDGetComplete(result: String) { ... } override fun onOAIDGetError(error: Exception) { ... } }) ``` **其他标识获取**: ```kotlin DeviceIdentifier.getAndroidID(this) DeviceIdentifier.getGUID(this) // 纯随机全局唯一 DeviceIdentifier.getIMEI(this) // 需要 READ_PHONE_STATE 权限(可移除) ``` **隐私合规提醒**(必须遵守): - 初始化前**必须**让用户同意隐私政策 - 不需要 IMEI/GUID 时,可在 AndroidManifest.xml 移除权限: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" /> ``` - 完全符合 Google / 国内隐私法规(最小必要原则) ### 其他补充开源方案(按场景推荐) 如果你不需要厂商 OAID,只想最简单持久化 ID: | 方案 | 复杂度 | 优点 | 缺点 | 推荐场景 | |------|--------|------|------|----------| | **自定义 GUID + SharedPreferences/Keystore** | 极简 | 应用卸载后仍可恢复(配合外部存储) | 非硬件级,刷机/清数据会变 | 普通用户追踪 | | **Firebase Installations ID (FID)** | 官方 | Google 推荐,合规 | 需要 Firebase SDK | Google Play 上架 | | **Advertising ID (AAID)** | 中等 | 官方广告 ID,可重置 | 需要 Google Play 服务 | 海外广告归因 | ### 总结推荐 - **国内手机 + 个人开发者** → **直接上 Android_CN_OAID**(就是你想要的「一套开源解决方案」) - **纯海外 / Google Play** → 用 Google Advertising ID 或 Firebase FID - **跨 Android + iOS** → Android 用上面库,iOS 用 IDFA(需 ATT 授权)+ 自己服务端生成统一 XUID

讨论回复

1 条回复
✨步子哥 (steper) #1
03-17 05:50
Android(以及其他手机设备)上用于**唯一标识用户/设备实例**的一套**开源解决方案**,常被称作 XUID(可能是某个项目或团队内部的叫法,类似“cross-user/device ID”或自定义唯一ID)。 2026 年 Android 生态下,获取稳定、持久、合规的唯一标识已非常严格(隐私政策、Google Play 规则、厂商限制)。以下是目前主流且开源的可行方案对比,按场景推荐: | 方案 | 开源 | 稳定性(重装App后) | 跨App共享 | 需要权限 | 推荐场景 | 主要实现库/方式 | 备注(2026现状) | |------|------|---------------------|-----------|----------|----------|------------------|------------------| | **Firebase Installation ID (FID)** | 是(Google 官方) | 高(安装期内稳定) | 否(每个App独立) | 无 | 大多数非广告场景(登录态、用户偏好同步、防刷等) | Firebase SDK 中的 `FirebaseInstallations.getInstance()` | Google 官方最推荐,非广告用例首选 | | **自生成 UUID + 内部存储** | 是 | 中(卸载重装丢失) | 否 | 无 | 简单App实例标识 | `UUID.randomUUID().toString()` + SharedPreferences / EncryptedSharedPreferences | 最简单,合规,Google 文档推荐备用方案 | | **FingerprintJS Android** | 是 | 高(设备指纹) | 否 | 无(基本信号) | 需要较高唯一性、防作弊、风控 | https://github.com/fingerprintjs/fingerprintjs-android | MIT 许可,Kotlin 编写,收集硬件/系统信号生成稳定指纹 | | **TrustDevice-Android** | 是 | 很高(多信号+算法) | 否 | 少量可选 | 风控、反欺诈、设备唯一性要求高 | https://github.com/trustdecision/trustdevice-android | 轻量级开源设备指纹,号称稳定设备ID | | **Android_CN_OAID**(国内特化) | 是 | 高(OAID/AAID) | 部分(厂商支持) | 无(OAID接口) | 中国市场、广告/统计需OAID | https://github.com/gzu-liyujiang/Android_CN_OAID | 替代 MSA 闭源 SDK,支持华为/小米/OPPO/vivo 等厂商 OAID + AAID | | **devEyosiyas/AndroidID** | 是 | 高(DRM-based) | 否 | 无 | 追求无权限设备唯一ID | https://github.com/devEyosiyas/AndroidID | 使用 Widevine DRM API 生成稳定ID | | **传统 ANDROID_ID (SSAID)** | 系统API | 中高 | 同签名App可共享 | 无 | 旧项目兼容 | `Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)` | Android 8+ 按签名+用户隔离,不建议新项目首选 | ### 2026 年最实用推荐组合(XUID 风格解决方案) 1. **首推:Firebase Installation ID(最合规、最稳定)** - Google 官方强烈推荐用于“标识应用实例”。 - 自动处理重置、备份等。 - 集成简单: ```kotlin // build.gradle implementation("com.google.firebase:firebase-installations:18.x.x") // 最新版 // 使用 FirebaseInstallations.getInstance().id.addOnCompleteListener { task -> if (task.isSuccessful) { val fid = task.result // 这就是你的 XUID / 设备实例唯一ID // 存储或上传到后端与用户账号绑定 } } ``` - 缺点:依赖 Google Play Services(GMS),鸿蒙/无GMS 设备不可用。 2. **国内市场 + 无 GMS 环境:Android_CN_OAID** - 专门为中国厂商适配 OAID(开放匿名设备标识)。 - 支持 fallback 到 AndroidID / GUID / WidevineID 等。 - 仓库活跃,个人开发者友好(MSA 官方 SDK 企业才能用)。 - 集成后可得到 OAID/VAID/AAID,根据需求选。 3. **高唯一性需求(防多开、刷量、模拟器)→ 指纹方案** - FingerprintJS Android 或 TrustDevice-Android。 - 生成类似 `visitorId` 的字符串,基于 CPU、屏幕、字体、传感器等 20+ 信号。 - 即使卸载重装,同一物理设备大概率相同(80-95%+ 准确率)。 - 完全开源、无后门。 4. **极简自实现 XUID(无任何依赖)** ```kotlin object XUID { private const val PREF_KEY = "xuid" fun getOrCreate(context: Context): String { val prefs = context.getSharedPreferences("secure_prefs", Context.MODE_PRIVATE) var id = prefs.getString(PREF_KEY, null) if (id.isNullOrBlank()) { id = UUID.randomUUID().toString() prefs.edit().putString(PREF_KEY, id).apply() } return id!! } } ``` - 再结合 ANDROID_ID 或 Build.FINGERPRINT 做 salt,进一步提升区分度。
友情链接: AI魔控网 | 艮岳网