Уникальный идентификатор iPhone / iPad, кроме UUID / UDID? - PullRequest
11 голосов
/ 08 апреля 2011

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

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

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

Спасибо!

Ответы [ 6 ]

8 голосов
/ 19 августа 2013

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

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

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

NSUUID *uuid = [[UIDevice currentDevice] identifierForVendor];
NSString *uuidString = [uuid UUIDString];
3 голосов
/ 09 апреля 2011

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

2 голосов
/ 25 мая 2014

от Apple:

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

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

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

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

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

1 голос
/ 19 августа 2013

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

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

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

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

1 голос
/ 01 февраля 2012

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

0 голосов
/ 15 августа 2017

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

...