禁止非系统应用访问Device ID以及WiFi Mac地址随机化是Android Q中两个非常重要的变更。该变更将对应用数据统计、广告推荐、用户画像等业务场景造成影响,本文将为你解读该变更的原理以及适配方案。
变更介绍
为了更好保护用户隐私,谷歌对安卓Q系统中所有获取设备识别码的接口都增加了新的权限控制:READ_PRIVILEGED_PHONE_STATE,该权限需要系统签名的应用才能申请。同时,系统默认WiFi Mac地址随机化,当设备连上不同的WiFi网络时随机生成Mac地址。以上变更意味着开发者将Device ID和WiFi Mac 地址作为用户唯一的标志符。
变更影响
1、影响范围
所有通过READ_PHONE_STATE权限获取Device ID的应用以及将设备WiFi Mac地址作为设备唯一标志符的应用都将受影响,预计受影响的应用比例超过90%。
2、兼容性表现
对于TargetSdkVersion=Q的全部应用,获取device id会抛异常SecurityException。
对于 TargetSdkVersion
当设备连接到不同的 Wi-Fi 网络时,系统会随机生成不同的 MAC 地址,将无法作为用户唯一标志。
3、受影响的业务场景
所有依赖Device ID以及固定Mac地址数据的业务都会受到影响,如数据统计、推荐、用户历史数据记录、广告、用户画像等。
适配指导
1、参照官方文档进行适配
唯一标识符最佳方案:
Device ID变更介绍文档:
2、使用Android ID 代替Device ID
Android ID获取代码:
Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
Android ID和Device ID主要区别在于手机恢复出厂设置后,Android ID将被重置,而Device ID无法重置。
3、接入设备厂商提供的ID
设备厂商华为将会为开发者提供OAID和ODID两个接口来帮助开发者适配该变更,后续我们会发布专门的适配指导。
OAID(Open Anonymous ID ):
开放匿名ID,只能用于广告场景(禁止使用在其他场景),用户可以在手机上进行关闭和重置Open Anonymous ID,重置之后OAID值会变化。OAID采用uuid作为OAID的值,第三方开发者也可以获取。
ODID(Open Device ID):
开放的设备标识 ,用于开放给开发者的设备标识,同一个开发者不同应用获取设备标识是相同的。
1、ODID取值规则:
同一设备上运行的同一个开发者的应用程序,取值相同;同一设备上不同开发者的应用程序,取值不同;不同设备上同一个开发者的应用程序,取值不同;不同设备上不同开发者的应用程序,取值不同。
2、ODID重置规则:
手机恢复出厂设置,所有开发者的取值全部重置;同一设备上同一开发者的应用全部卸载后重新安装,会对对该供应商的取值重置。
更多参考资料:
Android Q Beta开发者文档链接:
Android Q Beta镜像下载链接:
Android Q Beta 发布 blog: