iOS开发中Touch ID的使用

来源:互联网 发布:淘宝哪里修改评价 编辑:程序博客网 时间:2024/05/18 02:18
从2013年的iPhone 5s开始苹果就引入了Touch ID,之后Touch ID基本上成了苹果设备的标配,iOS 8起,开发者就可以调用API在自己的应用中添加Touch ID验证功能了,国内常见的第三方应用比如支付宝,也逐渐引入了对Touch ID的支持。

接下来我将讲一下怎样在自己的应用中添加对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()                })            }        })    }

0 0