如何生成应该适用于所有iOS版本的唯一标识符?

Gan*_*esh 12 iphone uniqueidentifier udid ios

我想获得应该支持所有iOS版本的唯一标识符.任何人都可以帮助我解决这个问题.如你所知,苹果不推荐使用UDID方法,因此有可能使用wifi-mac地址生成唯一ID.但苹果将删除iOS7版本中的wifi mac地址.所以我的要求是生成一个新的唯一代码,应该适用于所有iOS版本.谢谢提前..

注意:用户重启设备或重新安装应用程序后,请勿更改UDID.

Qua*_*Ali 40

我正在更新我的应用程序,该应用程序仅基于支持iOS 4.3及更高版本的 Unique Identifier工作.所以,

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));
Run Code Online (Sandbox Code Playgroud)

c)将其保存到Key Chain Utils ,否则它将生成一个新的Unique Every Time

最终守则

+ (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;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

详情请联系我们

  • 感觉像苹果讨厌开发者.. :-) (2认同)