iOS唯一标识符总结
前言
本文总结了iOS发展历程中出现的唯一标识符,详细说明了相关概念、适用范围、获取方式和注意事项。
包括IMEI
、UDID
、Mac 地址
、IDFA
和IDFV
。
IMEI [iOS 2 - iOS 5]
概念
IMEI(International Mobile Equipment Identity):国际移动设备身份码,在手机组装完成后赋予的一个全球唯一的号码,由于此时 iPhone 只支持单卡,所以 IMEI 和 iPhone 是一一对应的。
iOS 2 提供了一种方法获取 IMEI,但是为了保护用户隐私,iOS 5 以后苹果不再允许获取 IMEI 了,如果你在应用中获取 IMEI,可能会遭到 Apple Store 的拒绝。
UDID [iOS 5 - iOS 6] 关于禁用的官方文档
概念
UDID全称是Unique Device Identifier,它就是苹果iOS设备的唯一标识码,它由40个字符的字母和数字组成,在 iOS 6(2013 年 5 月 ) 以后被 Apple 禁止。
Mac 地址 关于禁用的官方文档
概念
Mac(Medium/Media Access Control):网络设备的物理地址,如果 IMEI 被认为是设备的唯一标识,那么 Mac 就是网络接口唯一标识。同样由于隐私问题,在 iOS 7 之后无法通过 Mac 地址来标识唯一设备,因为在 iOS 7 之后获取到的 Mac 地址为一固定值。
IDFA:Identifier For Advertising(广告标识符) [iOS 6.0+] 官方文档
概念
每个设备唯一的字母数字字符串,您仅将其用于广告。将此字符串用于频率上限、归因、转化事件、估计唯一用户数量、广告欺诈检测和调试。在运行 iOS 14.5 及更高版本和 iPadOS 14.5 及更高版本的设备上,您的应用必须请求跟踪授权才能获取广告标识符。
获取
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
说明
1. 广告标识符返回唯一的 UUID 或全零。它在以下情况下返回唯一的 UUID:
- 如果“设置”>“隐私”>“跟踪”>“允许应用程序请求跟踪”处于启用状态,则您已通过调用应用程序跟踪透明度 API 向用户请求跟踪授权,并收到了由 ATTrackingManager.AuthorizationStatus.authorized 指示的授权。
- 如果用户在授权您的应用后将设置 > 隐私 > 跟踪 > 允许应用请求跟踪更改为关闭,并为您的应用保留权限。
2. 在以下情况下,广告标识符返回全零 (00000000-0000-0000-0000-000000000000):
- 在模拟器中,无论任何设置
- 当您在运行 macOS 的设备上调用此 API 时
- 在运行 iOS 14.5 及更高版本和 iPadOS 14.5 及更高版本的设备上, 如果您尚未使用 App Tracking Transparency 框架请求授权。
- 如果您已使用 App Tracking Transparency 框架请求授权并且用户拒绝,则会导致授权状态为 ATTrackingManager.AuthorizationStatus.denied。
- 当配置文件或配置限制对广告标识符的访问时
注意
【设置 > 隐私 > 跟踪 > 允许应用请求跟踪】要求App停止追踪后,之后重装获取到的IDFA将会变化。
App Tracking Transparency [iOS 14.0+] 官方文档
概念
请求用户授权以访问应用相关数据以跟踪用户或设备。
说明
如果您的应用程序收集有关最终用户的数据并与其他公司共享以跨应用程序和网站进行跟踪,则您必须使用 AppTrackingTransparency 框架。AppTrackingTransparency 框架向用户提出应用跟踪授权请求,并提供跟踪授权状态。
要使用 AppTrackingTransparency 框架:
- 设置 NSUserTrackingUsageDescription 以显示安装在最终用户设备上的应用程序的系统权限警报请求。
- 调用 requestTrackingAuthorization(completionHandler:) 将应用跟踪授权请求呈现给最终用户。
- 使用 trackingAuthorizationStatus 确定应用跟踪权限状态。
注意
仅当应用程序状态为 UIApplicationStateActive 时才会提示调用 API。如果另一个权限请求正在等待用户确认,则不会显示授权提示。iOS 不会保留并发请求,并且不会提示通过应用扩展调用 API。检查 trackingAuthorizationStatus 的 ATTrackingManager.AuthorizationStatus.notDetermined 状态以确定您是否需要进行额外的调用。
IDFV :Identifier For Vendor(应用开发商标识符)[iOS 6.0+] 官方文档
概念
向应用程序供应商唯一标识设备的字母数字字符串。
获取
[[[UIDevice currentDevice] identifierForVendor] UUIDString]
说明
对于来自同一供应商并在同一设备上运行的应用,此属性的值相同。对于来自不同供应商的同一设备上的应用程序以及不同设备上的应用程序(无论供应商)返回不同的值。
通常,供应商由 App Store 提供的数据确定。如果应用程序不是从应用程序商店安装的(例如企业应用程序和仍在开发中的应用程序),则会根据应用程序的bundle ID 计算供应商标识符。bundle ID 假定为反向 DNS 格式。
在 iOS 6 中,bundle ID的前两个组件用于生成供应商 ID。如果bundle ID 只有一个组件,则使用整个bundle ID。
在 IOS 7 中,bundle ID的所有组件(最后一个组件除外)都用于生成供应商 ID。如果bundle ID 只有一个组件,则使用整个bundle ID。
下表显示了bundle ID 的集合以及系统用于计算供应商 ID 的bundle ID 的哪些部分。
Bundle ID | iOS 6.x | iOS 7.x |
---|---|---|
Com.example.app1 | Com.example.app1 | Com.example.app1 |
Com.example.app2 | Com.example.app2 | Com.example.app2 |
Com.example.app.app1 | Com.example.app.app1 | Com.example.app.app1 |
Com.example.app.app2 | Com.example.app.app2 | Com.example.app.app2 |
Example | Example | Example |
注意
- 如果该值为 nil,则等待并稍后再次获取该值。例如,这发生在设备重新启动之后但用户解锁设备之前。
- 当应用程序(或来自同一供应商的另一个应用程序)安装在 iOS 设备上时,此属性中的值保持不变。当用户从设备中删除该供应商的所有应用程序并随后重新安装其中一个或多个应用程序时,该值会发生变化。当使用 Xcode 安装测试版本或使用 ad-hoc 分发在设备上安装应用程序时,该值也可能发生变化。因此,如果您的应用程序将此属性的值存储在任何地方,您应该优雅地处理标识符更改的情况。
IDFA和IDFV的区别
IDFA | IDFV | |
---|---|---|
获取条件 | iOS14以下 【设置 >隐私 >广告 > 限制广告跟踪】 关闭 iOS14以上 【设置 > 隐私 > 跟踪 > 允许应用请求跟踪】开启 && 授权弹窗允许 | 无权限要求 |
值修改条件 | iOS14以下 【设置 >隐私 >广告 > 还原广告标识符】 iOS14以上【设置 > 隐私 > 跟踪 > 允许应用请求跟踪】要求App停止追踪 | 删除该供应商的所有应用程序 |
特点 | 设备唯一、可更改 | 同一供应商同一设备相同且唯一、可更改 |