2022Android设备唯一标识(AndroidID,OAID等 )

简介: 2022Android设备唯一标识(AndroidID,OAID等 )

一、ID 体系:你只是一串代码


想要了解 OAID,我们首先需要明白 ID 体系:想要追踪一个用户就必须先找到用户,在这个过程中,标识符(ID)就像我们的另一张身份证,它们就代表了数字化之后的你和我。


不同 App 可能通过某些唯一标识符对你进行强制跟踪,广告平台则会通过这个唯一标识符对你进行用户画像描绘,进而共享给相关 App 及其后台,一旦「你」打开了其中的某个 App,那么你就会被识别到——你点了什么、看过什么、可能需要什么,它们比你自己都清楚。


而在智能设备的 ID 体系中存在许许多多不同种类的标识符,下面是一小部分 Android 设备内的 ID,它们可能会用于不同方面的跟踪或标识:


1.IMEI


IMEI 应该是大家最熟悉的一种 ID了,它是手机的身份证,也是运营商识别入网设备信息的代码,是一种不可重置的永久标识符,作用域为设备。


在广告跟踪方面,由于 iOS 的权限管控,iOS 上的第三方 App 并不能通过 IMEI 跟踪用户,但目前 Android 平台中绝大部分 App(尤其是在国内)都通过 IMEI 来追踪用户,开篇所举的例子在 Android 平台上大多也通过 IMEI 跟踪来实现。


与 IMEI 类似的还有一个叫做 IMSI 的标识符,但它主要用于 SIM 卡的身份标识,这里不做展开。


2.Android ID(SSAID)


顾名思义,Android ID 是 Android 设备里不依赖于硬件的一种「半永久标识符」,在系统生命周期内不会改变,但系统重置或刷机后会发生变化,其作用域为一组有关联的应用。


Android 开发者文档和谷歌开发者中文博客对 Android 8.0 后的隐私性和 SSAID 变化做出了说明:


从图中不难看出,在 Android 8.0 以后,签名不同的 App 所获取的 Android ID(SSAID)是不一样的,但同一个开发者可以根据自己的数字签名,将所开发的不同 App 进行关联。


3.Device ID


在 Android 平台,Device ID 是一种统称,与硬件相关的 ID 都可以称之为 Device ID,一般是一种不可重置的永久标识符,作用域为设备。


根据设备、厂家或者 App 调用需求的不同,读取 Device ID 时可能会返回 IMEI 或其他硬件编码,但也有可能因为设备中没有相关硬件而无法获取 Device ID 或返回无效值;与之形成对应的,iOS 设备中也有类似的永久标识符叫做 UDID,但在 iOS 6 之后,苹果已经不允许需要获取 UDID 的 App 上架 App Store 以防止这种不可重置的 ID 被用于追踪或滥用,取而代之的是 IDFA 标识符,即 iOS 设备广告标识符。


另外还有一种叫做 openUDID 的设备唯一标识符,它在 iOS 和 Android 系统内都可以使用,但由于不是系统官方提供的 ID 体系,且依赖于第三方 App 生成,所以应用并不广泛,而随着系统迭代升级,openUDID 也逐渐被边缘化甚至被废弃。


4.UUID、GUID


cd04be272e484fc78e2ec75fb65f2564.jpg



UUID 也叫做实例 ID,这两个 ID 可以说是在计算机体系内的通用标识符(详细了解 UUID 和 GUID 可以阅读 维基百科 相关内容)。


根据所面向对象的不同,其意义也有微小差别。如果说前面三个 ID 可以用来识别设备,那么这两个 ID 在 Android 系统中的作用主要是识别 App 进程、元素或数据。


因为它们的作用域仅仅是单个应用内,如果用户卸载了该 App 并重新安装,那么 UUID 也会发生变化。不过 App 开发者可以通过存储 UUID 或与其他 ID、用户信息进行组合、绑定、计算等方式,实现 UUID 标识符的「准永久化」。


根据 Android 开发者指南:


标识运行在设备上的应用实例最简单明了的方法就是使用实例


ID,在大多数非广告用例中,这是建议的解决方案。只有进行了针对性配置的应用实例才能访问该标识符,并且标识符重置起来(相对)容易,因为它只存在于应用的安装期。


因此,与无法重置的设备级硬件 ID 相比,实例 ID 具有更好的隐私权属性。


5.AAID


