UDID
全名:Unique Device Identifie(设备唯一标识符)
说明:UDID,即设备唯一标识符,这是除序列号之外每台iOS设备的独一无二的号码。UDID只是和设备相关的,是用来区分每一个唯一的iOS设备(包括iPhone、iPad等),是由40个字符的字母和数字组成的。
作用:可以关联其它各种数据到相关设备上。比如:程序发布前的通过测试版本进行测试等都需要UDID。
获取方法: UDID可以直接通过ITunes查看,手机连接上电脑之后点击序列号就会变成UDID,如下图。也可以通过Xcode查看:点击Window->Devices and Simulators->identifier就能看到,如下图。
通过ITunes查看UDID
通过XCode查看UDID
代码获取方法:
在iOS5之后,苹果就禁止了通过代码获取UDID。转而用[UIDevice currentDevice].identifierForVendor.UUIDString替代。但是这个不是真正的UDID.关闭的原因是因为隐私问题。之后苹果禁止上架试图获取UDID的应用。
UUID
全名:Universally Unique Identifier(通用唯一标识符)
说明:UUID是一个通过小横线连接起来的32位的十六进制序列。如0DEF9507-EB5A-471A-8BC7-638A0B0A327D。但是UUID并不像UDID一样是惟一的,它只是在某一时空是唯一的,当每次写在应用之后获取到的UUID都是不一样的。比如通过一个for循环打印一下UUID能就能看出不一样:
for (int i = 0; i < 5; i ++) {
NSLog(@"uuid %zd = %@", i,[NSUUID UUID].UUIDString);
}
打印结果
那是不是这样就不能唯一标识了呢?并不是,开发者可以将这个UUID保存在keychain里面,以此作为唯一标识符。接下来会讲到。
代码获取UUID:
NSString * uuid = [NSUUID UUID].UUIDString;
用keychain保存UUID
keychain介绍
苹果在OS X和IOS系统都有提供的一种安全存储敏感信息的工具,即keychain。所谓铭感信息,即用户ID、password、certificate等。keychain里面存储的数据是item。这些item是以key-value的形式存储的,可以理解为Dictonary。利用keychain存储这些信息可以提高用户体验,免除用户重复输入用户名和密码等繁琐的操作。同时,苹果的这套keychain Service安全机制能够保障存储的信息不会被窃取,所以可以用来存储UUID等。
为什么要用keychain?
keychain的数据并非是存放在应用程序的沙盒中,所以即使当用户删除app,存储的资料依然在keychain中。用户再一次安装该应用程序的时候又可以从keychain中获取数据。
keychain的数据有经过加密,更安全。
keychain提供了一个公共区"keychain access group",可以通过这个group实现应用程序之间的数据共享。
keychain中的item
keychain中是存放的item。并且可以存放任意数量的item。keychain会对需要加密的item进行加密保护,比如:密码。而对于像证书就就不会加密。
在苹果提供的API中可以看到有五种类型的item:
kSecClassInternetPassword //Specifies Internet password items.
kSecClassGenericPassword //Specifies generic password items.
kSecClassCertificate //Specifies certificate items.
kSecClassKey //Specifies key items.
<