前语

我们好,我是未央歌,一个默默无闻的移动开发搬砖者~

本文针对 Android 各种标识符做了统一收集,便利我们比对,以供挑选适合我们的仅有标识符。

标识符

IMEI

  • 从 Android 6.0 开端获取 IMEI 需求权限,并且从 Android 10+ 开端官方取消了获取 IMEI 的 API,无法获取到 IMEI 了
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
  • 可能为空
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_LOCATIONACCESS_COARSE_LOCATION 权限

Widevine ID

  • DRM 数字版权办理 ID ,访问此 ID 无需任何权限
  • 关于搭载 Android 8.0 的设备,Widevine 客户端 ID 将为每个运用软件包名称和网络源(关于网络浏览器)回来一个不同的值
  • 可能为空
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 知识

感谢我们的支撑,码字实在不易,其间如若有过错,望指出,记得点赞关注加收藏哦 ~