2013-10-09 4 views
5

Я хочу создать UUID, у меня есть код ниже, который может создать UUID, как я могу создать UDID с несколькими поставщиками одинакового идентификатора в iOS7?Создание UUID и UDID в iOS 7

+ (NSString*) stringWithNewUUID 
{ 
    CFUUIDRef uuidObj = CFUUIDCreate(nil); 
    NSString *newUUID = (NSString*)CFUUIDCreateString(nil, uuidObj); 
    CFRelease(uuidObj); 
    return newUUID; 
} 
+0

Не могли бы вы рассказать нам, почему вы хотите это сделать? –

+0

У меня есть бизнес-требование –

+0

@SandeepKhade Почему вы говорите, что он содержит временную метку? [CFUUID documentation] (https://developer.apple.com/library/mac/documentation/corefoundation/Reference/CFUUIDRef/Reference/reference.html#//apple_ref/c/func/CFUUIDCreate) ничего не упоминает о метке времени. – Amar

ответ

4

Я создал идентификатор поставщика и затем сохранить его с брелка, который я сохранить в следующий раз, используя KeychainWrapper keychainStringFromMatchingIdentifier:...

+0

Является ли Apple одобрением этого метода? –

+0

Да, если вам нужен новый UUID, который длится до удаления и переустановки приложения, значение может быть сохранено в keychain iOS вместо –

2

UUID, что код, созданный выше, не содержит восстановительной метки времени. Это просто строка, которая выглядит примерно так: E1D87006-7CD0-4E28-9768-624DA92F75D6

+0

yeah @claireware это в виде строки –

6

Функция CFUUIDCreate создает UUID версии 4, которая берется полностью из генератора псевдослучайных чисел. В этом типе UUID отсутствуют метки времени или MAC-адреса. (Это относится к малоиспользуемому вкусу версии 1). Они безопасны для использования практически для всех приложений.

+1

Да, см. Https://www.opensource.apple.com/source/CF/CF-744/CFUUID.c Технически, CFUUIDCreate() может создавать uuids версии 1, но по умолчанию это версия 4 (только что протестирована на iOS 7 и OS X 10.8) – iccir

+1

Спасибо, что я искал создание UDID для устройства, а не для идентификатора поставщика –

5

Этот метод возвращает случайный UUID в IOS 6 и выше

[[UIDevice currentDevice]identifierForVendor] 
+0

Спасибо Арун, я ищу, чтобы создать уникальный идентификатор для моего устройства не для поставщика –

+1

Это не что это значит. -identifierForVendor ID, который идентичен между приложениями того же разработчика. –

+1

@CrossphireDevelopment: метод 'identifierForVendor' возвращает разные значения на разных устройствах независимо от поставщика. Документация Apple: «Значение этого свойства одинаково для приложений, которые принадлежат одному и тому же поставщику, работающему на одном устройстве. Другое значение возвращается для приложений на том же устройстве, что и у разных поставщиков, и для приложений на разных устройствах независимо от того, поставщика ». – Armin

0

Я последовал SANDEEP Ответ Хаде и сделал следующий код, используя PDKeychainBindings. Это то же самое, что и при использовании NSUserDefaults, но он содержит идентификатор в цепочке ключей, который сохраняет данные даже при удалении приложения.

+ (NSString *)uniqueVendor { 

    PDKeychainBindings *keychain = [PDKeychainBindings sharedKeychainBindings]; 
    NSString *uniqueIdentifier = [keychain objectForKey:kKeyVendor]; 

    if (!uniqueIdentifier || !uniqueIdentifier.length) { 

     NSUUID *udid = [[UIDevice currentDevice] identifierForVendor]; 
     uniqueIdentifier = [udid UUIDString]; 
     [keychain setObject:uniqueIdentifier forKey:kKeyVendor]; 
    } 

    return uniqueIdentifier; 
} 
Смежные вопросы