我有在触发通知UIVisualEffectView
时在当前窗口上设置模糊的代码。didEnterBackgroundNotification
然后它会在被触发时尝试扭转这种情况willEnterForegroundNotification
(为便于阅读而简化):
class AutoBlur {
init() {
NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
@objc func appDidEnterBackground() {
blur()
}
@objc func appWillEnterForeground() {
guard UserState.isScreenLockEnabled else {
unblur()
return
}
let authContext = LAContext()
authContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "test") { success, error in
DispatchQueue.main.async {
guard success else {
return
}
unblur()
}
}
}
//...
}
虽然这种方法通常有效,但在测试应用程序的 Face ID 功能时,我发现了以下异常:
- 打开应用程序
- 关闭设备上的屏幕
- 唤醒设备
- 在设备的锁定屏幕上向上滑动
预期结果:设备应解锁,然后我的应用程序应运行其 Face ID 评估代码以取消模糊视图。
实际结果:我的应用程序的人脸 ID 评估代码削弱了向上滑动的操作。它可以防止用户在锁定屏幕上向上滑动,从而有效地将他们锁定在设备之外。
是否有一些我应该监控的状态或其他更安全的事件来触发我的 Face ID 评估?