关于IOS的唯一标识总结

时间:2022-09-29 17:35:31

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。