Как я могу узнать, является ли строка UDID для устройства iOS? - PullRequest
3 голосов
/ 28 декабря 2010

Я работаю над приложением iOS Cocoa, которое имеет запасной вариант - если пользователь не вводит определенный фрагмент данных, вместо него используется UDID устройства по умолчанию. Мне нужно добавить проверку в наш серверный код (написанный на Ruby), чтобы узнать, является ли отправляемое значение UDID (пользовательское значение по умолчанию) или пользовательская строка, которую они установили.

Кажется, что правильное решение моей проблемы - это регулярное выражение. Мне удобно писать регулярные выражения, но я должен быть уверен, что это регулярное выражение гарантированно распознает UDID.

Я получаю UDID в коде, используя:

[[UIDevice currentDevice] uniqueIdentifier]

И в симуляторе мне возвращается это значение:

6938CA7D-ECE2-53A4-B293-961A8D07AFB1

Из этого я могу сделать вывод, что я могу просто искать строку шестнадцатеричных символов, которая соответствует шаблону 8-4-4-4-12. Но я хочу быть уверен, что это работает для каждого UDID.

Я не могу найти ничего об этом в документации Apple, и мне было интересно, кто-нибудь может дать мне однозначный ответ на этот вопрос ... спасибо!

Ответы [ 3 ]

2 голосов
/ 28 декабря 2010

Ты не можешь сказать.Документация Apple гласит:

Уникальный идентификатор устройства (иногда сокращенно UDID для уникального идентификатора устройства) представляет собой хеш-значение, состоящее из различных аппаратных идентификаторов, таких как серийный номер устройства.

Симулятор iPhone возвращает другое значение для uniqueIdentifier по сравнению с реальными устройствами iOS.Все настоящие устройства iPhone, которые я использовал, имеют UDID длиной 40 шестнадцатеричных символов.Но лучше не делать никаких предположений.

Даже если существует шаблон UDID, что если пользователь введет что-то, соответствующее этому шаблону?

2 голосов
/ 28 декабря 2010

Очевидно, что единственным гарантированным способом является добавление дополнительного поля, в котором будет указано, введен ли ваш пользователь ожидаемые данные или нет.

Форма и алгоритм UDID не опубликованы и не предназначены для повторного обнаружения.Таким образом, определение может быть возможным, но оно никогда не будет 100%.

1 голос
/ 28 декабря 2010

Почему бы не отправить еще один бит данных, указывающий, что это UDID?Или просто используйте другое имя параметра (UDID=6938...).

Затем на своем сервере вы можете проверить его следующим образом, если действительно хотите:

# somewhere outside the controller action, maybe the top of the file
UDID_PATTERN = /\A[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\Z/

# inside the controller action you're sending info to
udid = params[:UDID]
if udid && (udid =~ UDID_PATTERN)
  # do something with the UDID in place of the other
  # bit of info they could have provided
end
...