设备唯一标识方案

概述

随着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位的号码。

不过,目前京东主站采用的方案如下:

  1. 系统版本 < Android 10 : UUID 字段为IMEI-MAC地址。(默认有IMEI获取权限,无权限则为 -MAC)
  2. 系统版本 >= Android 10 :
    a. APP本地缓存了UUID:UUID字段将使用缓存的值,即 IMEI-MAC 或 -MAC 。 b. APP本地未缓存UUID:UUID 字段将填充 Android ID 字段。

使用

添加依赖包

工程根目录的 build.gradle:

//在整个项目的 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'
}
注意:如果存在与主站打通数据的需求,即UUID需要和主站保持一致,那么就采用以下方式引入:


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。

注意:如果引用的是okuuid-jdmall包,那么使用该方法获取的UUID将与主站保持一致,不会采用上述的降级方案


方法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

开发人员: wanggang85 hanyu10

联系电话: 13488781527 15350716634

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

results matching ""

    No results matching ""