**:
大多數應用都會用到蘋果裝置的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
參考整理自以下網頁:
補充:還有兩個比較通用的開源解決方案:
openudid:
secureudid:
UDID替代方案
from 大多數應用都會用到蘋果裝置的udid號,udid通常有以下兩種用途 1 用於一些統計與分析目的 第三方統計工具如友盟,廣告商如admob等 2 將udid作為使用者id來唯一識別使用者,省去使用者名稱,密碼等註冊過程。不過,2011年時,蘋果就宣布ios5.0以後的系統中將不再支援以下方法...
UDID替代方案
大多數應用都會用到蘋果裝置的udid號,udid通常有以下兩種用途 1 用於一些統計與分析目的 第三方統計工具如友盟,廣告商如admob等 2 將udid作為使用者id來唯一識別使用者,省去使用者名稱,密碼等註冊過程。不過,2011年時,蘋果就宣布ios5.0以後的系統中將不再支援以下方法獲取使用者...
iOS開發 用keychain替代UDID
從2013 5 1日開始蘋果就禁止對uuid的應用的通過了。所以我們需要用一些辦法替換,下面我就是用keychain的訪問替換掉uuid的。那麼,關於keychain的應用,apple提供了乙個叫generickeychain的例子程式,在這裡 其中封裝了乙個簡化keychain操作的類 keych...