使用TouchID进行身份验证

在App中经常会使用TouchID进行身份验证,那么怎么去实现验证功能的开发呢?接下来一起来看一下它的实现。

LocalAuthentication

首先在项目中需要添加LocalAuthentication.framework,在需要实现的地方import

import LocalAuthentication

LAContext

先来看看LAContext都有什么东西,结果在API中我们发现了两个方法:

// 检查当前设备是否可用touchID,返回一个BOOL值;不会弹验证指纹密码框
open func canEvaluatePolicy(_ policy: LAPolicy, error: NSErrorPointer) -> Bool
// 验证方法,会弹验证指纹密码框
open func evaluatePolicy(_ policy: LAPolicy, localizedReason: String, reply: @escaping (Bool, Error?) -> Swift.Void)  

LAPolicy是一个枚举,在API中可以看到有两种类型:

@available(iOS 8.0, *)
case deviceOwnerAuthenticationWithBiometrics  //iOS8可用,验证错误三次之后则会被锁定,再验证就会返回不可用状态
@available(iOS 9.0, *)
case deviceOwnerAuthentication  //iOS9可用,验证错误三次或者锁定之后会弹出输入密码页面

先来看一下效果图:


使用TouchID进行身份验证_第1张图片
第一次弹出TouchID提示框.png
使用TouchID进行身份验证_第2张图片
错误后弹出提示框.png

再来看看代码的实现

let context = LAContext()
var error: NSError?
context.localizedCancelTitle = "取消"
// iOS 9 之后锁定指纹识别之后,如果需要立即弹出输入密码界面需要使用deviceOwnerAuthentication这个属性重新发起验证
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
     print("TouchID可用")
     context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "指纹验证解锁") { [weak self](success, error) in
         if success {
             print("验证成功")
         } else {
             if let error = error as NSError? {
                 switch error.code { //LAError的几种错误信息
                 case LAError.authenticationFailed.rawValue:
                     print("验证信息出错")
                 case LAError.userFallback.rawValue:
                     print("用户选择了另一种方式")
                 case LAError.userCancel.rawValue:
                     print("用户取消")
                 case LAError.systemCancel.rawValue:
                     print("切换到前台被取消")
                 case LAError.passcodeNotSet.rawValue:
                     print("没有设置TouchID")
                 case LAError.appCancel.rawValue:
                     print("在验证中被其他app中断")
                 case LAError.invalidContext.rawValue:
                     print("验证出错")
                 default:
                     print("验证失败")
                 }
             }
         }
     }
} else {
     print("TouchID不可用")
}
  • 注意:
    1.必须用真机测试下才会有TouchID的功能。
    2.指纹识别完成后,需要返回主线程进行相应的操作,否者你会发现有时候识别完4-5秒才能返回结果。

到这里就完成了一个简单的TouchID身份验证的功能,感兴趣的小伙伴可以自己写个demo玩一玩。

你可能感兴趣的:(使用TouchID进行身份验证)