1. 获取设备信息
1.1 使用<code> [UIDevice currentDevice]</code>获取当前设备的一些信息(手机名称及系统版本等);
1.2 使用<code> [[NSBundle mainBundle] infoDictionary]</code>获取当前app的信息(app版本等);
1.3 使用<code> [NSLocale currentLocale]</code> 获取本地语言相关的一些东西;
获取本地设置的语言类型<code>[[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] firstObject]</code>或者<code>[[NSLocale preferredLanguages] firstObject]</code>
2. 标识相关
2.1 identifierForVendor <code> [[UIDevice currentDevice].identifierForVendor UUIDString];</code>
identifierForVendor对供应商来说是唯一的一个值,也就是说,由同一个公司发行的的app在相同的设备上运行的时候都会有这个相同的标识符。然而,如果用户删除了这个供应商的app然后再重新安装的话,这个标识符就会不一致。
2.2 identifierForAdvertising<code>[[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];</code>
advertisingIdentifier会返回给在这个设备上所有软件供应商相同的 一个值,所以只能在广告的时候使用。这个值会因为很多情况而有所变化,比如说用户初始化设备的时候便会改变
3. 使用苹果KeychainItemWrapper
存储identifierForVendor
解决唯一标识问题
3.1 下载
GenericKeychain下载链接
3.2 导入KeychainItemWrapper.h
和KeychainItemWrapper.m
到项目
3.3 导入Security.framework
并设置
因为KeychainItemWrapper.h
是依赖于苹果的系统库Security.framwork
写的,因此需要导入系统库。这个文件采用MRC,因此需要在提前编译设置一下
设置MRC文件混编
3.4 设置accessGroup
-
创建
创建plist文件KeychainAccessGroups.plist
文件
-
配置
Code Signing Entitlements
注意:
配置plist文件路径如果你没有设置Entitlements,则默认使用对应的程序的bundle name,比如com.jv.key1,表示只能给自己程序使用(即使创建时填写group仍然是私有)。
3.5 使用KeychainItemWrapper
注意:
- 如果创建对象时,没有指定group(group传入nil),则会默认添加你keychain-access-groups数组里第一个group。
- 创建时传入的group必须和plist文件里面一致,如果你程序添加的group并不存在你的配置文件中,程序会崩溃,表示无法添加。因此你只能添加你配置文件中支持的keychain。
补充说明:
gitHub第三方框架FCUUID
提供了相关的方法可以解决删除软件、更新系统后UUID改变的问题。。。链接 -> 哥是链接,轻戳。。。。
KeyChain基础
KeyChain研究
高级(数据安全) touchID延伸等
官方三方的用法
keychain和UUID
通过Safari浏览器获取iOS设备UDID(设备唯一标识符
网友评论