关于设备唯一标示UUID的问题与数据存储在KeyChain里边
来源:互联网 发布:解析淘宝口令api 编辑:程序博客网 时间:2024/06/06 05:01
UUID.h 代码如下:
#import <Foundation/Foundation.h>@interface UUID : NSObject+(NSString *)getUUID;@end
UUID.m 代码如下:
#import "UUID.h"#import "KeyChainStore.h"#define KEY_USERNAME_PASSWORD @"com.company.app.usernamepassword"@implementation UUID+(NSString *)getUUID{ NSString * strUUID = (NSString *)[KeyChainStore load:@"com.company.app.usernamepassword"]; //首次执行该方法时,uuid为空 if ([strUUID isEqualToString:@""] || !strUUID) { //生成一个uuid的方法 CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault); strUUID = (NSString *)CFBridgingRelease(CFUUIDCreateString (kCFAllocatorDefault,uuidRef)); //将该uuid保存到keychain [KeyChainStore save:KEY_USERNAME_PASSWORD data:strUUID]; } return strUUID;}@end
KeyChainStore.h 代码如下
#import <Foundation/Foundation.h>@interface KeyChainStore : NSObject+ (void)save:(NSString *)service data:(id)data;+ (id)load:(NSString *)service;+ (void)deleteKeyData:(NSString *)service;@end
KeyChainStore.m 代码如下
//// KeyChainStore.m// DaBangHui//// Created by DBH on 16/4/15.// Copyright © 2016年张梦磊. All rights reserved.//#import "KeyChainStore.h"@implementation KeyChainStore+ (NSMutableDictionary *)getKeychainQuery:(NSString *)service { return [NSMutableDictionary dictionaryWithObjectsAndKeys: (id)kSecClassGenericPassword,(id)kSecClass, service, (id)kSecAttrService, service, (id)kSecAttrAccount, (id)kSecAttrAccessibleAfterFirstUnlock,(id)kSecAttrAccessible, nil];}+ (void)save:(NSString *)service data:(id)data { //Get search dictionary NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; //Delete old item before add new item SecItemDelete((CFDictionaryRef)keychainQuery); //Add new object to search dictionary(Attention:the data format) [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData]; //Add item to keychain with the search dictionary SecItemAdd((CFDictionaryRef)keychainQuery, NULL);}+ (id)load:(NSString *)service { id ret = nil; NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; //Configure the search setting //Since in our simple case we are expecting only a single attribute to be returned (the password) we can set the attribute kSecReturnData to kCFBooleanTrue [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; CFDataRef keyData = NULL; if (SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef *)&keyData) == noErr) { @try { ret = [NSKeyedUnarchiver unarchiveObjectWithData:(__bridge NSData *)keyData]; } @catch (NSException *e) { NSLog(@"Unarchive of %@ failed: %@", service, e); } @finally { } } if (keyData) CFRelease(keyData); return ret;}+ (void)deleteKeyData:(NSString *)service { NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; SecItemDelete((CFDictionaryRef)keychainQuery);}@end
直接调用
[UUID getUUID]
0 0
- 关于设备唯一标示UUID的问题与数据存储在KeyChain里边
- iOS编程——通过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)
- iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)
- ios 如何获得唯一手机设备的唯一标示UUID
- iOS中keyChain 实现UUID 设备唯一标识符碰到的问题
- iOS中keyChain 实现UUID 设备唯一标识符碰到的问题
- iOS编程——通过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(Swift 优化版)
- iOS编程——通过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC优化版)
- 利用KeyChain共享数据(唯一标示)
- iOS中利用KeyChain获取UUID(唯一标示符)
- UUID iOS设备唯一标示符
- iOS--获取设备唯一标示UUID
- keychain(钥匙串,设备唯一标示获取)
- android通用的UUID唯一标示符
- iOS使用keychain和uuid确定设备唯一标识
- 简单获取UUID 设备唯一标示 应用删除后设备标示不变
- SSKeychian 的理解 以及关于生成app的唯一标示,类似于UUID
- iOS UUID +Keychain 存储
- Java删除指定路径下所有文件和文件夹
- PooledConnectionFactory和CachingConnectionFactory
- Ubuntu安装mysql
- (转)理解inode
- 上拉电阻和下拉电阻的作用及应用场合
- 关于设备唯一标示UUID的问题与数据存储在KeyChain里边
- Huffman(哈夫曼) 编码压缩算法
- Mysql占用CPU过高如何优化,如何解决
- Q 语言初学者系列:(2)基本数据类型
- 随机森林 RandomForest java
- innodb_pool_buffer_size对innodb性能的影响
- Android 混淆,献给菜鸟
- React Native Android
- Q 语言初学者系列:(3)Lists 初级