iOS-swfit 指纹验证

2018-08-28  本文已影响0人  Cary9396

今天来说一下swfit版本系统的指纹调用,稍微封装了一下。 直接上代码:

import UIKit
import LocalAuthentication

enum CATouchIDState {
    
    case NotSupport  //当前设备不支持TouchID
    case Success  //TouchID 验证成功
    case Fail  //TouchID 验证失败
    case UserCancel  //TouchID 被用户手动取消
    case InputPassword  //用户不使用TouchID,选择手动输入密码
    case SystemCancel  //TouchID 被系统取消 (如遇到来电,锁屏,按了Home键等)
    case PasswordNotSet  //TouchID 无法启动,因为用户没有设置密码
    case TouchIDNotSet  //TouchID 无法启动,因为用户没有设置TouchID
    case TouchIDNotAvailable  //TouchID 无效
    case TouchIDLockout  //TouchID 被锁定(连续多次验证TouchID失败,系统需要用户手动输入密码)
    case AppCancel  //当前软件被挂起并取消了授权 (如App进入了后台等)
    case InvalidContext  //当前软件被挂起并取消了授权 (LAContext对象无效)
    case VersionNotSupport  //系统版本不支持TouchID (必须高于iOS 8.0才能使用)
    
}

class CATouchID: LAContext {
    
   
    func showTouchID(desc:String,closure:@escaping (CATouchIDState)->Void) {
        
        
        if NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0 {
            
            closure(.NotSupport)
            print("系统版本不支持TouchID (必须高于iOS 8.0才能使用)")
        
            return
        }
        let context = LAContext()
        var error:NSError?
        context.localizedFallbackTitle = desc
        if context.canEvaluatePolicy(LAPolicy(rawValue: LAPolicy.RawValue(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, error: &error) {
            context.evaluatePolicy(LAPolicy(rawValue: LAPolicy.RawValue(kLAPolicyDeviceOwnerAuthenticationWithBiometrics))!, localizedReason: desc == "" ? "通过Home键验证已有指纹":desc) { (success, error) in
                if success {
                    
                    closure(.Success)
                    print("TouchID 验证成功")
                    
                }
                else if error != nil {
                    
                    let err = error as! LAError
                    
                    switch err.code {
                        
                    case .authenticationFailed:
                        print("TouchID 验证失败")
                        closure(.Fail)
                    case .userCancel:
                        print("TouchID 被用户手动取消")
                        closure(.UserCancel)
                    case .userFallback:
                        print("用户不使用TouchID,选择手动输入密码")
                        closure(.InputPassword)
                    case .systemCancel:
                        print("TouchID 被系统取消 (如遇到来电,锁屏,按了Home键等)")
                        closure(.SystemCancel)
                    case .passcodeNotSet:
                        print("TouchID 无法启动,因为用户没有设置密码")
                        closure(.PasswordNotSet)
                    case .touchIDNotEnrolled:
                        print("TouchID 无法启动,因为用户没有设置TouchID")
                        closure(.TouchIDNotSet)
                    case .touchIDNotAvailable:
                        print("TouchID 无效")
                        closure(.TouchIDNotAvailable)
                    case .touchIDLockout:
                        print("TouchID 被锁定(连续多次验证TouchID失败,系统需要用户手动输入密码)")
                        closure(.TouchIDLockout)
                    case .appCancel:
                        print("当前软件被挂起并取消了授权 (如App进入了后台等)")
                        closure(.AppCancel)
                    case .invalidContext:
                        print("当前软件被挂起并取消了授权 (LAContext对象无效)")
                        closure(.InvalidContext)
                    default:
                        break
                    }
                }
            }
        }
        else {
            
            print("当前设备不支持TouchID")
            closure(.NotSupport)
            
        }
    }
    
}

调用的时候:

  let touchID = CATouchID()
  touchID.showTouchID(desc: "") { (result) in
            
        }
上一篇下一篇

猜你喜欢

热点阅读