关于IOS的唯一标识总结
APPLE官方宣布在2013年5月后,使用 UUID的APP将不能通过审核,同时APPLE增加了广告标识符(IDFA)和IDFV。
1、有什么方法获取UUID?
//CFUUID CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault); NSString *cfuuidStr = CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault,cfuuid)); /NSUUID NSString *nsuuidStr = [[NSUUID UUID]UUIDString];
经过在IOS10上测试,发现每次生产的uuid均不相同,所以不具备作为唯一标识符的能力。
2、获取IDFA(广告标识符)
#import <AdSupport/AdSupport.h> //获取限制开关是否打开 BOOL isTrackEnabled = [[ASIdentifierManager sharedManager]isAdvertisingTrackingEnaled]; //获取IDFA(广告标识符) NSString * idsaStr = [[[ASIdentifierManager sharedManager]advertisingIdentfier]UUIDString];
优点:广告标识符,设备中全部App获取的均为一致,即使删除了App重新下载仍为一致。
缺点:1、若还原出厂设置,清空广告标识符,IDFA则会改变;
2、限制广告的开关,只是一个bool值,并不会影响我们回去IDFA,但每次改变开关,均会导致IDFV改变;
故广告标识符,相对来说,可以作为我们App一个唯一性判断标准。
3、IDFV(针对Vender的identifer)
//获取IDFV(Vender标识符) NSString * idsvStr = [[[ASIdentifierManager sharedManager]identifierForVendor]UUIDString];
这是针对Vender的一个标识符,何为Vender,其实就是我们bundleIdentifer的前面部分,例如com.apple.app1和com.apple.app2则具有相同的Vender(com.apple)。
优点:1、同一设备相同Vender的App,获取到的IDFV均为一致;
2、用户无法直接手动限制或改变IDFV
缺点:1、删除所有同一Vender下的APP,在重新下载,IDFV则会改变(对于一般公司App数目不多,可以理解为,删除重新下载,IDFV就会发生改变)
2、还原出厂设置会改变IDFV
故IDFV的稳定性不如IDFA,应优先选择IDFV,也可以两者相结合来追踪自己的App用户。
4、mac地址
MAC地址是:IEEE 进行管理和分配。每个MAC地址由两部分组成,分别是供应商代码和序列号。其中前24 位二进制代表该供应商代码。剩下的24 位由厂商自己分配。所以由IEEE保证前24位不重复,然后再由各个厂商保证后24位不重复,合起来,整个48bit的MAC地址就不会有重复的了。
但是在IOS7苹果对于sysctl和ioctl进行了技术处理,让MAC地址返回02:00:00:00:00:00。