一、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

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)

Android设备唯一标识(AndroidID,OAID等 )相关推荐

  1. Android设备唯一标识(终极方案!)

    Android设备唯一标识 背景 Android系统中并没有可靠获取所有厂商设备唯一ID的方法,各个方法都有自己的使用范围和局限性,这也是目前流行的Android系统版本过多,设备也是来自不同厂商,且 ...

  2. android 16进制 全透明_你有几种实现方案Android 设备唯一标识?

    前言 项目开发中,多少会遇到这种需求:获得设备唯一标识DeviceId,用于: 1.标识一个唯一的设备,做数据精准下发或者数据统计分析: 2.账号与设备绑定: 3..... 分析 这类文章,网上有许多 ...

  3. 获取Android设备唯一标识码

    概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一 ...

  4. 获取android设备唯一编号_如何获取Android设备唯一标识码教程

    ID的全称是(Virtual identity electronic identification),中文名为通用账户,是俗称的网络身份证.它是一种互联网身份认证协议,其具有唯一性和信息不可否认性.I ...

  5. 获取Android设备唯一标识

    很多情况下,需要将APP和设备进行绑定,以保证用户不会无限制的注册或发送请求.然而,Android设备并没有绝对的唯一标识. Android提供了多种方法来获取所谓的唯一标识.常用的有六种. (1)A ...

  6. uniapp 获取设备唯一标识(OAID、AAID、AndroidID、IMEI等)插件 Ba-IdCode

    简介(下载地址) Ba-IdCode 是一款可以获取国内各大手机厂商 OAID(开放匿名设备标识)及海外手机平台 AAID(安卓广告标识)的uniapp插件.另外也支持获取 IMEI/MEID.And ...

  7. [Android][获取Android设备唯一标识]

    1.落笔缘由 最近需要获取能够标志Android设备的唯一标识,但是由于Android系统版本不同或者root等诸多原因,造成有些设备标识为NULL或者标识相同的问题,在网上搜索了相关资料,总结一下各 ...

  8. 获取Android设备唯一标识(唯一序列号)

    有很多场景和需求你需要用到手机设备的唯一标识符. 在Android中,有以下几种方法获取这样的ID. 1. The IMEI: 仅仅只对Android手机有效: 1 2 TelephonyManage ...

  9. 【Android】Android设备唯一标识简介

    一.概念 IMEI IMEI(International Mobile Equipment Identity) 是国际移动设备身份码的缩写,国际移动装备辨识码,是由 15 位数字组成的 "电 ...

最新文章

  1. python学习第四课
  2. 用深度优先搜索解迷宫问题
  3. 十分钟搭建和使用ELK日志分析系统
  4. reactnative 获取定位_[RN] React Native 获取地理位置
  5. lintcode:最大子正方形
  6. activiti学习
  7. 用ASP+DLL实现WEB方式修改服务器时间
  8. Swift基础一(代码)
  9. MySQL基础 增删改查练习
  10. 苏州软件企业如何办理自产软件产品增值税即征即退
  11. 综合能源服务认证的定义,综合能源服务认证意义
  12. DIV网页排版入门指南
  13. 计算一个整数,转换成二进制,里面有多少个1
  14. Python爬虫项目实战(欧美音乐网站)
  15. 键盘功能键F1~F2的基本功能
  16. 曼哈顿距离(Manhattan Distance )详解
  17. 对计算机社团未来发展的看法,对社团发展的一些看法
  18. 写给想成为前端工程师的同学们―前端工程师是做什么的?
  19. Leetcode5238 找出给定方程的正整数解
  20. 计算机管理处理卡,图文详解电脑卡怎么处理

热门文章

  1. python的ws库功能,实时获取服务器ws协议返回的数据
  2. 在工作与生活中保持情绪稳定的艺术
  3. 1.3 HTML doctype 的作用
  4. java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解
  5. 【选择适合酷睿i7-4770K电脑配置主板】
  6. python基础知识点总结-python基础知识,python知识点汇总大一
  7. 【易通慧谷】业务风控产品模型思考:解读业务模型的6个层级
  8. 小米路由器4c刷Openwrt安装softether
  9. dubbo 服务降级
  10. 为什么获取crm服务器信息失败,CRM项目失败的七大原因