用户识别问题风险描述文档
1. 概述
在Android操作系统方面,因传统的移动终端设备标识如国际移动设备识别码(IMEI)等已被部分国家认定为用户隐私的一部分,并存在被篡改和冒用的风险,所以在Android 10及后续版本中非厂商系统应用将无法获取IMEI、MAC等设备信息,无法获取IMEI会在用户行为统计过程中对设备识别产生一定影响。为了更好保护用户隐私,谷歌对安卓Q系统中所有获取设备识别码的接口都增加了新的权限控制:READ_PRIVILEGED_PHONE_STATE,该权限需要系统签名的应用才能申请。同时,系统默认WiFi Mac地址随机化,当设备连上不同的WiFi网络时会随机生成不同的Mac地址。以上变更意味着我们当前只能以Device ID 或 WiFi Mac 地址作为用户唯一的标志符。
而iOS操作系统,在2020年6月时苹果在全球开发者大会上宣布,App开发者需要在iOS 14中通过弹窗获得用户同意,才可获取用户iOS设备中的IDFA(Identifier for Advertising,设备标识符的一种)。在苹果的IDFA新政策实施后,会有超六成的用户会在弹窗中拒绝同意,这意味着App开发者将无法拿到IDFA这个“身份ID”来跟踪用户。
2. 版本要求
Android方面
业界推荐的方案依次是:IMEI > OAID > Android ID > Mac地址
备注:OAID是中国移动安全联盟为了保证广告厂商提供的一个设备标识码,当前接入华为、小米、OPPO、vivo、中兴、努比亚、魅族、联想、三星等设备厂商均将逐步支持(一些老的设备且没有经过系统更新的不支持)。
但当前支持度不够,而且需要到各自的手机厂商申请ID才能支持,比较复杂,当前不建议接入。
平台 | 版本要求 | 获取设备ID |
---|---|---|
Android | Android 6.0以下 | |
Android 6.0-Android 8.0 - 需要申请READ_PHONE_STATE权限 |
IMEI方案 | |
Android 8.0-Android 10 - 需要申请READ_PHONE_STATE权限** |
IMEI方案 | |
Android 10及以上 - 需要申请READ_PHONE_STATE权限 |
Android ID方案(可能存在重复,但概率很低) | |
Android 12以后 | 可能会禁用Android ID |
iOS方面
业界推荐的方案依次是:UDID > UUID > IDFA > IDFV > Mac Address
版本要求 | 获取设备ID方法 |
---|---|
iOS 2.0~5.0 | UDID方案 |
iOS 6.0~14.0 | UUID、IDFA、IDFV |
iOS主体方案应该都是使用了UUID、IDFA、IDFV,但在UUID方案可能会受限于上架AppStore,而IDFA、IDFV也听说iOS 14后将会逐步禁止,所以存在一定的风险。
3. 变更影响
Android应用
影响范围
所有通过READ_PHONE_STATE权限获取Device ID的应用以及将设备WiFi,Mac地址作为设备唯一标志符的应用都将受影响,预计受影响的应用比例超过90%。
兼容性表现
对于TargetSdkVersion
=Q的全部应用,获取device id会抛异常SecurityException。
对于 TargetSdkVersion<Q且申请了READ_PHONE_STATE权限的应用,通过getDeviceId接口读取的值为Null。
当设备连接到不同的 Wi-Fi 网络时,系统会随机生成不同的 MAC 地址,将无法作为用户唯一标志。
受影响的业务场景
所有依赖DeviceID以及固定Mac地址数据的业务都会受到影响,如数据统计、推荐、用户历史数据记录、广告、用户画像等。
在iOS应用方面,当前暂时使用UUID、IDFA、IDFV方案,暂无解决方案。
4. 适配指导
Android方面
4.1 可参照官方文档进行适配
唯一标识符最佳方案:
https://developer.android.google.cn/training/articles/user-data-ids
Device ID变更介绍文档:
https://developer.android.google.cn/preview/privacy/data-identifiers
4.2 使用Android ID 代替Device ID
Android ID获取代码:
Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
Android ID和Device ID主要区别在于手机恢复出厂设置后,Android ID将被重置,而Device ID无法重置。
iOS方面
iOS14之后,App开发者需要通过“App跟踪透明度”功能(App Tracking Transparency,简称ATT),以弹窗方式获得用户同意后,才能获取IDFA用于跟踪用户在其他App和网站中的行为。这意味着,用户不用再迷失在冗长的App《隐私政策》中,而是可以通过弹窗选择是否同意授权App获取自己的IDFA。