2011-04-08 17 views
10

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

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

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

Спасибо!

+4

Вы можете всегда использовать UUID каким-то загадочным способом, чтобы получить еще два идентификатора :) –

+0

@Nick: Я не думаю, что OP хочет использовать UDID в любом случае, потому что это легко подделать, например. Загрузите UDIDFaker из Cydia на устройство, взломанное с помощью джейлбрейка. –

+0

Apple хмурится IMEI? Это нехорошо, потому что это ограничивает столько, за что это значение хорошо. – KevinDTimm

ответ

3

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

+0

Что именно означает «юридически»? Будет ли отклонено приложение для их захвата? – edcincy

+0

Нет, вы не можете на законных основаниях это делать, поскольку ваше приложение будет читать материал из-за изолированной программной среды приложения, и поэтому оно будет отклонено, как указано в Руководстве по проверке AppStore, 2.6: приложения, которые читают или записывают данные за пределами указанной области контейнера, будут Отклонено – joshis

+0

Я не могу открыть такой каталог: «wireless» в /private/var/wireless/Library/Preferences/com.apple.commcenter.plist.Я пытаюсь сделать это на не-jailbroken устройстве – Sergio

1

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

1

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

запрашивающий два (или даже три) уникальные идентификаторы из iPhone или IPad

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

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

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


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


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

7

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

[UIDevice identifierForVendor] должен теперь быть использован вместо [UIDevice uniqueIdentifier] который теперь устаревшей прошивки использование 5,0

Пример:

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

От Apple:

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

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

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

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

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

0

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

Смежные вопросы