Android 10 中的隐私权变更 https://developer.android.google.cn/about/versions/10/privacy/changes
从Android 10开始已经无法完全标识一个设备,曾经用mac地址、IMEI等设备信息标识设备的方法,从Android 10开始统统失效。而且无论你的APP是否适配过Android 10。
IMEI等设备信息
从Android10开始普通应用不再允许请求权限android.permission.READ_PHONE_STATE。而且,无论你的App是否适配过Android 10(即targetSdkVersion是否大于等于29),均无法再获取到设备IMEI等设备信息。
从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可重置标识符(包含 IMEI 和序列号)。而普通应用无法申请该权限。
受影响的API:
Build.getSerial();
TelephonyManager.getImei();
TelephonyManager.getMeid()
TelephonyManager.getDeviceId();
TelephonyManager.getSubscriberId();
TelephonyManager.getSimSerialNumber();
—— targetSdkVersion<29 的应用,其在获取设备ID时,会直接返回null
—— targetSdkVersion>=29 的应用,其在获取设备ID时,会直接抛出异常SecurityException
如果您的App希望在Android 10以下的设备中仍然获取设备IMEI等信息,可按以下方式进行适配:
<uses-permission android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="28"/>
Mac地址随机分配
默认情况下,在搭载 Android 10 或更高版本的设备上,系统会传输随机分配的 MAC 地址。即从Android 10开始,普通应用已经无法获取设备的真正mac地址,标识设备已经无法使用mac地址。
如何标识设备唯一性
方法1、Google解决方案
如果您的应用有追踪非登录用户的需求,可用ANDROID_ID来标识设备。
ANDROID_ID生成规则:签名+设备信息+设备用户
ANDROID_ID重置规则:设备恢复出厂设置时,ANDROID_ID将被重置
String androidId = Settings.Secure.getString(this.getContentResolver(),
Settings.Secure.ANDROID_ID);
方法2、移动安全联盟SDK
移动安全联盟SDK http://www.msa-alliance.cn/col.jsp?id=120
移动安全联盟(Mobile Security Alliance,简称MSA)于2017年12月4日成立,由中国信息通信研究院联合终端生产企业、安全企业、高等院校、研究机构、互联网企业以及芯片企业、方案企业等产业链中各个环节的重要机构共同发起。
其他资料:
Android 设备唯一标识(多种实现方案)
(部分内容参考于网络,如有不妥,请联系删除~)
网友评论