Swift验证指纹解锁

在支付宝中有看到这种效果,苹果在IOS8之后就已经封装好了这个功能,只需要调用它提供的接口就行了:


IMG_2844.PNG

具体实现的代码:

class MyFingureCheckTool: NSObject {

static func myFingureAuthentication(withTips tips: String = "验证指纹", block: @escaping (_ result: FingureCheckResult) -> () ) {
    guard #available(iOS 8.0, *) else {
        block(FingureCheckResult.touchIDNotAvaliable)
        return
    }
    let context = LAContext()
    var error: NSError? = nil
    
    if context.canEvaluatePolicy(LAPolicy(rawValue: Int(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, error: &error) {
        context.evaluatePolicy(LAPolicy(rawValue: Int(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, localizedReason: tips, reply: { (success, error) in
            if success {
                block(FingureCheckResult.success)
                print("指纹验证成功")
            }else {
                let laError = error as! LAError
                switch laError.code {
                case LAError.authenticationFailed:
                    block(FingureCheckResult.fialed)
                    print("连续三次输入错误,身份验证失败")
                case LAError.userCancel:
                    block(FingureCheckResult.userCancel)
                    print("用户点击取消按钮")
                case LAError.userFallback:
                    block(FingureCheckResult.inputPassword)
                    print("用户点击输入密码")
                case LAError.systemCancel:
                    block(FingureCheckResult.systemCancel)
                    print("系统取消")
                case LAError.passcodeNotSet:
                    block(FingureCheckResult.passwordNotSet)
                    print("用户未设置密码")
                case LAError.touchIDNotAvailable:
                    block(FingureCheckResult.touchIDNotAvaliable)
                    print("touchID不可用")
                case LAError.touchIDNotEnrolled:
                    block(FingureCheckResult.touchIDNotSet)
                    print("touchID未设置指纹")
                default:
                    break
                }
            }
        })
    }else {
        print("不支持TouchID")
    }
}
}

还有一个枚举:

enum FingureCheckResult {
    case success    //成功
    case fialed     //失败
    case passwordNotSet     //未设置手机密码
    case touchIDNotSet      //未设置指纹
    case touchIDNotAvaliable       //不支持指纹
    case systemCancel       //系统取消
    case userCancel         //用户取消
    case inputPassword      //输入密码
}

然后在调用的时候:

 MyFingureCheckTool.myFingureAuthentication { (result) in
        switch result {
        case .success:
            print("成功")
        case .fialed:
            print("失败")
        case .passwordNotSet:
            print("未设置密码")
        case .touchIDNotSet:
            print("未设置指纹")
        case .touchIDNotAvaliable:
            print("系统不支持")
        default:
            break
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,073评论 25 709
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,744评论 1 180
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,269评论 4 61
  • 首先我说明一下我遇到的问题:初次使用Hibernate时,没有仔细听项目负责人介绍Hibernate,而使用了Hi...
    adwords阅读 672评论 0 1
  • 交人不如交狗! 因为要是和狗成为了朋友, 它就会摇尾乞怜, 乖乖的跟在身后。 相反, 人就没那么忠厚! 你有权有势...
    琢玉书生阅读 702评论 12 5