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类的localizedFallbackTitlelocalizedCancelTitle这两个属性来自定义TouchID弹窗界面下面的“取消”和“输入密码”这两个按钮的title,不过localizedCancelTitle这个参数要iOS10才能够使用

最后附上简单的demo:TouchIDDemo

上一篇下一篇

猜你喜欢

热点阅读