UDID替代方案


背景:

大多數應用都會用到蘋果設備的UDID號,UDID通常有以下兩種用途:

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

2)將UDID作為用戶ID來唯一識別用戶,省去用戶名,密碼等注冊過程。


不過,2011年時,蘋果就宣布ios5.0以后的系統中將不再支持以下方法獲取用戶的UDID【蘋果設備的唯一識別碼】:

[UIDevice currentDevice] uniqueIdentifier];

【注:對於已越獄了的設備,UDID並不是唯一的.使用Cydia插件UDIDFaker,可以為每一個應用分配不同的UDID】

 

同時,蘋果公司建議使用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來使用。

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

 

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

 

替代方案:

現在網上有一現成的解決方案,使用設備的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM