今天来说一下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
}
网友评论