AAID 与 IDFA 作用相同——IDFA 是 iOS 平台内的广告跟踪 ID,AAID 则用于 Android 平台。


它们都是一种非永久、可重置的标识符,专门提供给 App 以进行广告行为,用户随时可以重置该类 ID,或通过系统设置关闭个性化广告跟踪。但 AAID 依托于 Google 服务框架,因此如果手机没有内置该框架、或框架不完整、或无法连接到相关服务,这些情况都有可能导致 AAID 不可用。


除了以上这些 ID 标识符以外,某些硬件 ID(例如 MAC 地址)也可能会被用于追踪。


二、国内 Android 的广告追踪之道


这么多 ID 标识符,每一个都各司其职。而理论上来说,只有 AAID 和 IDFA 是真正用于广告行为的。


但现实状况显然不是这样。


一方面,Android 平台的不少 App 普遍存在违反 Android 开发规范、绕过 Google Play 审查,通过滥用 ID 来追踪用户,以此达到为广告流量、营销分析等商业利益服务的目的。


另一方面,由于 AAID 依托于 Google 服务框架,但在国内使用 Google 服务并不太可行,或者大部分国行手机内置的 Google 服务不完整,App 开发者需要寻找另一个方式去标识用户。


UUID、GUID 作用域太小,不适合广告跟踪;Android ID 可以通过某些方式被改变或因为 bug 导致不可用,第三方 App 无保证可用性;MAC 地址虽然精准,但在Android 6.0(API 23)到 Android 9(API 28)中,系统限制了第三方 API 获取MAC 地址;再加上早些时候,大部分「非玩机用户」对此类功能并没有太多概念,第三方 App 为了能以更加精准持久的方式来跟踪用户,将 IMEI 变成了用于广告跟踪的首选 ID(在 Google Play 帮助中心,获取永久标识符是一种有条件的、退而求其次的广告投放方法,所以在此之前这种方式也不算完全违规)。


这也是我们看到很多 App 提示必须获取「电话」权限才能运行的原因——因为获取 IMEI 必须获得「电话」权限,可是由此也带来了一些隐私问题:允许「电话」权限可能导致 App 读取到很多种其他信息,就像我需要你给我身份证来查询身份证号,但与此同时你的姓名、住址、生日也暴露给我了。


我们可以在 这个网站 查询到部分 App 所需要的权限、资源以及它可能会发送的隐私信息。例如微信,在网站中收录的 6.7.3 版本中,微信获取了如下权限,但并没有检测到发送以下隐私数据。


随着时代发展,用户逐渐认识到手机 App 疯狂获取权限的行为有可能会侵犯隐私,加之近几年 Android 系统的权限和隐私管理逐渐收紧,Android 10(API 29)终于对第三方 App 获取不可重置永久设备标识符(包括 IMEI)的行为做出了 限制。


具体到用户层面,在 Android 10 之后应用即便能够获取到「电话」权限,系统返回给应用的 IMEI 信息值也为空(你可以通过 My IMEI 这款应用进行测试)。


三、OAID:Android 10 之后的替代方案


至此,国内 App 和广告跟踪服务急需一种替代方案以避免广告流量的损失,OAID 顺势而生。


Android 开发者文档中对 Android 10 限制设备标识符读取的说明 OAID 的本质其实是一种在国行系统内使用的、应对 Android 10 限制读取 IMEI 的、「拯救」国内移动广告的广告跟踪标识符,其背后是 移动安全联盟(Mobile Security Alliance,简称 MSA)。


该联盟由中国信息通信研究院担任理事长和秘书长单位,北京大学、vivo、360、华为担任副理事长单位,并有包括苹果、中兴、OPPO、小米等多家理事和会员单位(点击查看联盟成员详情),OAID 所属的标识符体系也是由该联盟牵头发起的(参见「移动智能终端补充设备标识体系」)。


根据联盟官网以及开发文档,这个「本土化」标识符体系除了 OAID,还包含 UDID、VAID 和 AAID 一共四种标识符。


我知道你在想什么,不过这里的 UDID 和 AAID 与上一节所说的完全不同。你可以通过下图来了解「移动智能终端补充设备标识体系」所规定的四种标识符以及获取它们的接口开发方式。另外,你也可以在 MSA 官网或会员单位的开发者网站下载 SDK 开发说明。


