iOS开发中Touch ID的使用

时间:2021-08-15 05:18:06
从2013年的iPhone 5s开始苹果就引入了Touch ID,之后Touch ID基本上成了苹果设备的标配,iOS 8起,开发者就可以调用API在自己的应用中添加Touch ID验证功能了,国内常见的第三方应用比如支付宝,也逐渐引入了对Touch ID的支持。
接下来我将讲一下怎样在自己的应用中添加对Touch ID的支持。
一、导入LocalAuthentication.framework Touch ID是基于LocalAuthentication.framework这个框架的,但我们新建的工程里默认是没有导入这个框架,所以需要我们手工导入,直接上图
iOS开发中Touch ID的使用

光导入了还没有结束,我们还需要在自己的文件上面import,就像import UIKit一样

import LocalAuthentication

但是我们还要注意一点,有的设备是不支持Touch ID的,比如iPhone 5s之前的设备和前几代iPad,所以我们需要通过这个函数来验证一下当前设备是否支持Touch ID

canEvaluatePolicy(_:error:)

下面这个是完成Touch ID验证功能的示例代码,可以在你LoginViewController里面修改后调用,具体功能的解释都在注释里面了,非常简单
    func authenticateWithTouchID() {
//获得引入的LocalAuthentication框架的Context
let localAuthContext = LAContext()

let reasonText = "Authentication is required to sign in AppCoda"
var authError: NSError?

if !localAuthContext.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError) {
// 代码执行到这里说明当前设备不支持Touch ID
return
}

// 进行Touch ID验证
localAuthContext.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reasonText, reply: { (success: Bool, error: NSError?) -> Void in

if success {
// 处理成功的情况,这段示例代码里面采用异步完成页面跳转
NSOperationQueue.mainQueue().addOperationWithBlock({
self.performSegueWithIdentifier("showHomeScreen", sender: nil)
})

} else {
// 显示各种错误提示
switch error!.code {
case LAError.AuthenticationFailed.rawValue:
print("Authentication failed")
case LAError.PasscodeNotSet.rawValue:
print("Passcode not set")
case LAError.SystemCancel.rawValue:
print("Authentication was canceled by system")
case LAError.UserCancel.rawValue:
print("Authentication was canceled by the user")
case LAError.TouchIDNotEnrolled.rawValue:
print("Authentication could not start because Touch ID has no enrolled fingers.")
case LAError.TouchIDNotAvailable.rawValue:
print("Authentication could not start because Touch ID is not available.")
case LAError.UserFallback.rawValue:
print("User tapped the fallback button (Enter Password).")

default:
print(error!.localizedDescription)
}

// 如果最后没有成功通过Touch ID验证,则调用另外的函数来进行密码验证,下面的代码实现了异步弹出手工输入密码的自定义对话框
NSOperationQueue.mainQueue().addOperationWithBlock({
self.showLoginDialog()
})

}
})

}