ios8上每个设备的唯一标识符

时间:2014-10-24 22:23:48

标签: objective-c iphone ios8

我需要为ios ios8中的每个设备使用一个唯一的标识符,然后再使用7个serialnumber但不再有效,我可以使用??这是独一无二的,不会改变应用程序的desistalar并重新安装。总是一样的

2 个答案:

答案 0 :(得分:0)

您可以将小数据项保存在钥匙串中,即使删除并重新安装该应用,它们也会一直存在。

在应用程序启动时检索if序列号,如果Keychain中不存在序列号,则创建UUID并将其保存在Keychain中。使用钥匙串key,例如" SerialNumber"。

UUID将在整个卸载过程中存在并在该设备上重新安装,并保证在所有空间和时间内都是唯一的。

答案 1 :(得分:0)

溶液

创建钥匙串

H =

import

@interface SimpleKeychain:NSObject

  • (void)save:(NSString *)service data:(id)data;
  • (id)load:(NSString *)service;
  • (void)delete:(NSString *)service;

@end

M =

import" SimpleKeychain.h"

@implementation SimpleKeychain

  • (NSMutableDictionary *)getKeychainQuery:(NSString *)service { return [NSMutableDictionary dictionaryWithObjectsAndKeys:         (__bridge id)kSecClassGenericPassword,(__ bridge id)kSecClass,         service,(__ bridge id)kSecAttrService,         service,(__ bridge id)kSecAttrAccount,         (__bridge id)kSecAttrAccessibleAfterFirstUnlock,(__ bridge id)kSecAttrAccessible,         零]; }

  • (void)save:(NSString *)服务数据:(id)data { NSMutableDictionary * keychainQuery = [self getKeychainQuery:service]; SecItemDelete((__ bridge CFDictionaryRef)keychainQuery); [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(__ bridge id)kSecValueData]; SecItemAdd((__ bridge CFDictionaryRef)keychainQuery,NULL); }

  • (id)load:(NSString *)service { id ret = nil; NSMutableDictionary * keychainQuery = [self getKeychainQuery:service]; [keychainQuery setObject:(id)kCFBooleanTrue forKey:(__ bridge id)kSecReturnData]; [keychainQuery setObject:(__ bridge id)kSecMatchLimitOne forKey:(__ bridge id)kSecMatchLimit]; CFDataRef keyData = NULL; if(SecItemCopyMatching((__ bridge 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); 返回; }

  • (void)delete:(NSString *)service { NSMutableDictionary * keychainQuery = [self getKeychainQuery:service]; SecItemDelete((__ bridge CFDictionaryRef)keychainQuery); }

@end