0
点赞
收藏
分享

微信扫一扫

最全详解Android设备UDID还是唯一ID?


这篇文章主要介绍了Android设备UDID还是唯一ID?我觉得挺不错的,现在分享给大家,也给大家做个参考。

我想为我的 Android应用程序生成android设备唯一ID,以根据用户设备udid创建收藏夹. 所有设备都有唯一的ID. import android.provider.Settings.Secure; private String android_id = Secure.getString(getContext().getContentResolver(),,下方主要介绍关于Android设备UDID还是唯一ID?的全文内容,希望对你有所帮助。

一、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 这款应用进行测试)。

我想为我的 Android应用程序生成androID设备唯一ID,以根据用户设备udID创建收藏夹.

最全详解Android设备UDID还是唯一ID?_android

 

解决方法

所有设备都有唯一的ID.

1.import androID.provIDer.Settings.Secure;
2. private String androID_ID = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);

总结

收集整理的Android设备UDID还是唯一ID?全部内容,希望文章能够帮你解决Android设备UDID还是唯一ID?所遇到的程序开发问题


举报

相关推荐

0 条评论