Уникальный идентификатор 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 - это интересное решение для получения уникального идентификатора, преимущество в котором - это значение будет сохранено даже после удаления приложения. Поэтому разработчики могут эффективно контролировать использование таких случаев, как пробная установка и вознаграждение.