首页 文章

无法阻止用户取消Touch ID

提问于
浏览
2

显示Touch ID警报时,还有一个“取消”按钮 . 我宁愿不允许用户取消,因为他们被禁止继续下去 . 1.有没有办法删除“取消”按钮 . 2.如果需要“取消”按钮,如何强制用户使用指纹重新进行身份验证?如果第二次调用authenticate(),Touch ID API就会允许它们进入 . 没有替代密码,我不想为它编写另一个视图控制器 .

func authenticate() {
    let myContext:LAContext = LAContext()
    let authError:NSErrorPointer = nil
    if (myContext.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: authError)) {
        myContext.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Press fingerprint", reply: { (success:Bool, error:NSError?) -> Void in
            if success == true {
                log.debug("SUCCESSFUL AUTHENTICATION")
                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    self.performSegueWithIdentifier("showUI", sender: self)
                })
            }
            else {
                log.debug("FAILED AUTHENTICATION")

                self.authenticate()
            }
        })
    }

}

1 回答

  • 1

    您需要在主队列上将失败调用发送到 self.authenticate ;

    func authenticate() {
        let myContext:LAContext = LAContext()
        let authError:NSErrorPointer = nil
        if (myContext.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: authError)) {
            myContext.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Press fingerprint", reply: { (success:Bool, error:NSError?) -> Void in
                if success == true {
                    log.debug("SUCCESSFUL AUTHENTICATION")
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.performSegueWithIdentifier("showUI", sender: self)
                    })
                }
                else {
                    log.debug("FAILED AUTHENTICATION")
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.authenticate()
                    })
                }
            })
        }
    }
    

相关问题