iOS裝置唯一標示替代UDID MAC位址

2021-06-21 22:12:26 字數 1834 閱讀 1034

大多數應用都會用到蘋果裝置的udid號,udid通常有以下兩種用途:

1)用於一些統計與分析目的;【第三方統計工具如友盟,廣告商如admob等】

2)將udid作為使用者id來唯一識別使用者,省去使用者名稱,密碼等註冊過程。

不過,2023年時,蘋果就宣布ios5.0以後的系統中將不再支援以下方法獲取使用者的udid【蘋果裝置的唯一識別碼】:

[uidevice currentdevice] uniqueidentifier];

【注:對於已越獄了的裝置,udid並不是唯一的.使用cydia外掛程式udidfaker,可以為每乙個應用分配不同的udid】

同時,蘋果公司建議使用uuid【一種開放的軟體構建標準】來替代:

-(nsstring*) uuid

該方法每次都會獲取乙個唯一的標識字串,開發者可以在應用第一次啟動時候呼叫一次,然後將該串儲存起來,以便以後替代udid來使用。

問題是如果使用者刪除該應用再次安裝時,又會生成新的字串,所以不能保證唯一識別該裝置。

而最近(2023年3月),有訊息稱蘋果應用商店開始拒絕使用udid的應用上架。

現在網上有一現成的解決方案,使用裝置的mac位址,因為mac位址也是唯一的.unix有系統呼叫可以獲取mac位址.但有些事情需要注意: 

1.iphone可能有多個mac位址,wifi的位址,以及sim卡的位址.一般來講,我們取en0的位址,因為他是iphone的wifi的位址,是肯定存在的.

2.mac位址涉及到隱私,不應該胡亂將使用者的mac位址傳播!所以我們需要將mac位址進行hash之後,才能作為deviceid上傳.

該方案提供了兩個方法:

uniquedeviceidentifier(返回mac和cfbundleidentifier的md5值)

uniqueglobaldeviceidentifier(返回mac的md5值)

使用方法:

#import "uidevice+identifieraddition.h"

nslog(@"%@",[[uidevice currentdevice] uniquedeviceidentifier]);

nslog(@"%@",[[uidevice currentdevice] uniqueglobaldeviceidentifier]);

測試結果:

wifi下:

udid:***x21f1f19edff198e2a2356bf4***x 

新生成的:***x7dc3c577446a2bcbd77935bd***x 

3g下:

udid:***x21f1f19edff198e2a2356bf4***x

新生成的:***x7dc3c577446a2bcbd77935bd***x

gprs下

udid:***x21f1f19edff198e2a2356bf4***x

新生成的:***x7dc3c577446a2bcbd77935bd***x

飛行模式下:

udid:***x21f1f19edff198e2a2356bf4***x

新生成的:***x7dc3c577446a2bcbd77935bd***x

刪除應用重灌後:

udid:***x21f1f19edff198e2a2356bf4***x

新生成的:***x7dc3c577446a2bcbd77935bd***x 。

如果以上方案不行 可以試下這種方案 

參考整理自以下網頁:

iOS 裝置唯一標示

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

ios裝置唯一標示符

替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 蘋果已經警告過我們uniqueidentifier將不能再使用了,並且提供了另外兩個可選的。但是在程式中該選擇使用哪個呢?本文不會回答這個問題,具體用哪個是由你來根據程式的目的來做決定的。下面我將列出ios中...

ios裝置唯一標示符

原文 替代的方案是開發者應該使用 在ios 6中介紹的vendor或advertising標示符 蘋果已經警告過我們uniqueidentifier將不能再使用了,並且提供了另外兩個可選的。但是在程式中該選擇使用哪個呢?本文不會回答這個問題,具體用哪個是由你來根據程式的目的來做決定的。下面我將列出i...