swift 2019-04-03 touchID

2019-04-03  本文已影响0人  Master_K

iOS touchID

指纹技术是苹果2013年在iPhone5s(iOS7)上开始应用的。iOS7是不允许开发人员来使用TouchAPI来验证自己的应用程序。
iOS8开始,苹果陆续开放了Touch ID公共API。TouchID的使用时“本地”的一个验证,框架给我们提供了提示用户进行身份验证的方法。我们可以使用它来认证登录,或授权访问安全敏感信息的应用程序。
我们要使用的是Local Authentication framework。
我们是直接获取TouchID来做的,很多APP都是有开关来控制,是否用TouchID来登录或者打开APP。

import LocalAuthentication
    typealiasFKBlock2 = (_:Any) -> ()
    func touchID (_block:@escapingFKBlock2){
        let context =LAContext()
        varerror:NSError?
        if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) {
            // 下面是开始指纹解锁的代码
            context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason:"请用指纹解锁", reply: {success, errorin
                if success {
//                    let data = context.evaluatedPolicyDomainState;
                    // 成功之后的逻辑, 通常使用多线程来实现跳转逻辑。
                    block("ISOK")
                }else{
                    if let error = error as NSError? {
                        // 获取错误信息
                        let message = self.errorMessageForLAErrorCode(errorCode: error.code)
                        block(message)
                    }
                }
            })
        }else if let error = error as NSError? {
            let message =self.errorMessageForLAErrorCode(errorCode: error.code)
            block(message)
        }
    }
    func errorMessageForLAErrorCode(errorCode:Int) ->String{
        var message =""
        switcherrorCode {
        case LAError.authenticationFailed.rawValue:
            message ="TouchID 验证失败";
            break;
        case LAError.userCancel.rawValue:
            message ="TouchID 被用户手动取消";
            break;
        case LAError.userFallback.rawValue:
            message ="用户不使用TouchID,选择手动输入密码";
            break;
        case LAError.systemCancel.rawValue:
            message ="TouchID 被系统取消 (如遇到来电,锁屏,按了Home键等)";
            break;
        case LAError.passcodeNotSet.rawValue:
            message ="TouchID 无法启动,因为用户没有设置密码";
            break;
        case LAError.touchIDNotEnrolled.rawValue:
            message ="TouchID 无法启动,因为用户没有设置TouchID";
            break;
        case LAError.touchIDNotAvailable.rawValue:
            message ="TouchID 无效";
            break;
        case LAError.touchIDLockout.rawValue:
            message ="TouchID 被锁定(连续多次验证TouchID失败,系统需要用户手动输入密码)";
            break;
        case LAError.appCancel.rawValue:
            message ="当前软件被挂起并取消了授权 (如App进入了后台等)";
            break;
        case LAError.invalidContext.rawValue:
            message ="当前软件被挂起并取消了授权 (LAContext对象无效)";
        default:
            message ="未在LAError对象上找到错误代码"
        }
        returnmessage
    }

上一篇 下一篇

猜你喜欢

热点阅读