UDID、UUID、IDFV、IDFA

UDID、UUID、IDFV、IDFA

1、UDID-废弃

UDID全称为Unique Device Identifier Description,是一个40个字符串的序号,用来标示唯一的iOS设备。

获取方式

[[UIDevice currentDevice] uniqueIdentifier];

​ iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。 许多开发者把UDID跟用户的真实姓名、密码、住址、其它数据关联起来;网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据。同时大部分应用确实在频繁传输UDID和私人信息。iOS5之后废弃

2、UUID-app内信息共享

全称时Universally Unique IDentifier,它是基于iOS设备上面某个单个的应用程序,只要用户没有完全删除应用程序,则这个 UUID 在用户使用该应用程序的时候一直保持不变。

获取方式

[NSUUID UUID].UUIDString

值是否变化

  • 如果用户删除了这个应用程序,然后再重新安装

  • 刷机或重装系统后uuid还是会改变

我们可以获取到UUID,然后把UUID保存到KeyChain里面,这样以后即使APP删了再装回来,也可以从KeyChain中读取回来。使用group还可以可以保证同一个开发商的所有程序针对同一台设备能够获取到相同的不变的UDID,以此来实现设备的唯一标示。

注意:但是刷机或重装系统后uuid还是会改变。

使用Keychain,将UUID当做密码信息来存储.
大致流程:

  1. 如果以上的都不支持,使用CFUUIDRef手动创建UUID
+ (NSString *)randomUUID {
    if(NSClassFromString(@"NSUUID")) { // only available in iOS >= 6.0
        return [[NSUUID UUID] UUIDString];
    }
    CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef cfuuid = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
    CFRelease(uuidRef);
    NSString *uuid = [((__bridge NSString *) cfuuid) copy];
    CFRelease(cfuuid);
    return uuid;
}
  1. 最后,添加到Keychain
+ (void)setValue:(NSString *)value forKey:(NSString *)key inService:(NSString *)service {
    NSMutableDictionary *keychainItem = [[NSMutableDictionary alloc] init];
    keychainItem[(__bridge id)kSecClass] = (__bridge id)kSecClassGenericPassword;
    keychainItem[(__bridge id)kSecAttrAccessible] = (__bridge id)kSecAttrAccessibleAlways;
    keychainItem[(__bridge id)kSecAttrAccount] = key;
    keychainItem[(__bridge id)kSecAttrService] = service;
    keychainItem[(__bridge id)kSecValueData] = [value dataUsingEncoding:NSUTF8StringEncoding];
    SecItemAdd((__bridge CFDictionaryRef)keychainItem, NULL);
}

如果更新了provisioning profile的话, Keychain data会丢失.所以我们应该将UUID在NSUserDefault备份.

[[NSUserDefaults standardUserDefaults] setObject:@”123456-1234-1234-12345678” forKey:@"deviceUID"];
[[NSUserDefaults standardUserDefaults] synchronize];
3、IDFA-同一设备下的不同app信息共享

IDFA全称为advertisingIdentifier,在同一个设备上的所有App都会取到相同的值,用于给开发者跟踪广告效果用的,可看作是iPhone 的设备临时身份证,说是临时身份证是因为它允许用户更换。

获取代码:

 #import <AdSupport/AdSupport.h>
// 用户是否限制广告追踪
 Boolean on = [[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled];
//如果可以获取到获取IDFA
 NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

值是否改变

  • 重置系统
  • 设置程序 -> 通用 -> 还原 -> 还原位置与隐私
  • 设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符 -> 重启。

注意:用户可以在 设置|隐私|广告追踪 里重置此id或者限制追踪,就会出现idfa不一致或取不到,故绝不可以作为业务分析的主id,来识别用户。

4、 IDFV-同一开发商下的不同app信息共享

全名:identifierForVendor ,是给Vendor(开发商)标识用户用的。在同一设备上,同一个Vender的应用的所有app,IDFV的值相同。

判断Vender是否相同是通过BundleID的反转的前两部分进行匹配,如果相同就是同一个Vender,例如对于com.taobao.app1, com.taobao.app2 这两个BundleID来说,就属于同一个Vender,共享同一个idfv的值。和idfa不同的是,idfv的值是一定能取到的,所以非常适合于作为内部用户行为分析的主id,来标识用户,替代OpenUDID。

获取代码:

#import <AdSupport/ASIdentifierManager.h>
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]

值是否改变

如果用户将属于该应用开发商的所有App都卸载,则IDFV的值会被重置,即使再重装此开发商的App,IDFV的值也和之前不同

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的修养

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值