udid替代方案

轉自http://www.cnblogs.com/zhulin/archive/2012/03/26/2417860.htmlphp

 

UDID替代方案

 

背景:

大多數應用都會用到蘋果設備的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

相關文章
相關標籤/搜索