在平日写代码的时候,经常会遇到需要生产唯一标识符的时候,比如现在做的这个实时通讯的项目,需要给每条消息给一个MessageID,毫无疑问这个值应该是唯一不会重复的。
一般来说有这样几种方法。(注意:本来打算是写每次都随机生成不一样的标识的方法的,顺带就想到每次生成固定字符的方法了。)
1.时间戳,
NSTimeInterval time = [[NSDate date] timeIntervalSince1970]*1000; double i=time; //NSTimeInterval返回的是double类型 NSString * uniqueString = [NSString stringWithFormat:@"%.f",i];
示例: 1463451753668
时间是不会回转的,但是可以人为的调时间。另外这里用时间戳做MessageID 对方设备时间和我不一致,也有可能会出现ID重复的情况。
2、CFUUID
从iOS2.0开始,CFUUID就已经出现了。它是CoreFoundatio包的一部分,因此API属于C语言风格。获得的这个CFUUID值系统并没有存储。每次调用CFUUIDCreate,系统都会返回一个新的唯一标示符。
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中才出现,这跟CFUUID几乎完全一样,只不过它是OC接口。:
NSString *uuid =[[NSUUID UUID] UUIDString];
示例: 9AB5953E-9D2F-48FA-9542-5857DAD2A3F9
4、identifierForVendor(不变,根据bundleID)
iOS6.0及以后,顾名思义,是给Vendor标识用户用的,每个设备在所属同一个Vender的应用里,都有相同的值。其中的Vender是指应用提供商,但准确点说,是通过BundleID的DNS反转的前两部分进行匹配,如果相同就是同一个Vender,例如对于com.somecompany.appone,com.somecompany.apptwo 这两个BundleID来说,就属于同一个Vender,共享同一个idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。
注意:如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同。
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
示例:9AFE0AE0-BD7E-4545-A519-F95B135B800B
5、advertisingIdentifier(不变,根据设备)
iOS6.0及以后。直译就是广告id, 在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,用户可以在 设置|隐私|广告追踪 里重置此id的值,或限制此id的使用,故此id有可能会取不到值,但好在Apple默认是允许追踪的,而且一般用户都不知道有这么个设置,所以基本上用来监测推广效果,是绰绰有余了。
注意:由于idfa会出现取不到的情况,故绝不可以作为业务分析的主id,来识别用户。
#import <AdSupport/AdSupport.h> NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
示例: D4438804-35AA-455C-8078-927373D1EAC9
6、已经废弃的
[UIDevice uniqueIdentifier]
还有一个生成iOS设备唯一标示符的方法是使用iOS设备的Media Access Control(MAC)地址。一个MAC地址是一个唯一的号码,它是物理网络层级方面分配给网络适配器的。这个地址苹果还有其他的名字,比如说是硬件地址(Hardware Address)或是Wifi地址,都是指同样的东西。
7、OpenUDID 与 FCUUID
iOS开发:如何获取设备唯一标识?以及多个App间如何共享同一个设备唯一标识?
iOS生成唯一标识符
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一.UDID(Unique Device Identifier) UDID的全称是Unique Device Id...
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义? 一、UDID (Unique De...