标签:style blog http color 使用 数据
有些企业内部程序需要对访问程序的真机做白名单限制,对于设备唯一码,苹果做出了如下限制:?
1.从iOS7之后,获取MAC地址会返回固定值“02:00:00:00:00:00”。?
2.试图获取UDID(设备唯一码)的程序不会通过苹果的审核。
解决方案:
苹果推荐使用UUID(其实微软的GUID就是它的一种实现)。
我们可以在程序第一次启动时生成这个ID并保存起来,但是,如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备,所以这个ID不能存在沙盒里,应该存在KeyChain里。
KeyChain可以理解为是一个更安全的UserDefaults,它不会因为App卸载重装而消失,而且允许在一定限制的前提下令应用程序之间共享数据(参考帖子:http://www.2cto.com/kf/201311/255684.html)。
核心代码:
首先是生成UUID的代码,建议封装成静态类:
1 CFUUIDRef puuid = CFUUIDCreate(nil); 2 CFStringRef uuidString = CFUUIDCreateString(nil, puuid); 3 NSString *result = (NSString *)CFStringCreateCopy(NULL, uuidString); 4 CFRelease(puuid); 5 CFRelease(uuidString); 6 NSLog(@"%@" ,result);
对KeyChain的操作:
首先下载KeyChaind的包装库:http://download.csdn.net/download/u011439689/6877641
导入类库后导入Security.framework,代码如下:
1 //为应用程序定义KeyChain访问的包装器 2 KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"Account Number" accessGroup:@"YOUR_APP_ID_HERE.com.yourcompany.AppIdentifier"]; 3 4 //写入数据(这里的key一定要用系统提供的枚举) 5 [wrapper setObject:@"<帐号>" forKey:(id)kSecAttrAccount]; 6 [wrapper setObject:@"<帐号密码>" forKey:(id)kSecValueData]; 7 8 //取出数据 9 NSString *password = [wrapper objectForKey:(id)kSecValueData]; 10 11 //清理数据 12 [wrapper resetKeychainItem];
注意这些代码都是MRC下的。
标签:style blog http color 使用 数据
原文地址:http://www.cnblogs.com/Steak/p/3824511.html