相关链接
- 详解iOS开发中Keychain的相关使用
- iOS钥匙串KeyChain相关参数的说明
- iOS中使用钥匙串
- -25299 reason: ‘Couldn’t add the Keychain Item.’
- 钥匙串.zip 苹果官方提供三方
使用方法
可参考相关示例UUID测试.zip
1. 首先引入Security.framework框架
2. 在使用的地方或者PrefixHeader.pch中直接引入框架头文件和三方头文件
#import <Security/Security.h>
#import "KeychainItemWrapper.h"
3. 将KeychainItemWrapper转为ARC(-fno-objc-arc)
4. 调用相关代码
// 用到的宏
#define UUID @"UUID"
#define USER_DEFAULT [NSUserDefaults standardUserDefaults]
/**
存取钥匙串的基本逻辑:
每次开启app,先从钥匙串中根据idetifier提取与kSecValueData(存储UUID)和kSecAttrService(可以作为判断条件),
如果提取的kSecValueData字符串长度为0或者kSecAttrService值对应的不正确,则从设备中提取UUID并对kSecAttrService
进行赋值,然后取出放入到NSUserDefault,用于全局使用, 如果正确,则直接存入NSUserDefault。
*/
/** 初始化一个保存用户帐号的KeychainItemWrapper */
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]
initWithIdentifier:@"lvyouquan"
accessGroup:nil];
NSString *UUIDstr = [keychainItem objectForKey:(id)kSecValueData];
NSString *AttrService = [keychainItem objectForKey:(id)kSecAttrService];
if (!UUIDstr.length || ![AttrService isEqualToString:@"MY_APP_CREDENTIALS"]) {
// 获取失败
// 添加判断条件 这个必须赋值,否则崩溃
[keychainItem setObject:@"MY_APP_CREDENTIALS" forKey:(id)kSecAttrService];
// 将uuid保存到钥匙串中
NSString *mobileID = [[UIDevice currentDevice].identifierForVendor UUIDString];
[keychainItem setObject:mobileID forKey:(__bridge id)kSecValueData];
// 取出uuid
UUIDstr = [keychainItem objectForKey:(id)kSecValueData];
// 将UUID保存到本地,便于获取
[USER_DEFAULT setObject:UUIDstr forKey:UUID];
} else {
//获取成功
// 将UUID保存到本地,便于获取
[USER_DEFAULT setObject:UUIDstr forKey:UUID];
}
NSLog(@"UUID ======= %@",[USER_DEFAULT objectForKey:UUID]);