Уникальный идентификатор iPhone/iPad, кроме UUID/UDID?

Проект, над которым я работаю, запрашивает два (или даже три) уникальных идентификатора с iPhone или iPad. Я знаю, я знаю... UDID должно быть достаточно, но мы пытаемся выяснить, есть ли другие уникальные идентификаторы, которые мы можем использовать.

Я могу получить IMEI, серийный номер, MAC-адрес и т. Д. С телефона с помощью IOKit.framework, но, очевидно, Apple не одобряет это, и любое приложение, использующее эту платформу, будет отклонено.

У кого-нибудь есть какие-либо другие идеи или идентификаторы, которые мне не хватает, которые можно было бы использовать?

Спасибо!

6 ответов

Этот вопрос устарел, однако теперь добавлен новый уникальный идентификатор на основе поставщиков, чтобы заменить устаревший UUID в iOS 6.

[UIDevice identifierForVendor] теперь следует использовать вместо [UIDevice uniqueIdentifier] который теперь устарел с iOS 5.0

Пример использования:

NSUUID *uuid = [[UIDevice currentDevice] identifierForVendor];
NSString *uuidString = [uuid UUIDString];

Вы можете получить ICCID и IMSI (если они существуют).

NSString *commcenter = @"/private/var/wireless/Library/Preferences/com.apple.commcenter.plist";
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:commcenter];
NSString *ICCID = [dict valueForKey:@"ICCID"];
NSString *IMSI = [dict valueForKey:@"IMSI"];

Я думаю, что это так далеко, как вы получите. Я не знаю других вариантов получения универсального удостоверения личности.

ОБНОВЛЕНИЕ 2013-03-13: Это, вероятно, изменилось, так как я написал этот ответ почти два года назад. Я даже не помню, какой была версия iOS на данный момент. Также, как правильно заметил @joshis в комментариях: "Вы не можете делать это на законных основаниях, так как ваше приложение будет считывать данные вне изолированной программной среды приложения и, следовательно, будет отклонено, как указано в Руководстве по проверке AppStore...".

От Apple:

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

Так что если вы используете [UIDevice identifierForVendor] и пользователь удалит приложение и переустановит его, идентификатор будет другим (поэтому реального отслеживания физического устройства нет)

Почему ты не используешь SecureUDID?

NSString *domain = @"com.example.app";
NSString *key = @"mykey";
NSString *udid = [SecureUDID UDIDForDomain:domain usingKey:key];

Таким образом, даже если пользователь удалит приложение и переустановит его, UDID будет таким же. Это даст вам постоянное отслеживание (или все, что вы хотите сделать с UDID). Кстати, выше все еще разрешено от Apple. Повеселись.

DeviceCheck API в iOS 11 - интересное решение для получения уникального идентификатора, его преимущество в том, что значение будет сохранено даже после удаления приложения. Так что варианты использования, такие как пробная установка и вознаграждения, могут эффективно контролироваться разработчиками.

Метод получения UDID устарел, теперь вы должны использовать CFUUIDCreate который я думаю, может быть использован несколько раз, чтобы получить больше идентификаторов, если это необходимо

Возможно, вам следует уточнить свой вопрос.

запрос двух (или даже трех) уникальных идентификаторов с iPhone или iPad

... противоречие в терминах. Если ваша цель - отслеживать конкретное физическое устройство, то по определению достаточно одного уникального идентификатора. Вот что значит уникальное.

Возможно, что вы действительно хотите, чтобы отслеживать несколько вещей об использовании вашего приложения каждым пользователем, в отличие от устройства. Скажем, ваше сетевое игровое приложение позволяет пользователю 1, 2 или 3 разных личностей. Поскольку пользователь создает отдельную личность, вы должны отслеживать каждую личность этого пользователя среди всех личностей другого пользователя.

Для этой цели генерация и хранение UUID* является правильным и распространенным решением. iOS включает библиотеки для генерации значения UUID. Единственная проблема в том, что если пользователь удаляет и переустанавливает приложение, хранилище этого UUID может быть потеряно. Для решения этой проблемы есть обходные пути, о которых вы можете узнать, приняв участие в обсуждении вопроса о замене отслеживания UDID сгенерированными значениями UUID.


Этот вопрос немного старше. Поэтому я должен упомянуть: в iOS 5 Apple не одобряла использование UDID. По состоянию на 2013-05-01 Apple отклоняет любое приложение, которое обращается к UDID.


(*) Не путайте UUID с UDID. UUID - это стандартное 128-битное число (32 шестнадцатеричных числа), которое часто используется в качестве практически уникального идентификатора во многих технологических сценариях. UDID - это шестнадцатеричная строка Apple, записанная на каждом устройстве iOS для уникальной идентификации каждого устройства.

Другие вопросы по тегам