从这四种标识符的描述和功能我们大致可以确定,「移动智能终端补充设备标识体系」所规定的 UDID、OAID、VAID、AAID 在 Android 系统中分别对应了 Device ID(例如 IMEI,或对应了 iOS 设备的 UDID)、AAID、SSAID、UUID(或 GUID)。在理想状态下,引入 OAID 即能保证广告平台的正常运作,也能减小对用户带来的影响,因为第三方 App 无需请求权限即可使用 OAID 完成广告行为,而该过程匿名,用户也可以随时重置 OAID。


从广告服务商 Adjust 于 2019 年12 月 20 日发布的 新闻稿 中我们也可以获知,Adjust 已经接入了 OAID 广告标识符,能够对中国大陆的广告主提供广告相关服务;国内广告数据服务商神策数据在其 帮助文档 中同样提供了 OAID 匹配指南;华为则在其 开发者平台 提供了基于 OAID 的「HUAWEI Ads OAID」广告平台接入指南。


事实上,主流手机厂商都已经在其开发者平台上提供了 Android 10 适配指引,包括 三星中国开发者网站、华为开发者联盟、OPPO 开放平台、vivo 开放平台 都已针对 Android 10 的相关变化做出了说明和解决方案建议,其中就包括 Google 官方标识符适配建议和 OAID 适配方式。


另外 OPPO 和 vivo 也分别在其开放平台提供了「移动智能终端补充设备标识体系」相关文档和 SDK 下载。


不难看出,广告平台已经开始接入 OAID 作为国内广告标识符的建议方案,主流设备厂家也已经开始指导开发者采用「移动智能终端补充设备标识体系」,并且考虑到国内主流的应用预置和分发平台(例如手机厂商内建的应用商店)与 Google Play 一样开始对上架 App 的 API 等级做出强制要求,包括 OAID 在内的标识符体系毫无疑问将成为国内第三方 App 的强制执行标准。


四、Q&A


1.AndroidID什么时候会改变?


恢复出厂设置


root/恢复root


三清


刷机


系统更新


软件修改(一般是模拟器,xposed,root)

相关文章
|
2月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
52 0
|
2月前
|
Android开发
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
本文介绍了如何在基于Amlogic T972的Android 9.0系统上使用Platform平台驱动框架和设备树(DTS),实现设备与驱动的分离,并通过静态枚举在设备树中描述设备,自动触发驱动程序的加载和设备创建。
20 0
基于Amlogic 安卓9.0, 驱动简说(四):Platform平台驱动,驱动与设备的分离
|
2月前
|
Android开发 C语言
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
这篇文章是关于如何在基于Amlogic T972的Android 9.0系统上,通过自动分配设备号和自动创建设备节点文件的方式,开发字符设备驱动程序的教程。
36 0
基于Amlogic 安卓9.0, 驱动简说(二):字符设备驱动,自动创建设备
|
2月前
|
自然语言处理 Shell Linux
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
本文是关于在Amlogic安卓9.0平台上创建字符设备驱动的教程,详细介绍了驱动程序的编写、编译、部署和测试过程,并提供了完整的源码和应用层调用示例。
51 0
基于Amlogic 安卓9.0, 驱动简说(一):字符设备驱动,手动创建设备
|
2月前
|
传感器 Android开发 芯片
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第三篇,展示了如何在Android系统中利用现有的i2c bus驱动,通过编写设备树节点和应用层的控制代码,实现对基于i2c bus的Slaver设备(如六轴陀螺仪模块QMI8658C)的控制,而无需编写设备驱动代码。
30 0
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
|
2月前
|
Android开发
不写一行代码(二):实现安卓基于PWM的LED设备驱动
本文介绍了在Android系统中不编写任何代码,通过设备树配置和内核支持的通用PWM LED驱动来实现基于PWM的LED设备驱动,并通过测试命令调整LED亮度级别。
34 0
不写一行代码(二):实现安卓基于PWM的LED设备驱动
|
2月前
|
Linux Android开发 C语言
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
本文通过实践操作,展示了在Android系统中不编写任何代码,利用设备树(DTS)配置和内核支持的通用GPIO LED驱动来控制LED设备,并进一步通过C语言编写NDK测试APP来实现LED的闪烁效果。
52 0
不写一行代码(一):实现安卓基于GPIO的LED设备驱动
|
8天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
5天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
22 7
下一篇
无影云桌面