Исходя из моего опыта, вам нужно разделить как authentication
связанный, так и другой UIViewController
код.Я предлагаю создать блочный singleton
класс для Bio-matric authentication
(TouchID и FaceID)
Обратитесь к удивительной библиотеке блочной аутентификации BiometricAuthentication для справки.
Я предлагаю сохранить весь код, связанный с аутентификацией, на экране Login
.
См. Ниже код для автоматического входа в систему.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if isRemmberMe{
BioMetricAuthenticator.authenticateWithBioMetrics(reason: "") { (result) in
switch result {
case .success( _):
print("Redirect into dashboard screen")
case .failure(let error):
print("Authentication Failed")
}
}
}
}
Если вы используете этот подход, то нет необходимости писать дополнительный код в файле AppDelegate.swift
, потому что ваш rootViewController
всегда экран входа в систему.Просто установите свой начальный экран входа в систему контроллера с storyboard
Обновление: 1
Вопрос: Это правильный подход?
Да, это правильный способ сделать это, но помните о централизации кода для биометрической аутентификации.
Вопрос: Как я могу управлять TouchIDИЛИ FaceID Управление, если состояние приложения изменилось
Вы можете перейти с applicationWillEnterForeground
ИЛИ applicationDidBecomeActive
, если состояние приложения было изменено.Еще одна вещь, которую я хотел бы упомянуть выше, оба метода также вызываются, когда пользователь открывает приложение заново.Если вы хотите полностью ограничить доступ пользователя к контенту приложения, перейдите с applicationWillEnterForeground()
, в противном случае вы можете перейти с applicationDidBecomeActive
Обновление: 2
Вам нужно добавить фиктивное размытие UIView
вручную, если вы хотите ограничить содержимое приложения.
Код:
let blurEffect = UIBlurEffect(style: .Light)
let blurVisualEffectView = UIVisualEffectView(effect: blurEffect)
blurVisualEffectView.frame = view.bounds
self.view.addSubview(blurVisualEffectView)
Удалить при успешной аутентификации
blurVisualEffectView.removeFromSuperview()