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

  • 相关阅读:
    简单明了理解Java移位运算符
    mybatis(1):入坑篇
    货币格式化
    100 doors
    Object调用静态方法
    Rust入门篇 (1)
    BOM-字节序标记
    【Linux】设定一个能输入中文的英文环境!
    正则表达式验证 输入内容为小数位不超过2位的数值
    创建一个springMVC项目总结
  • 原文地址:https://www.cnblogs.com/Steak/p/3824511.html
Copyright © 2011-2022 走看看