我想获得应该支持所有 iOS 版本的唯一标识符。任何人都可以帮助我解决这个问题。如您所知,苹果不推荐使用 UDID 方法,因此有可能使用 wifi-mac 地址生成唯一 id。但苹果将在 iOS7 版本中删除 wifi mac 地址。所以我的要求是生成一个新的唯一代码应该适用于所有iOS版本。提前谢谢..
注意:一旦用户重新启动设备或重新安装应用程序,请勿更改 UDID。
我想获得应该支持所有 iOS 版本的唯一标识符。任何人都可以帮助我解决这个问题。如您所知,苹果不推荐使用 UDID 方法,因此有可能使用 wifi-mac 地址生成唯一 id。但苹果将在 iOS7 版本中删除 wifi mac 地址。所以我的要求是生成一个新的唯一代码应该适用于所有iOS版本。提前谢谢..
注意:一旦用户重新启动设备或重新安装应用程序,请勿更改 UDID。
我正在更新仅基于支持iOS 4.3 及更高版本的唯一标识符的应用程序。所以,
1)我无法使用[UIDevice currentDevice].uniqueIdentifier;
,因为它不再可用
2) 我无法使用[UIDevice currentDevice].identifierForVendor.UUIDString
,因为它仅适用于 iOS 6.0 及更高版本,并且无法用于较低的 iOS 版本。
3) mac 地址不是一个选项,因为它在 iOS-7 中是不允许的
4) OpenUDID 前段时间已被弃用,并且在 iOS-6 上也存在问题。
5) 广告标识符也不适用于 iOS-5 及以下版本
最后这就是我所做的
a)在项目中添加了SFHFKeychainUtils
b) 生成的 CFUUID 密钥字符串
CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
c) 将其保存到 Key Chain Utils 中,否则每次都会生成一个新的 Unique
最终代码
+ (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;
}
现在设备标识符更改为 UUID。您可以借助以下代码获取 UUID:
- (NSString *)getUUID
{
NSString *UUID = [[NSUserDefaults standardUserDefaults] objectForKey:@"uniqueID"];
if (!UUID) {
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
UUID = [(__bridge NSString*)string stringByReplacingOccurrencesOfString:@"-"withString:@""];
[[NSUserDefaults standardUserDefaults] setValue:UUID forKey:@"uniqueID"];
}
return UUID;
}
它适用于所有 iOS 版本。
我现在无法访问代码(如果您仍然需要,可以在几个小时内发布),但我所做的是在帮助程序类中创建一个静态方法“deviceIdentifier”。
该方法对当前 iOS 版本进行基本检查,如果低于 6.0,则返回 UDID,否则返回 uniqueIdentifier
让我知道你是否想要它的代码,我会在可以的时候发布它。如果我没记错的话,它只有 10-15 行左右,但有很大的不同,因为你可以调用 '[myHelper deviceIdentifier ]' 只要您需要设备 ID 而不必担心他们使用的是哪个 iOS 版本