ios 開發 唯一標示

2021-06-25 13:08:52 字數 3255 閱讀 6834

在2023年3月21日蘋果已經通知開發者,從2023年5月1日起,

,替代的方案是開發者應該使用「在ios 6中介紹的vendor或advertising標示符」。

cfuuid

方法用來建立cfuuidref,並且可以獲得乙個相應的nsstring,如下**:

cfuuidref cfuuid = cfuuidcreate(kcfallocatordefault);nsstring *cfuuidstring = (nsstring*)cfbridgingrelease(cfuuidcreatestring(kcfallocatordefault, cfuuid));

獲得的這個cfuuid值系統並沒有儲存。每次呼叫cfuuidcreate,系統都會返回乙個新的唯一標示符。如果你希望儲存這個標示符,那麼需要自己將其儲存到nsuserdefaults, keychain, pasteboard或其它地方。

nsuuid

在ios 6中才出現,這跟cfuuid幾乎完全一樣,只不過它是objective-c介面。+ (id)uuid 是乙個類方法,呼叫該方法可以獲得乙個uuid。通過下面的**可以獲得乙個uuid字串:

nsstring *uuid = [[nsuuid uuid] uuidstring];

跟cfuuid一樣,這個值系統也不會儲存,每次呼叫的時候都會獲得乙個新的唯一標示符。如果要儲存的話,你需要自己儲存。在我讀取nsuuid時,注意到獲取到的這個值跟cfuuid完全一樣(不過也可能不一樣):

示例: 68753a44-4d6f-1226-9c60-0050e4c00067

廣告標示符(idfa-identifierforidentifier)

是新框架adsupport.framework的一部分。asidentifiermanager單例提供了乙個方法advertisingidentifier,通過呼叫該方法會返回乙個上面提到的nsuuid例項。

nsstring *adid = [[[asidentifiermanager sharedmanager] advertisingidentifier] uuidstring];

跟cfuuid和nsuuid不一樣,廣告標示符是由系統儲存著的。不過即使這是由系統儲存的,但是有幾種情況下,會重新生成廣告標示符。如果使用者完全重置系統((設定程式 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。另外如果使用者明確的還原廣告(設定程式-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。關於廣告標示符的還原,有一點需要注意:如果程式在後台執行,此時使用者「還原廣告標示符」,然後再回到程式中,此時獲取廣告標示符並不會立即獲得還原後的標示符。必須要終止程式,然後再重新啟動程式,才能獲得還原後的廣告標示符。之所以會這樣,我猜測是由於asidentifiermanager是乙個單例。

已經指出了。將這個開關開啟,實際上什麼也沒有做,不過這是希望限制你訪問廣告標示符。這個開關是乙個簡單的boolean標誌,當將廣告標示符發到任意的伺服器端時,你最好判斷一下這個值,然後再做決定。

示例: 1e2dfa89-496a-47fd-9941-df1fc4e6484a

vindor標示符 (idfv-identifierforvendor)

這種叫法也是在ios 6中新增的,不過獲取這個idfv的新方法被新增在已有的uidevice類中。跟advertisingidentifier一樣,該方法返回的是乙個nsuuid物件。

nsstring *idfv = [[[uidevice currentdevice] identifierforvendor] uuidstring];

蘋果官方的文件中對identifierforvendor有如下這樣的一段描述 :

如果滿足這樣的條件,那麼獲取到的這個屬性值就不會變:相同的乙個程式裡面-相同的vindor-相同的裝置。如果是這樣的情況,那麼這個值是不會相同的:相同的程式-相同的裝置-不同的vindor,或者是相同的程式-不同的裝置-無論是否相同的vindor。

在這裡,還需要注意的一點就是:如果使用者解除安裝了同乙個vendor對應的所有程式,然後在重新安裝同乙個vendor提供的程式,此時identifierforvendor會被重置。

示例: 599f9c00-92dc-4b5c-9464-7971f01f8370

udid

在之前的版本中是可用的,但是在ios5以及之後的版本中,以及被棄用了。雖然,這個udid用得很廣泛,但是,不得不說的是,它在慢慢的遠離開發者,不能在考慮使用udid了。至於這個標示符是轉為私有方法,或者完全從以後的ios版本中移除,還有待觀察。不過,這個udid在部署企業級簽名程式時,非常方便。獲取udid的方法如下:

nsstring *udid = [[uidevice currentdevice] uniqueidentifier];

示例: bb4d786633053a0b9c0da20d54ea7e38e8776da4

openudid

在ios 5發布時,uniqueidentifier被棄用了,這引起了廣大開發者需要尋找乙個可以替代udid,並且不受蘋果控制的方案。由此openudid

成為了當時使用最廣泛的開源udid替代方案。openudid在工程中實現起來非常簡單,並且還支援一系列的廣告提供商。

nsstring *openudid = [openudid value];

openudid利用了乙個非常巧妙的方法在不同程式間儲存標示符 — 在貼上板中用了乙個特殊的名稱來儲存標示符。通過這種方法,別的程式(同樣使用了openudid)知道去什麼地方獲取已經生成的標示符(而不用再生成乙個新的)。

之前已經提到過,在將來,蘋果將開始強制使用advertisingidentifier 或identifierforvendor。如果這一天到來的話,即使openudid看起來是非常不錯的選擇,但是你可能不得不過渡到蘋果推出的方法。

示例: 0d943976b24c85900c764dd9f75ce054dc5986ff 總結

希望上面的資訊能夠幫助你在程式使用選擇正確的唯一標示符。在這裡,我建立了乙個小的唯一標示符測試程式

,你可以執行該程式,並檢視一下顯示的內容(包括上面提到的所有標示符)。另外,下面有兩個表,表中描述了兩個內容:在ios中的可用性,以及什麼時候可以獲得重置的標示符。

* 程式必須重啟才能看到改變的效果。

** 刪除了所有相同vendor提供的程式,才能看到改變的值。

IOS 唯一標示符

在2013年3月21日蘋果已經通知開發者,從2013年5月1日起,替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 cfuuid方法用來建立cfuuidref,並且可以獲得乙個相應的nsstring,如下 cfuuidref cfuuid cfuuidcre...

iOS 裝置唯一標示

idfa 適合對外 idfv 適合對內 廣告id 使用者可以在設定,隱私,廣告追蹤裡重置此id的值,或限制此id的使用,有可能取不到 nsstring idfa asidentifiermanager sharedmanager advertisingidentifier uuidstring 值一...

ios唯一標示符

1.udid nsstring uuididentifier nsuuid uuid uuidstring 唯一手機標示,非常好用,永遠不變,但在ios5之後已經被廢棄。2.cfuuidref 和 nsuuid nsstring uuididentifier nsuuid uuid uuidstri...