iOS Enter FaceForegroundNotification中的iOS Face ID / Touch ID锁定屏幕冲突

时间:2019-05-03 21:35:48

标签: ios swift biometrics face-id

我有一些代码,当触发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评估代码以取消对视图的模糊处理。

实际结果:向上滑动动作被我的应用程序的Face ID评估代码削弱了。这样会阻止用户在锁定屏幕上向上滑动,从而有效地将其锁定在设备之外。

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

0 个答案:

没有答案