iOS face ID 与 Touch ID 开发
一、Touch ID
let context = LAContext.init()
var error:NSError?
var current_policy:LAPolicy?
if #available(iOS 9.0, *) {
current_policy = LAPolicy.deviceOwnerAuthentication
} else {
current_policy = LAPolicy.deviceOwnerAuthenticationWithBiometrics
}
if context.canEvaluatePolicy(current_policy!, error: &error) {
context.evaluatePolicy(current_policy!, localizedReason: localizedReason, reply: { (success, error) in
if success {
print("通过了验证")
} else {
print("没有通过验证")
let flag = Int32.init(truncatingBitPattern: (error?._code)!)
switch flag {
case kLAErrorAuthenticationFailed:
print("连续三次出错")
self.errorBlock!()
break
case kLAErrorUserCancel:
print("点击了取消")
break
case kLAErrorPasscodeNotSet:
self.errorBlock!()
print("弹出密码输入页面")
break
case kLAErrorSystemCancel:
print("按下了电源键")
break
case kLAErrorTouchIDLockout:
print("Touch ID 锁定了")
break
default:
print("未知错误")
}
}
})
} else {
// self.errorBlock!()
print("弹出密码输入页面")
}
}
此处强调一下是
if #available(iOS 9.0, *) {
current_policy = LAPolicy.deviceOwnerAuthentication
} else {
current_policy = LAPolicy.deviceOwnerAuthenticationWithBiometrics
}
在iOS 9之后,LAPolicy使用deviceOwnerAuthentication可以当TouchID被系统锁定之后进行弹出系统解锁界面。
二、Face ID
Face ID是2017年秋季,与苹果十周年纪念版手机 iPhone X同出现的交互解锁功能呢,面容识别,为3D式识别用户Face数据。但在双胞胎识别上有Bug,此处就不加吐槽了。在iOS 11中新增了以下方法
func checkSupportMethod() -> Void {
if #available(iOS 11.0, *) {
if context.biometryType == LABiometryType.typeTouchID {
print("设备支持Touch ID")
} else if context.biometryType == LABiometryType.typeFaceID {
print("设备支持Face ID")
}
} else {
}
}
三、总结
对于开发来说,代码完全不用进行更改,只是在UX上,交互那边,之前是Touch ID解锁而现在则更改为Face ID进行解锁。