Реализовать функцию автоматической блокировки для приложения на iOS

Я хочу реализовать безопасную функцию автоматической блокировки по времени для своего приложения (аналогично функции автоматической блокировки в 1password). Пользователь может выбрать пароль и период времени (1,2,3,5,10,30 минут) после активации блокировки. В принципе, я мог написать метку времени (зашифрованную) на моем устройстве и сравнить ее с текущим временем следующего использования. Если дельта больше, чем выбранный период времени, пользователь должен ввести код доступа. Но эту функцию можно не учитывать, изменив местное время на устройстве. Для этого должен быть безопасный способ (например, специальный системный таймер). Таким образом, вы не можете извлечь 1Password таким образом. Любые идеи?

Большое спасибо

Юрген


person JHC42    schedule 16.11.2012    source источник


Ответы (2)


вы должны использовать сервер времени в Интернете. Они используют стандартизированный протокол под названием NTP. В iOS есть встроенная поддержка чтения времени сервера NTP, но это недоступно для вас как разработчика приложений. Либо вы реализуете это самостоятельно, либо можете использовать библиотеку с открытым исходным кодом, такую ​​как ios-ntp или HS NTP.

person Siba Prasad Hota    schedule 16.11.2012
comment
Если пользователь может изменить системное время, он может даже отключить интернет-соединение ... ;-) - person LombaX; 16.11.2012
comment
Тогда можно попробовать грт с носителя (через НИЦ). - person Siba Prasad Hota; 16.11.2012
comment
В идеале время обновляется с помощью GPS - это наиболее точное время, которое вы можете получить (в основном это атомные часы), НО, если он отключит GPS, вы также не сможете обойтись этим. - person Siba Prasad Hota; 16.11.2012
comment
да. Я думаю, что лучший вариант - считывать время из всех этих источников, и если все они недоступны ... просто попросите пароль, игнорируя системное время (это может быть скомпрометировано). Или, в качестве альтернативы, но не уверена, что Apple одобрит приложение, обновите время в фоновом режиме (используя фоновую задачу, но это не более 10 минут) - person LombaX; 16.11.2012
comment
Посмотрите, как основное местоположение вычисляет ваше местоположение - GPS, сотовая связь, Wi-Fi и т. Д. Таким образом, вы можете обновлять время из доступных источников. - person Siba Prasad Hota; 16.11.2012
comment
Что насчет systemUptime класса NSProcessInfo? Может ли эта функция быть полезной для моей проблемы? - person JHC42; 16.11.2012
comment
developer.apple.com / library / mac / # documentation / Cocoa / Reference / SystemUPtime Возвращает время, прошедшее с момента перезапуска компьютера. Доступно в OS X v10.6 и новее. поэтому вы не можете использовать приложение для iPhone. - person Siba Prasad Hota; 16.11.2012
comment
но он также доступен в iOS 4.0 или более поздней версии см. эту ссылку - person JHC42; 16.11.2012

Использовать:

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Теперь установите таймер:

  [NSTimer scheduledTimerWithTimeInterval:240 target:self selector:@selector(disableIdleTimer) userInfo:nil repeats:NO];

disableIdleTimer установите это:

[[UIApplication sharedApplication] setIdleTimerDisabled:NO];

Сделанный!!

person GhostCode    schedule 30.08.2013