实际上,我构建了一个包含本地身份验证的应用程序。
到目前为止我的代码:
func authenticateUser() {
let authenticationContext = LAContext()
var error: NSError?
let reasonString = "Touch the Touch ID sensor to unlock."
// Check if the device can evaluate the policy.
if authenticationContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) {
authenticationContext.evaluatePolicy( .deviceOwnerAuthenticationWithBiometrics, localizedReason: reasonString, reply: { (success, evalPolicyError) in
if success {
print("success")
} else {
if let evaluateError = error as NSError? {
// enter password using system UI
}
}
})
} else {
print("toch id not available")
// enter password using system UI
}
}
我的问题是,当应用没有触控ID或指纹无效时,我想使用密码锁定场景。
如下图:
我该怎么做?
答案 0 :(得分:2)
此时,我担心您无法访问此密码锁定屏幕进入您的应用,它与iOS本身有关。您可能需要构建自己的自定义视图控制器,以查看/表现为密码锁定场景(使用Touch ID)。我建议使用图书馆来实现这一目标,就我个人而言,我已经尝试PasscodeLock并且它对我来说很好。
答案 1 :(得分:1)
您应该使用.deviceOwnerAuthentication
而不是.deviceOwnerAuthenticationWithBiometrics
来评估策略。使用此参数,系统将使用生物识别身份验证(如果可用),否则会显示密码屏幕。如果生物识别身份验证可用但失败,则后备按钮重定向到密码屏幕。参见documentation:
如果Touch ID或Face ID可用,已注册且未禁用,则首先要求用户输入。否则,要求他们输入设备密码。
点击后退按钮可切换身份验证方法,以要求用户提供设备密码。
所以您的代码将是:
func authenticateUser() {
let authenticationContext = LAContext()
var error: NSError?
let reasonString = "Touch the Touch ID sensor to unlock."
// Check if the device can evaluate the policy.
if authenticationContext.canEvaluatePolicy(LAPolicy.deviceOwnerAuthentication, error: &error) {
authenticationContext.evaluatePolicy( .deviceOwnerAuthentication, localizedReason: reasonString, reply: { (success, evalPolicyError) in
if success {
print("success")
} else {
// Handle evaluation failure or cancel
}
})
} else {
print("passcode not set")
}
}