Objective c ios8上每个设备的唯一标识符
在使用7 serialnumber之前,我需要为ios ios8中的每个设备都有一个唯一的标识符,但不再有效,我可以使用??这是唯一的,不会改变应用程序的设计和重新安装。始终保持不变您可以将小数据项保存在钥匙链中,即使删除并重新安装应用程序,这些数据项也会保持不变 在应用程序启动时检索if序列号,如果序列号不存在于密钥链中,则创建UUID并将其保存在密钥链中。使用钥匙链Objective c ios8上每个设备的唯一标识符,objective-c,iphone,ios8,Objective C,Iphone,Ios8,在使用7 serialnumber之前,我需要为ios ios8中的每个设备都有一个唯一的标识符,但不再有效,我可以使用??这是唯一的,不会改变应用程序的设计和重新安装。始终保持不变您可以将小数据项保存在钥匙链中,即使删除并重新安装应用程序,这些数据项也会保持不变 在应用程序启动时检索if序列号,如果序列号不存在于密钥链中,则创建UUID并将其保存在密钥链中。使用钥匙链键,如“SerialNumber” UUID将在该设备上的卸载和重新安装期间存在,并保证在所有空间和时间内都是唯一的。解决方案
键
,如“SerialNumber”
UUID将在该设备上的卸载和重新安装期间存在,并保证在所有空间和时间内都是唯一的。解决方案
创建钥匙链
H=
进口
@接口SimpleKeychain:NSObject
- (void)保存:(NSString*)服务数据:(id)数据李>
- (id)加载:(NSString*)服务李>
- (void)删除:(NSString*)服务李>
- (NSMutableDictionary*)getKeychainQuery:(NSString*)服务{ 返回[NSMutableDictionary dictionaryWithObjectsAndKeys: (uu桥id)kSecClassGenericPassword,(uu桥id)kSecClass, 服务,(uu桥id)kSecAttrService, 服务,(_桥id)kSecAttrAccount, (uu桥id)ksecattracccessibleafterfirstunlock,(uu桥id)ksecattracessible, 零]; }
- (void)保存:(NSString*)服务数据:(id)数据{ NSMutableDictionary*keychainQuery=[self-getKeychainQuery:service]; SecItemDelete((uu桥CFDictionaryRef)keychainQuery); [keychainQuery setObject:[NSKeyedArchivedDataWithRootObject:data]forKey:(_桥id)kSecValueData]; SecItemAdd((uu桥CFDictionaryRef)keychainQuery,NULL); }
- (id)加载:(NSString*)服务{ id-ret=零; NSMutableDictionary*keychainQuery=[self-getKeychainQuery:service]; [keychainQuery setObject:(id)kCFBooleanTrue forKey:(_桥id)kSecReturnData]; [keychainQuery setObject:(u桥id)kSecMatchLimitOne forKey:(u桥id)kSecMatchLimit]; CFDataRef keyData=NULL; if(SecItemCopyMatching((uu桥CFDictionaryRef)keychainQuery,(CFTypeRef*)和keyData)=noErr){ @试一试{ ret=[NSKeyedUnarchiver unarchiveObjectWithData:(uu-bridge-NSData*)keyData]; } @捕获(N例外*e){ NSLog(@“未归档%@失败:%@”,服务,e); } @最后{} } if(keyData)CFRelease(keyData); 返回ret; }
- (void)删除:(NSString*)服务{ NSMutableDictionary*keychainQuery=[self-getKeychainQuery:service]; SecItemDelete((uu桥CFDictionaryRef)keychainQuery); }