在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提供的程式,才能看到改變的值。
破船的部落格
double
cfuuidref theuuid = cfuuidcreate(null);
cfstringref guid = cfuuidcreatestring(null, theuuid);
cfrelease(theuuid);
nsstring *uuidstring = [((nsstring *)guid) stringbyreplacingoccurrencesofstring:@"-" withstring:@""];
cfrelease(guid);
為了能標識該字串,所以一般使用乙個固定的字串來標誌
- (nsstring *)pathfortemporaryfilewithprefix:(nsstring *)prefix
iOS獲取裝置唯一識別符號
在開發中會遇到應用需要記錄裝置標示,即使應用解除安裝後再安裝也可重新識別的情況,在這寫一種實現方式 讀取裝置的uuid universally unique identifier 並通過keychain記錄。首先儲存裝置的uuid,可以使用類方法 id uuid 是乙個類方法,呼叫該方法可以獲得乙個...
獲取唯一識別符號
ios 2.0版本以後uidevice提供乙個獲取裝置唯一識別符號的方法uniqueidentifier,通過該方法我們可以獲取裝置的序列號,這個也是目前為止唯一可以確認唯一的識別符號。但是,因為該唯一識別符號與手機一一對應,蘋果覺得可能會洩露使用者隱私,所以在ios 5.o之後該方法就被廢棄掉了。...
python UUID唯一識別符號
uuid 通用唯一識別符號 universally unique identifier 對於所有的uuid它可以保證在空間和時間上的唯一性.它是通過mac位址,時間戳,命名空間,隨機數,偽隨機數來保證生成id的唯一性,有著固定的大小 128 bit python的uuid模組提供uuid類和函式uu...