Android 设备唯一标识

Android 设备唯一标识:设备信息

IMEI (International Mobile Equipment Identity手机串号)

  1. TAC 前8位区分手机品牌和型号的编码
    其中TAC码前两位又是分配机构标识(Reporting Body Identifier),是授权IMEI码分配机构的代码,如01为美国CTIA,35为英国BABT,86为中国TAF
  2. 第9-15位,区分每部手机的生产序列号
  3. 验证码,由前14位数字通过Luhn算法计算得出 通过拨号输入*#06#来查询

IMSI (International Mobile Subscriber Identity)

  1. 用于区分蜂窝网络中不同用户的、在所有蜂窝网络中不重复的识别码
  2. 在GSM、UMTS和LTE网络中,IMSI来自SIM卡,在CDMA2000网络中则是直接来自手机,或者RUIM。

Android 设备唯一标识_第1张图片

MEID (obile Equipment Identifier)

CDMA手机的身份识别码 ,识别设备的,类似IMEI

Android ID

从Android Q即Android 10开始,第三方已经无法获取到手机的唯一设备了,包括IMEI和序列号。
Android ID目前是Android系统提供给应用容易访问的设备ID,也叫SSAID(Settings.Secure.ANDROID_ID缩写),这个ID主要与应用/设备相关

Android ID最大的变化是从Android8.0开始:
https://developer.android.com/about/versions/oreo/android-8.0-changes

ANDROID_ID的获取门槛是最低的,不需要任何权限,但哪里有十全十美的事,ANDROID_ID也存在一些缺点,就是无法保证稳定性,root、刷机或恢复出厂设置都会导致设备的ANDROID_ID发生改变。此外,我看到部分文章中有提到某些厂商定制系统的Bug会导致不同的设备可能会产生相同的ANDROID_ID,而且某些设备获取到的ANDROID_ID为null。总体来说,相比于其他几种设备标识或多或少都有被官方“照顾”过,ANDROID_ID还是比较稳定的,如果应用对于设备标识的要求不是特别高的话还是一个值得考虑的方案。

Serial Number(设备序列号)

获取方法:adb shell getprop ro.serialno

设备序列号是手机生产厂商提供的,如果拼接上厂商名称(Build.MANUFACTURER)基本上可以保证唯一性。在Android 8.0以下版本,可以通过android.os.Build.SERIAL获取到设备序列号,同样的,这种方式在Android 8.0及以上版本被废弃了,通过Build.SERIAL在Android 8.0及以上设备获取到设备的序列号始终为“unknown”,取而代之的是使用android.os.Build.getSerial()方法。

  • Android 8.0以下:无需申请权限,可以通过Build.SERIAL获取到设备序列号
  • Android 8.0-Android 10:需要申请READ_PHONE_STATE权限,可以通过Build.getSerial()获取到设备序列号,如果用户拒绝了权限,会抛出java.lang.SecurityException异常
  • Android 10及以上:分为以下两种情况:
    targetSdkVersion<29:没有申请权限的情况,调用Build.getSerial()方法时抛出java.lang.SecurityException异常;申请了权限,通过Build.getSerial()方法获取到的设备序列号为“unknown”
    targetSdkVersion=29:无论是否申请了权限,调用Build.getSerial()方法时都会直接抛出java.lang.SecurityException异常

MAC地址 (Media Access Control Address)

局域网地址、以太网地址或物理地址,由48位二进制数组成。与我们熟悉的IP地址不同,mac地址只由设备的网卡决定,每个网卡都会有一个唯一的mac地址,只要不更换设备的网卡,mac地址就不会变,因此mac地址符合我们对于设备标识的要求。

OAID (匿名设备标识符)

在这里插入图片描述

移动安全联盟提供的SDK
http://www.msa-alliance.cn/col.jsp?id=120
根据“移动智能终端补充设备标识体系”技术要求,华为、小米、OPPO、vivo、中兴、努比亚、魅族、联想、三星等设备厂商均将逐步实现本标识体系,联盟计划开发并发布支持多厂商的统一的补充设备标识调用SDK,协助移动应用开发者更便捷的访问移动智能终端补充设备标识体系,推进相关业务。

你可能感兴趣的:(Android原理,Java,android)