Как создать уникальный идентификатор, который должен работать во всех версиях iOS?

Я хочу получить уникальный идентификатор, который должен поддерживать все версии iOS. Может ли кто-нибудь помочь мне по этой проблеме. Как вы знаете, яблоко устарело, это метод UDID, поэтому есть возможность генерировать уникальный идентификатор, используя wifi-mac-адрес. Но яблоко собирается удалить MAC-адрес wifi в версии iOS7. Поэтому мое требование - создать новый уникальный код, который должен работать во всех версиях iOS. Спасибо заранее.

Примечание. Не изменяйте UDID после перезапуска устройства или переустановки приложения.

Ответ 1

Я обновлял приложение, которое работало только с уникальным идентификатором, который поддерживал iOS 4.3 и выше. Итак,

1) Мне не удалось использовать [UIDevice currentDevice].uniqueIdentifier;, поскольку он больше не был доступен

2) Я не мог использовать [UIDevice currentDevice].identifierForVendor.UUIDString, потому что он был доступен только в iOS 6.0 и более поздних версиях и не смог использовать его для более низких версий iOS.

3) Макинтош-адрес не был вариантом, поскольку он не был разрешен в 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;
}

enter image description here

Дополнительные сведения

Ответ 2

Теперь Идентификатор устройства изменится на 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.

Ответ 3

У меня нет доступа к коду прямо сейчас (вы можете отправить через несколько часов, если он вам еще нужен), но то, что я сделал, это создать статический метод "deviceIdentifier" в вспомогательном классе.

метод выполняет базовую проверку текущей версии iOS, возвращает UDID, если ниже 6.0 и uniqueIdentifier в противном случае

Дайте мне знать, если вам нужен код для этого, и я отправлю его, когда смогу... это всего 10-15 строк или около того, если я правильно помню, но имеет большое значение, так как вы можете просто позвонить ' [myHelper deviceIdentifier] ', где вам нужен идентификатор устройства, и не нужно беспокоиться о том, какую версию iOS они используют