UDID和UUID的區別

weixin_33866037發表於2015-12-26

UDID

UDID是Unique Device Identifier的縮寫,中文意思是裝置唯一標識. 在很多需要限制一臺裝置一個賬號的應用中經常會用到,在Symbian時代,我們是使用IMEI作為裝置的唯一標識的,可惜的是Apple官方不允許開發者獲得裝置的IMEI.

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

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

UDID被棄用,可以使用UUID來作為裝置的唯一標識。獲取到UUID後,如果用NSUserDefaults儲存,當程式被解除安裝後重灌時,再獲得的UUID和之前就不同了。使用keychain儲存可以保證程式解除安裝重灌時,UUID不變。但當刷機或者升級系統後,UUID還是會改變的。

解決方案
使用SecureUDID,SecureUDID 是一個開源的基於沙箱機制的 UDID 解決方案,旨在解決蘋果因為廢棄了 UDID 後導致的隱私問題。

示例:

#import "SecureUDID.h"

NSString *domain     = @"com.example.myapp";
NSString *key        = @"difficult-to-guess-key";
NSString *identifier = [SecureUDID UDIDForDomain:domain  usingKey:key];

UUID

UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。UUID是一個軟體建構的標準,也是被開源軟體基金會(Open Software Foundation,OSF)的組織在分散式計算環境(Distributed Computing Environment,DCE)領域的一部份.UUID的目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定. 根據以上定義可知,同一裝置上的不同應用的UUID是互斥的,即能在改裝置上標識應用.但是並沒有明確指出能標識出裝有同一應用的不同裝置,據推測,這個UUID應該是根據裝置標識和應用標識生成唯一標識,再經過加密而來的.

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

相關文章