iOS唯一標(biāo)識符總結(jié)
前言
本文總結(jié)了iOS發(fā)展歷程中出現(xiàn)的唯一標(biāo)識符,詳細(xì)說明了相關(guān)概念、適用范圍、獲取方式和注意事項(xiàng)。
包括IMEI、UDID、Mac 地址、IDFA和IDFV。
IMEI [iOS 2 - iOS 5]
概念
IMEI(International Mobile Equipment Identity):國際移動設(shè)備身份碼,在手機(jī)組裝完成后賦予的一個全球唯一的號碼,由于此時 iPhone 只支持單卡,所以 IMEI 和 iPhone 是一一對應(yīng)的。
iOS 2 提供了一種方法獲取 IMEI,但是為了保護(hù)用戶隱私,iOS 5 以后蘋果不再允許獲取 IMEI 了,如果你在應(yīng)用中獲取 IMEI,可能會遭到 Apple Store 的拒絕。
UDID [iOS 5 - iOS 6] 關(guān)于禁用的官方文檔
概念
UDID全稱是Unique Device Identifier,它就是蘋果iOS設(shè)備的唯一標(biāo)識碼,它由40個字符的字母和數(shù)字組成,在 iOS 6(2013 年 5 月 ) 以后被 Apple 禁止。
Mac 地址 關(guān)于禁用的官方文檔
概念
Mac(Medium/Media Access Control):網(wǎng)絡(luò)設(shè)備的物理地址,如果 IMEI 被認(rèn)為是設(shè)備的唯一標(biāo)識,那么 Mac 就是網(wǎng)絡(luò)接口唯一標(biāo)識。同樣由于隱私問題,在 iOS 7 之后無法通過 Mac 地址來標(biāo)識唯一設(shè)備,因?yàn)樵?iOS 7 之后獲取到的 Mac 地址為一固定值。
IDFA:Identifier For Advertising(廣告標(biāo)識符) [iOS 6.0+] 官方文檔
概念
每個設(shè)備唯一的字母數(shù)字字符串,您僅將其用于廣告。將此字符串用于頻率上限、歸因、轉(zhuǎn)化事件、估計(jì)唯一用戶數(shù)量、廣告欺詐檢測和調(diào)試。在運(yùn)行 iOS 14.5 及更高版本和 iPadOS 14.5 及更高版本的設(shè)備上,您的應(yīng)用必須請求跟蹤授權(quán)才能獲取廣告標(biāo)識符。
獲取
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
說明
1. 廣告標(biāo)識符返回唯一的 UUID 或全零。它在以下情況下返回唯一的 UUID:
- 如果“設(shè)置”>“隱私”>“跟蹤”>“允許應(yīng)用程序請求跟蹤”處于啟用狀態(tài),則您已通過調(diào)用應(yīng)用程序跟蹤透明度 API 向用戶請求跟蹤授權(quán),并收到了由 ATTrackingManager.AuthorizationStatus.authorized 指示的授權(quán)。
- 如果用戶在授權(quán)您的應(yīng)用后將設(shè)置 > 隱私 > 跟蹤 > 允許應(yīng)用請求跟蹤更改為關(guān)閉,并為您的應(yīng)用保留權(quán)限。
2. 在以下情況下,廣告標(biāo)識符返回全零 (00000000-0000-0000-0000-000000000000):
- 在模擬器中,無論任何設(shè)置
- 當(dāng)您在運(yùn)行 macOS 的設(shè)備上調(diào)用此 API 時
- 在運(yùn)行 iOS 14.5 及更高版本和 iPadOS 14.5 及更高版本的設(shè)備上, 如果您尚未使用 App Tracking Transparency 框架請求授權(quán)。
- 如果您已使用 App Tracking Transparency 框架請求授權(quán)并且用戶拒絕,則會導(dǎo)致授權(quán)狀態(tài)為 ATTrackingManager.AuthorizationStatus.denied。
- 當(dāng)配置文件或配置限制對廣告標(biāo)識符的訪問時
注意
【設(shè)置 > 隱私 > 跟蹤 > 允許應(yīng)用請求跟蹤】要求App停止追蹤后,之后重裝獲取到的IDFA將會變化。
App Tracking Transparency [iOS 14.0+] 官方文檔
概念
請求用戶授權(quán)以訪問應(yīng)用相關(guān)數(shù)據(jù)以跟蹤用戶或設(shè)備。
說明
如果您的應(yīng)用程序收集有關(guān)最終用戶的數(shù)據(jù)并與其他公司共享以跨應(yīng)用程序和網(wǎng)站進(jìn)行跟蹤,則您必須使用 AppTrackingTransparency 框架。AppTrackingTransparency 框架向用戶提出應(yīng)用跟蹤授權(quán)請求,并提供跟蹤授權(quán)狀態(tài)。
要使用 AppTrackingTransparency 框架:
- 設(shè)置 NSUserTrackingUsageDescription 以顯示安裝在最終用戶設(shè)備上的應(yīng)用程序的系統(tǒng)權(quán)限警報(bào)請求。
- 調(diào)用 requestTrackingAuthorization(completionHandler:) 將應(yīng)用跟蹤授權(quán)請求呈現(xiàn)給最終用戶。
- 使用 trackingAuthorizationStatus 確定應(yīng)用跟蹤權(quán)限狀態(tài)。
注意
僅當(dāng)應(yīng)用程序狀態(tài)為 UIApplicationStateActive 時才會提示調(diào)用 API。如果另一個權(quán)限請求正在等待用戶確認(rèn),則不會顯示授權(quán)提示。iOS 不會保留并發(fā)請求,并且不會提示通過應(yīng)用擴(kuò)展調(diào)用 API。檢查 trackingAuthorizationStatus 的 ATTrackingManager.AuthorizationStatus.notDetermined 狀態(tài)以確定您是否需要進(jìn)行額外的調(diào)用。
IDFV :Identifier For Vendor(應(yīng)用開發(fā)商標(biāo)識符)[iOS 6.0+] 官方文檔
概念
向應(yīng)用程序供應(yīng)商唯一標(biāo)識設(shè)備的字母數(shù)字字符串。
獲取
[[[UIDevice currentDevice] identifierForVendor] UUIDString]
說明
對于來自同一供應(yīng)商并在同一設(shè)備上運(yùn)行的應(yīng)用,此屬性的值相同。對于來自不同供應(yīng)商的同一設(shè)備上的應(yīng)用程序以及不同設(shè)備上的應(yīng)用程序(無論供應(yīng)商)返回不同的值。
通常,供應(yīng)商由 App Store 提供的數(shù)據(jù)確定。如果應(yīng)用程序不是從應(yīng)用程序商店安裝的(例如企業(yè)應(yīng)用程序和仍在開發(fā)中的應(yīng)用程序),則會根據(jù)應(yīng)用程序的bundle ID 計(jì)算供應(yīng)商標(biāo)識符。bundle ID 假定為反向 DNS 格式。
在 iOS 6 中,bundle ID的前兩個組件用于生成供應(yīng)商 ID。如果bundle ID 只有一個組件,則使用整個bundle ID。
在 IOS 7 中,bundle ID的所有組件(最后一個組件除外)都用于生成供應(yīng)商 ID。如果bundle ID 只有一個組件,則使用整個bundle ID。
下表顯示了bundle ID 的集合以及系統(tǒng)用于計(jì)算供應(yīng)商 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,則等待并稍后再次獲取該值。例如,這發(fā)生在設(shè)備重新啟動之后但用戶解鎖設(shè)備之前。
- 當(dāng)應(yīng)用程序(或來自同一供應(yīng)商的另一個應(yīng)用程序)安裝在 iOS 設(shè)備上時,此屬性中的值保持不變。當(dāng)用戶從設(shè)備中刪除該供應(yīng)商的所有應(yīng)用程序并隨后重新安裝其中一個或多個應(yīng)用程序時,該值會發(fā)生變化。當(dāng)使用 Xcode 安裝測試版本或使用 ad-hoc 分發(fā)在設(shè)備上安裝應(yīng)用程序時,該值也可能發(fā)生變化。因此,如果您的應(yīng)用程序?qū)⒋藢傩缘闹荡鎯υ谌魏蔚胤?,您?yīng)該優(yōu)雅地處理標(biāo)識符更改的情況。
IDFA和IDFV的區(qū)別
| IDFA | IDFV | |
|---|---|---|
| 獲取條件 | iOS14以下 【設(shè)置 >隱私 >廣告 > 限制廣告跟蹤】 關(guān)閉 iOS14以上 【設(shè)置 > 隱私 > 跟蹤 > 允許應(yīng)用請求跟蹤】開啟 && 授權(quán)彈窗允許 | 無權(quán)限要求 |
| 值修改條件 | iOS14以下 【設(shè)置 >隱私 >廣告 > 還原廣告標(biāo)識符】 iOS14以上【設(shè)置 > 隱私 > 跟蹤 > 允許應(yīng)用請求跟蹤】要求App停止追蹤 | 刪除該供應(yīng)商的所有應(yīng)用程序 |
| 特點(diǎn) | 設(shè)備唯一、可更改 | 同一供應(yīng)商同一設(shè)備相同且唯一、可更改 |