我正在更新我的应用程序,该应用程序仅基于支持 iOS 4.3 及更高版本的唯一标识符运行。所以,
1) 我无法使用[UIDevice currentDevice].uniqueIdentifier;,因为它不再可用
2) 我无法使用[UIDevice currentDevice].identifierForVendor.UUIDString,因为它仅适用于 iOS 6.0 及更高版本,并且无法用于较低的 iOS 版本。
3) mac 地址不是一个选项,因为它在 iOS-7 中是不允许的
4) OpenUDID 之前是 deprecated,并且在 iOS-6 上也有问题。
5) 广告标识符也不适用于 iOS-5 及以下版本
我终于做到了
a) 将SFHFKeychainUtils 添加到项目中
b) 生成的 CFUUID 密钥字符串
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
c) 将其保存到 Key Chain Utils 否则每次都会生成一个新的唯一性
最终代码
+ (NSString *)GetDeviceID {
NSString *udidString;
udidString = [self objectForKey:@"deviceID"];
if(!udidString)
{
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
CFRelease(cfuuid);
[self setObject:udidString forKey:@"deviceID"];
}
return udidString;
}
+(void) setObject:(NSString*) object forKey:(NSString*) key
{
NSString *objectString = object;
NSError *error = nil;
[SFHFKeychainUtils storeUsername:key
andPassword:objectString
forServiceName:@"LIB"
updateExisting:YES
error:&error];
if(error)
NSLog(@"%@", [error localizedDescription]);
}
+(NSString*) objectForKey:(NSString*) key
{
NSError *error = nil;
NSString *object = [SFHFKeychainUtils getPasswordForUsername:key
andServiceName:@"LIB"
error:&error];
if(error)
NSLog(@"%@", [error localizedDescription]);
return object;
}
For further Details