本文针对 Android 各种标识符做了统一收集,方便大家比对,以供选择适合大家的唯一标识符。
标识符
IMEI
从 Android 6.0 开始获取 IMEI 需要权限,并且从 Android 10+ 开始官方取消了获取 IMEI 的 API,无法获取到 IMEI 了kotlin复制代码fun getIMEI(context: Context): String { val telephonyManager = context .getSystemService(TELEPHONY_SERVICE) as TelephonyManager return telephonyManager.deviceId}Android ID(SSAID)
无需任何权限卸载安装不会改变,除非刷机或重置系统Android 8.0 之后签名不同的 APP 获取的 Android ID 是不一样的部分设备由于制造商错误实现,导致多台设备会返回相同的 Android ID可能为空kotlin复制代码fun getAndroidID(context: Context): String { return Settings.System.getString(context.contentResolver,Settings.Secure.ANDROID_ID)}MAC 地址
需要申请权限,Android 12 之后 BluetoothAdapter.getDefaultAdapter().getAddress()需要动态申请 android.permission.BLUETOOTH_CONNECT 权限MAC 地址具有全局唯一性,无法由用户重置,在恢复出厂设置后也不会变化搭载 Android 10+ 的设备会报告不是设备所有者应用的所有应用的随机化 MAC 地址在 Android 6.0 到 Android 9 中,本地设备 MAC 地址(如 WLAN 和蓝牙)无法通过第三方 API 使用 , 会返回 02:00:00:00:00:00,且需要 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限Widevine ID
DRM 数字版权管理 ID ,访问此 ID 无需任何权限对于搭载 Android 8.0 的设备,Widevine 客户端 ID 将为每个应用软件包名称和网络源(对于网络浏览器)返回一个不同的值可能为空kotlin复制代码fun getWidevineID(): String { try { val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L) val mediaDrm = MediaDrm(WIDEVINE_UUID) val widevineId = mediaDrm.getPropertyByteArray(MediaDrm.PROPERTY_DEVICE_UNIQUE_ID); val sb = StringBuilder(); for (byte in widevineId) { sb.append(String.format("%02x", byte)) } return sb.toString(); } catch (e: Exception) { } catch (e: Error) { } return ""}AAID
无需任何权限Google 推出的广告 ID ,可由用户重置的标识符,适用于广告用例系统需要自带 Google Play Services 才支持,且用户可以在系统设置中重置重置后,在未获得用户明确许可的情况下,新的广告标识符不得与先前的广告标识符或由先前的广告标识符所衍生的数据相关联。
还要注意,Google Play 开发者内容政策要求广告 ID“不得与个人身份信息或任何永久性设备标识符(例如:SSAID、MAC 地址、IMEI 等)相关联。”
在支持多个用户(包括访客用户在内)的 Android 设备上,您的应用可能会在同一设备上获得不同的广告 ID。这些不同的 ID 对应于登录该设备的不同用户。
OAID
无需任何权限国内移动安全联盟出台的“拯救”国内移动广告的广告跟踪标识符基本上是国内知名厂商 Android 10+ 才支持,且用户可以在系统设置中重置UUID
生成之后本地持久化保存卸载后重新安装、清除应用缓存 会改变如何选择
同个开发商需要追踪对比旗下应用各用户的行为
可以采用 Android ID(SSAID),并且不同应用需使用同一签名如果获得的 Android ID(SSAID)为空,可以用 UUID 代替【 OAID / AAID 代替也可,但需要引入第三方库】在 Android 8.0+ 中, Android ID(SSAID)提供了一个在由同一开发者签名密钥签名的应用之间通用的标识符希望限制应用内的免费内容(如文章)
可以采用 UUID ,作用域是应用范围,用户要想规避内容限制就必须重新安装应用用户群体主要是大陆
可以采用 OAID ,低版本配合采用 Android ID(SSAID)/ UUID可以采用 Android ID(SSAID),空的时候配合采用 UUID 等用户群体在海外
可以采用 AAID可以采用 Android ID(SSAID),空的时候配合采用 UUID 等最后
如果你对 Android 感兴趣,可以订阅我的专栏:
Android 知识感谢大家的支持,码字实在不易,其中如若有错误,望指出,记得点赞关注加收藏哦
作者:未央歌链接:https://juejin.cn/post/7262558218169008188来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。