接下来我将讲一下怎样在自己的应用中添加对Touch ID的支持。
一、导入LocalAuthentication.framework Touch ID是基于LocalAuthentication.framework这个框架的,但我们新建的工程里默认是没有导入这个框架,所以需要我们手工导入,直接上图
光导入了还没有结束,我们还需要在自己的文件上面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()
})
}
})
}