iOS: 获取不变的UDID
iOS唯一标识的历史历程
iOS 6.0
在iOS6.0以前,是使用uniqueIdentifier来获取手机的唯一标识,后来苹果感觉这样会泄露用户隐藏,就封掉了这个方法;
iOS 6.0系统新增了两个用于替换uniqueIdentifier的接口
- identifierForVendor
- advertisingIdentifier
但是 identifierForVendor 会在卸载后再重装,就会改变,所以就不能当做手机的唯一标识使用。
后来,未来解决问题,程序员们想到了使用WiFi的mac地址来作为手机的唯一标识。很欢乐的使用着·······
但是············
iOS 7.0
iOS 7中苹果再一次无情的封杀mac地址,使用之前的方法获取到的mac地址全部都变成了02:00:00:00:00:00
聪明的程序员们,想到了用广告标示符作为手机唯一的标识。但是·······
只要用户重置了广告标示符以后,还是会获得一个新的广告标识。这样一来,广告标识付也不可以用了。。。。
这下该如何是好呢?
接下来就是介绍解决方法的时候了
使用KeyChain来保存获取到的唯一标示符呢,这样以后即使APP删了再装回来,也可以从KeyChain中读取回来,当然也不会害怕重置了广告标示符
FCUUID
在github搜一下UDID,发现这个东东的星星最多。看来一下readme,添加到自己的项目中测试,可用
设备标识在 完全抹掉iPhone的时候,仍然会变。学长只能帮到这了····
使用方法
1、点击下载所需文件
因为FCUUID需要依靠该作者的另外一个文件。所以这里有就把所有的文件放在了一起,供大家下载使用。
作者 githun地址 https://github.com/fabiocaccamo/FCUUID
2、在项目中添加 Security.framework
3、导入头文件
#import "FCUUID.h"
接下来就可以欢快的使用了
FCUUID提供的类方法
// 每次运行应用都会变
+(NSString *)uuid;
//changes each time (no persistent), but allows to keep in memory more temporary uuids
+(NSString *)uuidForKey:(id<NSCopying>)key; // 每次运行应用都会变 +(NSString *)uuidForSession; // 重新安装的时候会变 +(NSString *)uuidForInstallation; // 卸载后重装会变 +(NSString *)uuidForVendor; // 抹掉iPhone的时候才会变,适合做唯一标识 +(NSString *)uuidForDevice;