Подтвердить что ты не робот

Что такое долгосрочный метод, который я могу использовать для уникальной идентификации устройства iOS?

Каков наилучший способ уникального регистрации устройства iOS, которое не будет ограничено будущими ограничениями Apple?

Мой текущий подход к регистрации устройства iOS (в основном для идентификации устройства однозначно) заключается в том, что я использую UDID устройства iOS для его идентификации и регистрации, а затем после его распознавания выполняю необходимые действия.

Проблема заключается в том, что свойство UIDevice uniqueIdentifier устарело. Для этого есть определенные обходные пути (как обсуждалось в этом вопросе), о котором я знаю.

Одна из возможностей - использовать MAC-адрес устройства iOS. Тем не менее, я считаю, что Apple может ограничить доступ к этой информации в какой-то момент в будущем.

Есть ли другой способ (помимо доступа к MAC-адресу) идентифицировать устройство iOS, на которое мы можем положиться в будущем?

4b9b3361

Ответ 1

Использование предпочтительного метода Apple для генерации CFUUIDRef, вероятно, является лучшим решением, поскольку я считаю, что MAC-адрес также может быть удален в будущем. Если вы используете это и сохраняете его в своих NSUserdefaults, вы будете иметь его, если пользователь не удалит приложение. Если вы хотите создать сгенерированный уникальный идентификатор, который вы можете разделить между приложениями или сохраняться между установками, вы должны посмотреть на использование UIPastboard и сохранить сгенерированный UID с помощью ключа, который вы используете между приложениями.

//Create a unique id as a string
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);

//create a new pasteboard with a unique identifier
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:YES];

[pasteboard setPersistent:YES];

//save the unique identifier string that we created earlier
[pasteboard setString:((__bridge NSString*)string)];


 //accessing it
UIPasteboard *pasteboard = [UIPasteboard pasteboardWithName:@"youruniquestring" create:NO];
NSLog([pasteboard string]);

Я написал здесь краткий учебник, но в основном это строки выше: http://www.roostersoftstudios.com/2012/03/26/a-way-to-share-data-between-apps-on-a-given-ios-device/

Ответ 2

Если ваше приложение не предназначено для управления устройствами Apple, это неправильный подход. Как пользователь, я не хочу, чтобы вы знали, какое устройство я использую. Я хочу, чтобы вы узнали меня, независимо от того, какое устройство я использую. Я хочу иметь возможность заменить неисправное устройство. Apple все больше ограничит доступ к этой информации.

[edit] Я не вижу, как MAC-адрес может работать. Мои устройства iOS могут иметь несколько.

Ответ 3

Другая опция - динамически генерировать собственный UUID.

CFUUIDRef uuid = CFUUIDCreate(NULL); 
CFStringRef generatedUuidStr = CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
NSString* uuidStr = [(NSString*)generatedUuidStr autorelease];

Вы можете сохранить этот UUID в NSUserDefaults для уникальной установки. Если уникальность на основе устройств действительно самая важная вещь (так что после удаления и повторной установки идентификатора сохраняется), вам понадобится механизм для сохранения идентификатора на устройстве. Я думаю, вы могли бы изучить использование брелка для сохранения этого идентификатора, который должен сохраняться после удаления приложения. Вы даже можете использовать группу доступа при добавлении UUID в цепочку ключей, чтобы иметь набор приложений, которые используют один и тот же UUID.

См. ссылку на среду безопасности Apple для получения дополнительной информации о сохранении элементов привязки ключей и их извлечении.

http://developer.apple.com/library/ios/#DOCUMENTATION/Security/Reference/SecurityFrameworkReference/_index.html

Ответ 4

Лучший подход, который я видел, - использовать брелок. Вы можете сгенерировать UUID с помощью функции CFUUIDCreateString и сохранить его в цепочке ключей. Эти данные сохраняются в устройстве между установками и восстанавливаются из резервных копий.