Уникальный идентификатор 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 для уникальной идентификации каждого устройства.