轉自http://www.cnblogs.com/zhulin/archive/2012/03/26/2417860.htmlphp
大多數應用都會用到蘋果設備的UDID號,UDID一般有如下兩種用途:html
1)用於一些統計與分析目的;【第三方統計工具如友盟,廣告商如ADMOB等】ios
2)將UDID做爲用戶ID來惟一識別用戶,省去用戶名,密碼等註冊過程。git
不過,2011年時,蘋果就宣佈ios5.0之後的系統中將再也不支持如下方法獲取用戶的UDID【蘋果設備的惟一識別碼】:github
[UIDevice currentDevice] uniqueIdentifier];
【注:對於已越獄了的設備,UDID並非惟一的.使用Cydia插件UDIDFaker,能夠爲每個應用分配不一樣的UDID】ide
同時,蘋果公司建議使用UUID【一種開放的軟件構建標準】來替代:工具
-(NSString*) uuid {
CFUUIDRef puuid = CFUUIDCreate( nil );
CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);
CFRelease(puuid);
CFRelease(uuidString);
return [result autorelease];
}
該方法每次都會獲取一個惟一的標識字符串,開發者能夠在應用第一次啓動時候調用一次,而後將該串存儲起來,以便之後替代UDID來使用。post
問題是若是用戶刪除該應用再次安裝時,又會生成新的字符串,因此不能保證惟一識別該設備。測試
而最近(2012年3月),有消息稱蘋果應用商店開始拒絕使用UDID的應用上架。ui
如今網上有一現成的解決方案,使用設備的Mac地址,由於Mac地址也是惟一的.unix有系統調用能夠獲取Mac地址.但有些事情須要注意:
1.iPhone可能有多個Mac地址,wifi的地址,以及SIM卡的地址.通常來說,咱們取en0的地址,由於他是iPhone的wifi的地址,是確定存在的.
2.Mac地址涉及到隱私,不該該胡亂將用戶的Mac地址傳播!因此咱們須要將Mac地址進行hash以後,才能做爲DeviceId上傳.
該解決方案源碼地址:https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
該方案提供了兩個方法:
uniqueDeviceIdentifier
(返回MAC和CFBundleIdentifier的MD5值)uniqueGlobalDeviceIdentifier
(返回MAC的MD5值)
使用方法:
#import "UIDevice+IdentifierAddition.h"
NSLog(@"%@",[[UIDevice currentDevice] uniqueDeviceIdentifier]);
NSLog(@"%@",[[UIDevice currentDevice] uniqueGlobalDeviceIdentifier]);
測試結果:
WIFI下:
UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX
3G下:
UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX
GPRS下
UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX
飛行模式下:
UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX
刪除應用重裝後:
UDID:XXXX21f1f19edff198e2a2356bf4XXXX
新生成的:XXXX7dc3c577446a2bcbd77935bdXXXX
參考整理自如下網頁:
http://stackoverflow.com/questions/6993325/uidevice-uniqueidentifier-deprecated-what-to-do-now
http://www.cocoachina.com/bbs/read.php?tid=92404
補充:還有兩個比較通用的開源解決方案:
OpenUDID:https://github.com/ylechelle/OpenUDID
SecureUDID:https://github.com/crashlytics/secureudid