← 资料库索引 ← 官方文档 原始链接 ↗ 🔍
官方文档

接入 Android · 设备唯一标识方案(京东 EMOP 文档中心) 原文标题:接入Android · EMOP文档中心

发表时间:(页面未标注)采集时间:2026-10-09 10:49:14来源:opendoc.jd.com原文语言:zh状态:完整

内容概要总结

京东 EMOP 文档中心的《设备唯一标识方案(接入 Android)》。文档指出:随着 Android 版本迭代、Google 收紧敏感数据保护,传统用 IMEI + WiFi MAC 组成 UUID 的做法已不适用——用户拒绝 READ_PHONE_STATE 时拿不到 IMEI,Android 6.0 后未开 WiFi 时拿不到 MAC。因此方案纳入 AndroidId(设备首次启动随机生成的 64 位数字的 16 进制字符串)与 PseudoId(读取 ROM 版本号、厂商名、CPU 型号等硬件信息组合成的 15 位号码)作为备选补偿,并给出系统版本 < Android 10 与 >= Android 10 的不同填充规则。

原文内容(原文即中文)

接入Android

设备唯一标识方案

概述

随着Android版本的迭代更新,谷歌对于用户敏感数据的保护也越来越重视。在传统的Android应用开发的过程中,通常会采用IMEI和WIFI的MAC地址来组成UUID,但是这种作法随着版本Android版本的迭代已经不再适用:

  • IMEI : 在用户拒绝对权限READ_PHONE_STATE授权时,IMEI是获取不到的。
  • MAC : 在Android 6.0后,个别设备在没有打开WiFi的情况下,MAC地址是无法获取的。

因此,传统获取UUID的作法有可能是不完整的。为了保证最终能够获取到一个完整的UUID,本方案纳入以下两个标识符作为备选补偿:

  • AndroidId : 在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串即AndroidId
  • PseudoId : 通过读取设备的ROM版本号、厂商名、CPU型号和其他硬件信息来组合出一串15位的号码。
  • 系统版本 < Android 10 : UUID 字段为IMEI-MAC地址。(默认有IMEI获取权限,无权限则为 -MAC)
  • 系统版本 >= Android 10 :

a. APP本地缓存了UUID:UUID字段将使用缓存的值,即 IMEI-MAC 或 -MAC 。
b. APP本地未缓存UUID:UUID 字段将填充 Android ID 字段。

使用

添加依赖包

//在整个项目的 build.gradle 文件配置仓库
allprojects {
 repositories {
 maven { url 'http://artifactory.jd.com/libs-releases-local/' }
 maven { url "http://artifactory.jd.com/libs-snapshots-local/" }
 }
}

需要使用 uuid 包的 module 的 build.gradle:

dependencies {
 compile 'com.jingdong.wireless.jdsdk:okuuid:1.0.2'
}
dependencies {
 compile 'com.jingdong.wireless.jdsdk:okuuid-jdmall:1.0.0'
}

获取UUID

方法1.:UUID.readDeviceUUIDBySync(Context context)

String uuid = UUID.readDeviceUUIDBySync(JdSdk.getInstance().getApplicationContext());

调用UUID.readDeviceUUIDBySync(Context context)方法获取UUID时,会尝试去获取IMEI。在用户未授权的情况下,该方法也不会造成崩溃,会通过降级方案获取一个完整的UUID字符串。通过该方法获取UUID的默认组合为IMEI-MAC。

方法2:UUID.readDeviceUUIDBySync(Request request)

Request request = new Request.Builder()
 .setContext(JdSdk.getInstance().getApplicationContext())
 .setWithoutPermission(true)
 .build();
String uuid = UUID.readDeviceUUIDBySync(request);

调用UUID.readDeviceUUIDBySync(Request request)方法获取UUID时,可以根据自身需求对UUID的获取进行定制。在上面的示例中,构建了一个会Request对象并设置了setWithoutPermission(true),那么在生成UUID时就不会去尝试去获取IMEI。在设置setWithoutPermission(true)的情况下,该方法获取UUID的默认组合为AndroId-MAC。

其他

git仓库地址: http://git.jd.com/android-sdk/uuid.git

联系电话: 13488781527 15350716634

邮箱: wanggang10@jd.com hanyu10@jd.com

results matching ""

No results matching ""