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

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

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

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

Спасибо!

Ответ 1

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

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

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

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

Ответ 2

Вы можете получить 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...".

Ответ 3

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

Ответ 4

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

запрос двух (или даже трех) уникальных идентификаторов с 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 40, сжигаемая на каждом устройстве iOS, чтобы однозначно идентифицировать каждое устройство.

Ответ 5

От Apple:

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

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

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

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

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

Ответ 6

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