TouchID简单demo
2016-11-24 本文已影响85人
陌言莫忘
基于swift3.0的TouchID简单应用
TouchID需要用到LocalAuthentication.framework这个框架,使用时要实例化LAContext这个类,用法也很简单。首先,调用open func canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool
这个方法来判断是否能够启用TouchID,如果返回值为true,则调用open func evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Swift.Void)
这个方法就可以使用TouchID。在闭包里面可以获取到是否成功解锁,如果没解锁的话可以通过Error来拿到失败原因。相关代码如下所示:
let context = LAContext()
var requestError: NSError? = nil
let canUseLa = context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &requestError)
let reasionStr = "Just do it"
if canUseLa {
context.evaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, localizedReason: reasionStr, reply: { (success, error) in
if success {
print("deviceOwnerAuthenticationWithBiometrics")
}else {
if let error1 = (error as? NSError) {
switch error1.code {
case LAError.userCancel.rawValue:
print("用户取消")
case LAError.userFallback.rawValue:
print("用户输入密码")
case LAError.systemCancel.rawValue:
print("系统取消")
default:
break
}
}
}
})
}else {
switch requestError!.code {
case LAError.touchIDNotEnrolled.rawValue:
print("touchId")
default:
break
}
}
这个理需要提一下的是,闭包返回的错误为Error类型的,因此如果想通过code这个参数来区别错误类型的话需要先把Error as成NSError类型的。至于具体的错误类型和详细的错误信息大家可以查看LAError这个枚举值。
用户也可以通过LAContext类的localizedFallbackTitle
和localizedCancelTitle
这两个属性来自定义TouchID弹窗界面下面的“取消”和“输入密码”这两个按钮的title,不过localizedCancelTitle
这个参数要iOS10才能够使用
最后附上简单的demo:TouchIDDemo