Ответ 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;
}