在平日寫代碼的時候,經(jīng)常會遇到需要生產(chǎn)唯一標(biāo)識符的時候,比如現(xiàn)在做的這個實(shí)時通訊的項(xiàng)目,需要給每條消息給一個MessageID,毫無疑問這個值應(yīng)該是唯一不會重復(fù)的。
一般來說有這樣幾種方法。(注意:本來打算是寫每次都隨機(jī)生成不一樣的標(biāo)識的方法的,順帶就想到每次生成固定字符的方法了。)
1.時間戳,
NSTimeInterval time = [[NSDate date] timeIntervalSince1970]*1000; double i=time; //NSTimeInterval返回的是double類型 NSString * uniqueString = [NSString stringWithFormat:@"%.f",i];
示例: 1463451753668
時間是不會回轉(zhuǎn)的,但是可以人為的調(diào)時間。另外這里用時間戳做MessageID 對方設(shè)備時間和我不一致,也有可能會出現(xiàn)ID重復(fù)的情況。
2、CFUUID
從iOS2.0開始,CFUUID就已經(jīng)出現(xiàn)了。它是CoreFoundatio包的一部分,因此API屬于C語言風(fēng)格。獲得的這個CFUUID值系統(tǒng)并沒有存儲。每次調(diào)用CFUUIDCreate,系統(tǒng)都會返回一個新的唯一標(biāo)示符。
CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); CFStringRef uuidStrRef= CFUUIDCreateString(kCFAllocatorDefault, uuidRef); CFRelease(uuidRef); NSString * retStr = [NSString stringWithString:(__bridge NSString *)uuidStrRef]; CFRelease(uuidStrRef);
示例: A2FEB483-CE39-4891-9A49-6C49ECA782E4
3、NSUUID
NSUUID在iOS 6中才出現(xiàn),這跟CFUUID幾乎完全一樣,只不過它是OC接口。:
NSString *uuid =[[NSUUID UUID] UUIDString];
示例: 9AB5953E-9D2F-48FA-9542-5857DAD2A3F9
4、identifierForVendor(不變,根據(jù)bundleID)
iOS6.0及以后,顧名思義,是給Vendor標(biāo)識用戶用的,每個設(shè)備在所屬同一個Vender的應(yīng)用里,都有相同的值。其中的Vender是指應(yīng)用提供商,但準(zhǔn)確點(diǎn)說,是通過BundleID的DNS反轉(zhuǎn)的前兩部分進(jìn)行匹配,如果相同就是同一個Vender,例如對于com.somecompany.appone,com.somecompany.apptwo 這兩個BundleID來說,就屬于同一個Vender,共享同一個idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常適合于作為內(nèi)部用戶行為分析的主id,來標(biāo)識用戶,替代OpenUDID。
注意:如果用戶將屬于此Vender的所有App卸載,則idfv的值會被重置,即再重裝此Vender的App,idfv的值和之前不同。
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
示例:9AFE0AE0-BD7E-4545-A519-F95B135B800B
5、advertisingIdentifier(不變,根據(jù)設(shè)備)
iOS6.0及以后。直譯就是廣告id, 在同一個設(shè)備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設(shè)的,用戶可以在 設(shè)置|隱私|廣告追蹤 里重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple默認(rèn)是允許追蹤的,而且一般用戶都不知道有這么個設(shè)置,所以基本上用來監(jiān)測推廣效果,是綽綽有余了。
注意:由于idfa會出現(xiàn)取不到的情況,故絕不可以作為業(yè)務(wù)分析的主id,來識別用戶。
#import <AdSupport/AdSupport.h> NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
示例: D4438804-35AA-455C-8078-927373D1EAC9
6、已經(jīng)廢棄的
[UIDevice uniqueIdentifier]
還有一個生成iOS設(shè)備唯一標(biāo)示符的方法是使用iOS設(shè)備的Media Access Control(MAC)地址。一個MAC地址是一個唯一的號碼,它是物理網(wǎng)絡(luò)層級方面分配給網(wǎng)絡(luò)適配器的。這個地址蘋果還有其他的名字,比如說是硬件地址(Hardware Address)或是Wifi地址,都是指同樣的東西。
7、OpenUDID 與 FCUUID
iOS開發(fā):如何獲取設(shè)備唯一標(biāo)識?以及多個App間如何共享同一個設(shè)備唯一標(biāo)識?
iOS生成唯一標(biāo)識符
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 現(xiàn)在我們生成唯一的標(biāo)識符的方法,主要是使用UUID,保存到Keychain里面,一邊就算你刪除了應(yīng)用,下一次安...
- 一.UDID(Unique Device Identifier) UDID的全稱是Unique Device Id...
- 在開發(fā)過程中,我們經(jīng)常會被要求獲取每個設(shè)備的唯一標(biāo)示,以便后臺做相應(yīng)的處理。我們來看看有哪些方法來獲取設(shè)備的唯一標(biāo)...
- iOS獲取設(shè)備唯一標(biāo)識的各種方法?IDFA、IDFV、UDID分別是什么含義? 一、UDID (Unique De...
- 8種iOS獲取設(shè)備唯一標(biāo)識的方法,希望對大家有用。 UDID UDID(Unique Device Identif...