Я ищу стабильную (и совместимую с Apple) схему регистрации и аутентификации между устройством iphone и сервером. В идеале регистрация и аутентификация не будут связаны с пользователем и будут фоном.образец регистрации и аутентификации iphone
До сих пор я нашел 3 примитивы для выполнения компонентов этого:
- UDID
- UUID
- 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.
Заранее благодарю вас за помощь.
Пеймана
Я согласен с Клаусом, [UIDevice uniqueIdentifier] - лучший способ идентифицировать iPhone. Но идентификатор не является секретным, поэтому также рассматривает возможность компиляции «секретного» (некоторые случайные символы) в приложение, а затем строит контрольную сумму со всеми значениями и секретом при аутентификации и отправке ее в качестве параметра. Такой подход усложнит для кого-то возможность совершить атаку «человек в середине» и поместить в качестве аутентифицированного iPhone. – RickiG
спасибо Клаус и Рики. Большое спасибо за ваше время и помощь. этот сайт потрясающий. – Peyman
«Нельзя публично привязываться к учетной записи пользователя ...» Я могу прочитать это как техническое ограничение («приложение не имеет доступа к этой информации» - я думаю, что так объясняет Клаус) или юридическое ограничение (" мы в Apple не хотим, чтобы вы их ассоциировали »). Интересно, может ли Клаус или Рики прокомментировать это. – iter