2010-05-25 2 views
3

Я ищу стабильную (и совместимую с Apple) схему регистрации и аутентификации между устройством iphone и сервером. В идеале регистрация и аутентификация не будут связаны с пользователем и будут фоном.образец регистрации и аутентификации iphone

До сих пор я нашел 3 примитивы для выполнения компонентов этого:

  1. UDID
  2. UUID
  3. SBFormattedPhoneNumber

UDID метод

[[UIDevice currentDevice] uniqueIdentifier] 

    where @property (nonatomic, readonly, retain) NSString *uniqueIdentifier 

uniqueIdentifier - это строка, уникальная для каждого устройства на основе различных деталей оборудования. (только для чтения)

Уникальный идентификатор устройства представляет собой хеш-значение, состоящее из различных идентификаторов оборудования, таких как серийный номер устройства. Он гарантированно будет уникальным для каждого устройства, но не может быть публично привязан к учетной записи пользователя. Вы можете использовать его, например, для хранения высоких баллов за игру на центральном сервере или для контроля доступа к зарегистрированным продуктам. Идентификатор уникального устройства иногда называют его аббревиатурой UDID. Мы можем получить UDID из iTunes вручную для проверки

Не уверен, что «не может публично быть привязанным к учетной записи пользователя». означает.

метод UUID

NSString *uuid = nil; 
CFUUID theUUID = CFUUIDCreate(kCFAllocatorDefault); 
if (theUUID) { 
    uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID); 
    CFRelease(theUUID); 
} 

CFUUIDCreate создает универсальный уникальный идентификатор (UUID) объект. Объект UUID отличается при каждом вызове CFUUIDCreate. Поэтому нам нужно сгенерировать его при первом запуске, а затем сохранить его в соответствии с вашими предпочтениями с помощью NSUserDefaults. Недостатком этого является то, что если приложение будет удалено и переустановлено, или если устройство будет восстановлено из резервной копии, вы потеряете сохраненный UUID, и все не будет распознано с того же устройства.

SBFormattedPhoneNumber

NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@”SBFormattedPhoneNumber”]; 
NSLog(@”Phone Number: %@”, num); 

Количество возвращаемый этим кодом Snippit это номер, который устанавливается в Itunes для устройства. Если вы не вошли в iPhone в iTunes при активации устройства или, возможно, [как в моем случае], если значение по умолчанию не было номером iPhone, и вы все равно нажали OK, чтобы iTunes не указывала номер телефона, когда ваш iPhone подключен, этот код вернет пустую строку.

«По соображениям безопасности iPhone OS ограничивает приложение (включая его настройки и данные) уникальным местоположением в файловой системе. Это ограничение является частью функции безопасности, известной как« песочница »приложения. набор мелкозернистых элементов управления, ограничивающий доступ приложения к файлам, предпочтения, сетевые ресурсы, оборудование и т. д. ».

Телефон устройства не доступен в контейнере вашего приложения. Вам нужно будет пересмотреть свое приложение для чтения только в вашем контейнере каталога и повторно отправить свой бинарный файл в iTunes Connect, чтобы ваше приложение было пересмотрено для App Store.

Заранее благодарю вас за помощь.

Пеймана

ответ

2

компания Apple рекомендует использовать метод UDID, как вы нашли себя. Он уникален и стабилен для каждого устройства. Кроме того, он очень прост в обращении. Нельзя публично привязываться к учетной записи пользователя. означает, что вы не можете получить учетную запись пользователей iTunes на ее основе, что добавляет безопасности использования этого метода.

UUID будет меняться каждый раз, когда вы его создадите. Поэтому вам придется хранить его самостоятельно между запусками приложения.

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

Поэтому я настоятельно рекомендую использовать метод UDID.

+2

Я согласен с Клаусом, [UIDevice uniqueIdentifier] - лучший способ идентифицировать iPhone. Но идентификатор не является секретным, поэтому также рассматривает возможность компиляции «секретного» (некоторые случайные символы) в приложение, а затем строит контрольную сумму со всеми значениями и секретом при аутентификации и отправке ее в качестве параметра. Такой подход усложнит для кого-то возможность совершить атаку «человек в середине» и поместить в качестве аутентифицированного iPhone. – RickiG

+0

спасибо Клаус и Рики. Большое спасибо за ваше время и помощь. этот сайт потрясающий. – Peyman

+0

«Нельзя публично привязываться к учетной записи пользователя ...» Я могу прочитать это как техническое ограничение («приложение не имеет доступа к этой информации» - я думаю, что так объясняет Клаус) или юридическое ограничение (" мы в Apple не хотим, чтобы вы их ассоциировали »). Интересно, может ли Клаус или Рики прокомментировать это. – iter

1

Я бы сказал, используя метод UUID. Он предоставляет уникальный идентификатор для вашего собственного приложения, в то время как UDID предоставляет всем приложениям одинаковый идентификатор. Также метод UDID устарел в iOS 5.

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