首页 > 代码库 > 获取设备唯一码
获取设备唯一码
有些企业内部程序需要对访问程序的真机做白名单限制,对于设备唯一码,苹果做出了如下限制:?
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下的。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。