Как я могу предотвратить сброс приложений iOS после изменения разрешений камеры?
В настоящее время, когда я изменяю права доступа к камере для своего приложения в настройках, а затем возвращаюсь к своему приложению, приложение принудительно обновляется, и я теряю свое место в приложении. Я точно следую этим шагам:
- Откройте приложение, которое использует разрешение камеры.
- Перейдите к некоторому экрану в приложении (чтобы вы могли позже увидеть обновление)
- Перейдите в приложение "Настройки", перейдите к настройкам приложения и переключите разрешение камеры.
- Дважды щелкните дом и вернитесь в приложение. Через несколько секунд он обновится и вернется к первому экрану.
Примечание: я использую iPhone 6 под управлением iOS 8.4
Я заметил это поведение во всех приложениях, которые имеют разрешение камеры. У меня вопрос:есть ли какой-нибудь способ предотвратить обновление / перезапуск приложения (при возобновлении) после изменения разрешения камеры? Похоже, этого не происходит, когда вы переключаете службы определения местоположения, и с точки зрения удобства использования это ужасно.
Сценарий пользователя: если пользователь перемещается вглубь вашего приложения, то ему необходимо изменить разрешение камеры (потому что, скажем, он случайно не нажал в прошлый раз), он будет вынужден вернуться к этому экрану, когда вернется. Это особенно вредно для приложения, пытающегося продать вам что-то или зарегистрировать новую учетную запись. Они могут попытаться ввести новую функцию, с помощью которой вы можете использовать камеру для съемки профиля или сканирования своей кредитной карты. Поскольку пользователь не знал об этой функции, он, возможно, ранее отказывал в доступе к камере, но теперь хочет включить ее. После попытки включения они возвращаются в ваше приложение и обнаруживают, что им нужно потратить 5+ минут, чтобы зарегистрироваться / сделать покупку, снова! После этого даже я, вероятно, сдаюсь.
2 ответа
Я уверен, что нет других способов предотвратить перезапуск приложения. На самом деле вы получите сообщение SIGKILL, но нет журнала сбоя при переключении настроек. Смотрите ниже ссылки-
Единственный способ предотвратить этот сценарий - сохранить предыдущее состояние вашего приложения во время завершения.
- Сохраните приложение ваши текущие данные в пользовательской модели json/plist/NSUserDefaults/archive в applicationWillTerminate: метод и
- восстановить сохраненные данные в applicationWillEnterForeground:
Например, @SignUpViewController регистрируется для UIApplicationWillTerminateNotification, которая срабатывает, когда приложение собирается завершить работу. Храните информацию о пользователях там.
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillTerminate:)
name: UIApplicationWillTerminateNotification object:nil];
}
- (void)applicationWillTerminate:(NSNotification *)notification
{
// store your data here
}
Надеюсь, что это поможет вам:)
Принятый ответ правильный, однако обходной путь не работает в текущей версии iOS (9.2) - приложение, похоже, завершает работу до запуска UIApplicationWillTerminateNotification. Однако, слушая UIApplicationDidEnterBackgroundNotification, можно достичь того же самого. например, в Swift, поместите это в viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "enteringBackground:", name: UIApplicationDidEnterBackgroundNotification, object: nil)
и иметь такую функцию:
func enteringBackground(sender:AnyObject){
// Save application state here
}