同樣的,openudid 也不能用了:
更詳細的操作,可以參考這篇:如何使用keychain儲存和獲取udid 。
下面的內容**:網易杭州 qa team
在ios系統中,獲取裝置唯一標識的方法有很多:
一.udid(unique device identifier)
二.uuid(universally unique identifier)
三.mac address
四.open udid
五.廣告標示符(idfa-identifierforidentifier)
六.vendor標示符 (idfv-identifierforvendor)
七.推送token+bundle_id
下面依次介紹:
udid的全稱是unique device identifier,它就是蘋果ios裝置的唯一識別碼,它由40個字元的字母和數字組成(越獄的裝置通過某些工具可以改變裝置的udid)。
流動網路可利用udid來識別移動裝置,但是,從ios5.0(2023年8月份)開始,蘋果宣布將不再支援用uniqueidentifier方法獲取裝置的udid,ios5以下是可以用的。
在2023年3月21日蘋果已經通知開發者:從2023年5月1日起,訪問uidids的程式將不再被審核通過,替代的方案是開發者應該使用「在ios 6中介紹的vendor或advertising標示符」。所以udid是絕對不能用啦。
uuid
是universally unique identifier的縮寫,中文意思是通用唯一識別碼。它是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過**控制端來做辨識資訊的指定。這樣,每個人都可以建立不與其它人衝突的 uuid。在此情況下,就不需考慮資料庫建立時的名稱重複問題。蘋果公司建議使用uuid為應用生成唯一標識字串。
ios中獲取uuid的**如下:
-(nsstring*)
uuid
開發者可以在應用第一次啟動時呼叫一 次,然後將該串儲存起來,以便以後替代udid來使用。但是,如果使用者刪除該應用再次安裝時,又會生成新的字串,所以不能保證唯一識別該裝置。這就需要各路高手想出各種解決方案。所以,之前很多應用就採用mac address。但是現在如果使用者公升級到ios7(及其以後的蘋果系統)後,他們機子的mac address就是一樣的,沒辦法做區分,只能棄用此方法,重新使用uuid來標識。如果使用uuid,就要考慮應用被刪除後再重新安裝時的處理。
乙個解決的辦法是:uuid一般只生成一次,儲存在ios系統裡面,如果應用刪除了,重灌應用之後它的uuid還是一樣的,除非系統重置 。但是不能保證在以後的系統公升級後還能用(如果系統儲存了該資訊就能用)。
mac位址
翻譯:從ios7及更高版本往後,如果你向ios裝置請求獲取mac位址,系統將返回乙個固定值「02:00:00:00:00:00」,如果你需要識別裝置的 唯一性,請使用uidevice的identifierforvendor屬性。(因廣告目的而需要識別裝置的應用,請考慮使用 asidentifiermanager的advertisingidentifier屬性作為替代)
這個mac位址是指什麼?有什麼用?
mac(medium/media access control)位址,用來表示網際網路上每乙個站點的識別符號,採用十六進製制數表示,共六個位元組(48位)。其中,前三個位元組是由ieee的註冊管理機構 ra負責給不同廠家分配的**(高位24位),也稱為「編制上唯一的識別符號」 (organizationally unique identifier),後三個位元組(低位24位)由各廠家自行指派給生產的介面卡介面,稱為擴充套件識別符號(唯一性)。
mac位址在網路上用來區分裝置的唯一性,接入網路的裝置都有乙個mac位址,他們肯定都是不同的,是唯一的。一部iphone上可能有多個mac位址,包括wifi的、sim的等,但是itouch和ipad上就有乙個wifi的,因此只需獲取wifi的mac位址就好了,也就是en0的位址。
形象的說,mac位址就如同我們身份證上的身份證號碼,具有全球唯一性。這樣就可以非常好的標識裝置唯一性,類似與蘋果裝置的udid號,通常的用途有:
1)用於一些統計與分析目的,利用使用者的操作習慣和資料更好的規劃產品;
直接使用「mac address」
使用「md5(mac address)」
使用「md5(mac address+bundle_id)」獲得「機器+應用」的唯一標識(bundle_id 是應用的唯一標識)
open udid:
沒有用到mac位址,同時能保證同一臺裝置上的不同應用使用同乙個openudid,只要使用者裝置上有乙個使用了openudid的應用存在時,其他後續安裝的應用如果獲取openudid,都將會獲得第乙個應用生成的那個。但是根據貢獻者的**和方法,和一些開發者的經驗,如果把使用了openudid方案的應用全部都刪除,再重新獲取openudid,此時的openudid就跟以前的不一樣。可見,這種方法還是不保險。
廣告標示符
是ios 6中另外乙個新的方法,提供了乙個方法advertisingidentifier,通過呼叫該方法會返回乙個nsuuid例項,最後可以獲得乙個uuid,由系統儲存著的。不過即使這是由系統儲存的,但是有幾種情況下,會重新生成廣告標示符。
如果使用者完全重置系統((設定程式 -> 通用 -> 還原 -> 還原位置與隱私) ,這個廣告標示符會重新生成。
另外如果使用者明確的還原廣告(設定程式-> 通用 -> 關於本機 -> 廣告 -> 還原廣告標示符) ,那麼廣告標示符也會重新生成。
關於廣告標示符的還原,有一點需要注意:如果程式在後台執行,此時使用者「還原廣告標示符」,然後再回到程式中,此時獲取廣 告標示符並不會立即獲得還原後的標示符。必須要終止程式,然後再重新啟動程式,才能獲得還原後的廣告標示符。
vendor標示符
也是在ios 6中新增的,跟advertisingidentifier一樣,該方法返回的是乙個 nsuuid物件,可以獲得乙個uuid。如果滿足條件「相同的乙個程式裡面-相同的vendor-相同的裝置」,那麼獲取到的這個屬性值就不會變。如果是「相同的程式-相同的裝置-不同的vendor,或者是相同的程式-不同的裝置-無論是否相同的vendor」這樣的情況,那麼這個值是不會相同的。
推送token+bundle_id的方法:
應用中增加推送用來獲取token
獲取應用bundle_id
根據token+bundle_id進行雜湊運算
iOS獲取裝置唯一識別符號
在開發中會遇到應用需要記錄裝置標示,即使應用解除安裝後再安裝也可重新識別的情況,在這寫一種實現方式 讀取裝置的uuid universally unique identifier 並通過keychain記錄。首先儲存裝置的uuid,可以使用類方法 id uuid 是乙個類方法,呼叫該方法可以獲得乙個...
iOS唯一識別符號
在2013年3月21日蘋果已經通知開發者,從2013年5月1日起,替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 cfuuid方法用來建立cfuuidref,並且可以獲得乙個相應的nsstring,如下 cfuuidref cfuuid cfuuidcre...
獲取唯一識別符號
ios 2.0版本以後uidevice提供乙個獲取裝置唯一識別符號的方法uniqueidentifier,通過該方法我們可以獲取裝置的序列號,這個也是目前為止唯一可以確認唯一的識別符號。但是,因為該唯一識別符號與手機一一對應,蘋果覺得可能會洩露使用者隱私,所以在ios 5.o之後該方法就被廢棄掉了。...