摘要:在隐私合规日益严格的今天,获取
IMEI或MAC地址早已成为过去式。本文详细拆解 Android, iOS, Windows, macOS 及 HarmonyOS 五大平台的设备唯一标识(Unique Device Identifier)获取方案,助你构建合规且稳定的用户识别体系。
引言:为什么现在获取个 ID 这么难?
几年前,开发者只需要一行代码获取 IMEI (Android) 或 UDID (iOS),就能精准地把设备和用户绑定。但随着 GDPR、《个人信息保护法》的实施,以及系统厂商(Apple、Google、华为)对隐私权限的收紧,“设备指纹” 逐渐变成了敏感禁区。
现在的核心原则是:不要试图追踪“物理设备”,而是追踪“应用服务 ID”或“广告 ID”。
一、 Android:碎片化时代的生存之道
Android 系统的开放性导致方案极其繁杂,且随着 Android 10/11/12 的升级,权限几乎每代都在变。
1. 广告归因:GAID 与 OAID
如果你是为了做广告统计、归因分析,请使用系统提供的“可重置 ID”。
- GAID (Google Advertising ID):适用于 Google Play 生态(海外应用)。用户可随时重置或删除。
- OAID (Open Advertising ID):国内安卓开发的救星,由移动安全联盟(MSA)联合华为、小米、OV 等厂商推出。目前国内主流应用商店均要求接入 OAID 以替代 IMEI。
2. 业务唯一 ID:UUID + 存储(推荐)
对于普通 App 统计日活(DAU)或用户标识:
- 方案:在 App 首次启动时生成一个
java.util.UUID。 - 持久化:
- 基础版:存入
SharedPreference(卸载即丢)。 - 进阶版:存入外部存储文件或
MediaStore(部分系统卸载后可能有残留)。 - 黑科技 (MediaDrm):利用 Widevine DRM 的 ID。这算是一个系统特性的“漏洞”利用,即使卸载重装通常也能保持不变,但存在兼容性风险。
❌ 避坑:不要再尝试获取 IMEI 或 MAC 地址,这会导致你的 App 在 Android 10+ 系统崩溃,或者在应用市场上架审核时直接被拒。
二、 iOS:围墙花园内的“猫鼠游戏”
苹果对隐私的管控最为严厉,获取硬件 ID 的 API 早已被封死。
1. 广告标识:IDFA (难获取)
- 现状:自 iOS 14.5 起,必须通过 ATT (App Tracking Transparency) 框架弹窗请求用户授权。
- 结果:绝大多数用户会点击“要求 App 不追踪”,导致 IDFA 基本不可用。
2. 同厂标识:IDFV (Vendor ID)
- 特性:同一个开发者账号(Team ID)下的不同 App,在同一台设备上获取到的 IDFV 是一样的。
- 局限:如果用户卸载了该开发者账号下的所有 App,再重装时 IDFV 会重置。
3. 终极杀招:UUID + Keychain (强烈推荐)
这是目前 iOS 开发中最稳健、最合规的唯一 ID 方案。
- 原理:App 首次启动生成 UUID,然后写入 iOS 系统级的 Keychain (钥匙串)。
- 优势:Keychain 的数据存储在沙盒之外。即使 App 被卸载,Keychain 中的数据依然保留。 用户重新下载 App 后,可以读取回之前的 UUID。
三、 HarmonyOS:鸿蒙的分布式哲学
鸿蒙系统分为兼容 Android 的版本和纯血鸿蒙(HarmonyOS NEXT),开发逻辑有所不同。
1. 兼容模式 (当前主流)
直接沿用 Android 的 OAID 方案,华为提供了 AdvertisingIdClient 接口。
2. 纯血鸿蒙 (HarmonyOS NEXT)
鸿蒙强调“分布式”和“原子化服务”,标识符体系更加规范:
- ODID (Open Device ID):开放设备标识符。逻辑类似 iOS 的 IDFV,同一开发者在同一设备上的应用获取到的 ID 相同。
- AAID (Anonymous Application ID):匿名应用标识符。每个 App 独有,主要用于 Push 推送服务。
- 注意:严禁获取 UDID(硬件序列号),该权限仅向设备厂商的系统级应用开放。
四、 Desktop:Windows 与 macOS
桌面端环境相对宽松,但物理硬件更容易被更换(如网卡、硬盘)。
1. Windows
- BIOS UUID / Serial Number:通过 WMI (
wmic csproduct get uuid) 获取。通常绑定主板,重装系统不变。 - MachineGuid:注册表中的 ID。获取简单,但重装系统会变,且易被篡改。
- 建议:组合策略。优先取 BIOS UUID,取不到则降级使用 MachineGuid 或生成 UUID 存文件。
2. macOS
- IOPlatformSerialNumber:Mac 的硬件序列号。
- 稳定性:极高。除非更换主板,否则该 ID 伴随设备终身,且重装系统不影响。是 macOS 开发的首选。
五、 总结与最佳实践表
在 2025 年,“生成 ID + 持久化存储” 是解决 90% 问题的万能钥匙。
| 平台 | 推荐方案 (App 统计) | 推荐方案 (广告归因) | 核心技巧 |
|---|---|---|---|
| iOS | UUID + Keychain | IDFA (需授权) | 利用 Keychain 甚至可以跨越卸载周期 |
| Android | UUID + 文件存储 | OAID (国内) | 别碰 IMEI,用 OAID 替代 |
| Harmony | ODID | OAID | 遵循华为开发规范 |
| Windows | BIOS UUID | - | 需处理虚拟机环境的重复问题 |
| macOS | Serial Number | - | 直接读 IOPlatformSerialNumber |
💡 最后的建议
如果你的业务不涉及金融级的高风险风控,请放下对“物理硬件 ID”的执念。一个在 App 首次启动时生成、并妥善保存的 UUID,不仅完全合规,而且足以满足绝大多数用户统计和去重需求。
版权属于:soarli
本文链接:https://blog.soarli.top/archives/814.html
转载时须注明出处及本声明。