UDID和UUID的區別
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來使用。問題是如果使用者刪除該應用再次安裝時,又會生成新的字串,所以不能保證唯一識別該裝置。
相關文章
- iOS UDID與UUIDiOSUI
- UUID和GUID的區別GUI
- UUID 和 GUID 的區別GUI
- iOS的UDID廢用以及UUID配合keychain的替換方案實現iOSUIAI
- 開發中常用工具 - 獲取裝置的唯一標識、UDID、UUID、keychain儲存UUID、判斷網路型別等UIAI型別
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- MySQL的server_uuid獲取之uuid()函式和uuid_short()函式MySqlServerUI函式
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 和區別
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別
- WebApi和MVC的區別WebAPIMVC
- service和systemctl的區別
- GET和POST的區別?
- GET和POST的區別
- button和submit的區別MIT
- GET 和 POST 的區別
- 【Java】equals 和 == 的區別Java
- django和flask的區別DjangoFlask
- promise 和 Observable 的區別Promise