zoukankan      html  css  js  c++  java
  • 获取设备唯一码

    有些企业内部程序需要对访问程序的真机做白名单限制,对于设备唯一码,苹果做出了如下限制:


    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下的。

  • 相关阅读:
    Day 20 初识面向对象
    Day 16 常用模块
    Day 15 正则表达式 re模块
    D14 模块 导入模块 开发目录规范
    Day 13 迭代器,生成器,内置函数
    Day 12 递归,二分算法,推导式,匿名函数
    Day 11 闭包函数.装饰器
    D10 函数(二) 嵌套,命名空间作用域
    D09 函数(一) 返回值,参数
    Day 07 Day08 字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/Steak/p/3824511.html
Copyright © 2011-2022 走看看