1

我有在触发通知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 功能时,我发现了以下异常:

  1. 打开应用程序
  2. 关闭设备上的屏幕
  3. 唤醒设备
  4. 在设备的锁定屏幕上向上滑动

预期结果:设备应解锁,然后我的应用程序应运行其 Face ID 评估代码以取消模糊视图。

实际结果:我的应用程序的人脸 ID 评估代码削弱了向上滑动的操作。它可以防止用户在锁定屏幕上向上滑动,从而有效地将他们锁定在设备之外。

是否有一些我应该监控的状态或其他更安全的事件来触发我的 Face ID 评估?

4

0 回答 0