iOS获取设备唯⼀标识的各种⽅法?IDFA、IDFV、UDID分别是什么含义?
iOS获取设备唯⼀标识的各种⽅法?IDFA、IDFV、UDID分别是什么含义?
[摘要:1、UDID (Unique Device Identifier) UDID的齐称是Unique Device Identifier,望⽂⽣义,它便是苹果IOS装备的独⼀辨认码,它由40个字符的字母战数字构成。正在良多
须要限定]
⼀、UDID (Unique Device Identifier)
UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯⼀识别码,它由40个字符的字母和数字组成。在很多需要限制⼀台设备⼀个账号的应⽤中经常会⽤到。在iOS5中可以获取到设备的UDID,后来被苹果禁⽌了。
⼆、UUID(Universally Unique Identifier)
UUID是Universally Unique Identifier的缩写,中⽂意思是通⽤唯⼀识别码。它是让分布式系统中的所有元素,都能有唯⼀的辨识资讯,⽽不需要透过中央控制端来做辨识资讯的指定。这样,每个⼈都可以建⽴不与其它⼈冲突的 UUID。在此情况下,
开发者可以在应⽤第⼀次启动时调⽤⼀次,然后将该串存储起来,替代UDID来使⽤。但是,如果⽤户删除该应⽤再次安装时,⼜会⽣成新的字符串,所以不能保证唯⼀识别该设备。使⽤UUID,就要考虑应⽤被删除后再重新安装时的处理。⼀个解决三、MAC Address
⽤来表⽰互联⽹上每⼀个站点的标识符,采⽤⼗六进制数表⽰,共六个字节(48位)。其中,前三个字节是由IEEE的注册管理机构 RA负责给不同⼚家分配的代码(⾼位24位),
也称为“编制上唯⼀的标识符” (Organizationally Unique Identifier),后三个字节(低位24位)由各⼚家⾃⾏指派给⽣产的适配器接⼝,称为扩展标识符(唯⼀性)。
MAC地址在⽹络上⽤来区分设备的唯⼀性,接⼊⽹络的设备都有⼀个MAC地址,他们肯定都是不同的,是唯⼀的。⼀部iPhone上可能有多个MAC地址,包括WIFI的、SIM的
等,但是iTouch和iPad上就有⼀个WIFI的,因此只需获取WIFI的MAC地址就好了,也就是en0的地址。
MAC地址就如同我们⾝份证上的⾝份证号码,具有全球唯⼀性。这样就可以⾮常好的标识设备唯⼀性,类似与苹果设备的UDID号,通常的⽤途有:1)⽤于⼀些统计与分析⽬
适配器字符串是什么
的,利⽤⽤户的操作习惯和数据更好的规划产品;2)作为⽤户ID来唯⼀识别⽤户,可以⽤游客⾝份使⽤app⼜能在服务器端保存相应的信息,省去⽤户名、密码等注册过程。
使⽤Mac地址⽣成设备的唯⼀标识主要分三种:
1、直接使⽤“MAC Address”
2、使⽤“MD5(MAC Address)”
3、使⽤“MD5(Mac Address+bundle_id)”获得“机器+应⽤”的唯⼀标识(bundle_id 是应⽤的唯⼀标识)
在iOS7之后,如果请求Mac地址都会返回⼀个固定值。
四、IDFA(identifierForIdentifier)
⼴告标⽰符,适⽤于对外:例如⼴告推⼴,换量等跨应⽤的⽤户追踪等。
是iOS 6中另外⼀个新的⽅法,提供了⼀个⽅法advertisingIdentifier,通过调⽤该⽅法会返回⼀个NSUUID实例,最后可以获得⼀个UUID,由系统存储着的。不过即使这是由系统存储的,但是有⼏种情况下,会重新⽣成⼴告标⽰符。如果⽤户完全重置
在同⼀个设备上的所有App都会取到相同的值,是苹果专门给各⼴告提供商⽤来追踪⽤户⽽设的,⽤户可以在设置|隐私|⼴告追踪⾥重置此id的值,或限制此id的使⽤,故此id有
可能会取不到值,但好在Apple默认是允许追踪的,⽽且⼀般⽤户都不知道有这么个设置,所以基本上⽤来监测推⼴效果,是戳戳有余了。
注意:由于idfa会出现取不到的情况,故绝不可以作为业务分析的主id,来识别⽤户。
代码:
#import <AdSupport/AdSupport.h>
NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
五、IDFV(identifierForVendor)
Vindor标⽰符,适⽤于对内:例如分析⽤户在应⽤内的⾏为等。
是给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];
六、OPEN UDID
每台iOS设备的OpenUDID是通过第⼀个带有OpenUDID SDK包的App⽣成,如果你完全删除全部带有OpenUDID SDK包的App(⽐如恢复系统等),那么OpenUDID会重新⽣成,⽽且和之前的值会不同,相当于新设备;
优点是没有⽤到MAC地址;不同设备能够获取各⾃唯⼀的识别码,保证了唯⼀性,可以⽤于以往UDID的相关⽤途;从代码分析OpenUDID的获取,识别码获取⽅便并且保存谨慎。缺点是当将设备上所有使⽤了OpenUDID⽅案的应⽤程序删除,且设备那么当因为⽤户⼲预或者恶意程序,致使UIPasteboard数据清除,从⽽导致OpenUDID被删除,重装也会获取新的OpenUDID。
OpenUDID⽣成唯⼀识别码的代码:
1. unsigned char result[16];
2.        const charchar *cStr = [[[NSProcessInfo processInfo] globallyUniqueString] UTF8String];
3.        CC_MD5( cStr, strlen(cStr), result );
4.        _openUDID = [NSString stringWithFormat:
5.                      @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%08x",
6.                      result[0], result[1], result[2], result[3],
7.                      result[4], result[5], result[6], result[7],
8.                      result[8], result[9], result[10], result[11],
9.                      result[12], result[13], result[14], result[15],
10.                      arc4random() % 4294967295];

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。