一、Touch ID 简介
iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。
二、依赖框架
LocalAuthentication.framework
三、注意事项
做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。
if (iOS8) { xxx } // 系统版本验证
if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError])
四、使用类
LAContext
指纹验证操作对象
五、操作流程
判断系统版本,iOS 8及以上版本执行-(void)authenticateUser
方法,自动判断设备是否支持和开启Touch ID。
六、代码示例
傻瓜式使用,不需要看懂代码,可直接复制粘贴,然后在注释处加入自己的代码即可,并且OC、Swift两个版本都有。
Objective-C:
- (IBAction)showTouchIDAlert:(id)sender {
// 1.判断是否是iOS8之后
if (!iOS8later) {
NSLog(@"版本不对不能使用TouchID");
return;
}
// 2.调用touchID的相关方法
[self authenticateUser];
}
// 鉴定用户
- (void)authenticateUser{
// 创建指纹验证对象
LAContext *context = [[LAContext alloc] init];
NSError *yfError = nil;
// 验证设备是否支持touchID
// LAPolicyDeviceOwnerAuthenticationWithBiometrics iOS8
// LAPolicyDeviceOwnerAuthentication iOS9
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&yfError]) {
// 支持TouchID
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"验证你的Touch ID" reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
// touchID验证成功
// 继续处理相关业务(注意线程)
} else {
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
case LAErrorSystemCancel: {
NSLog(@"Authentication was cancelled by the system");
//切换到其他APP,系统取消验证Touch ID
break;
}
case LAErrorUserCancel: {
NSLog(@"Authentication was cancelled by the user");
//用户取消验证Touch ID
break;
}
case LAErrorUserFallback: {
NSLog(@"User selected to enter custom password");
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//用户选择输入密码,切换主线程处理
}];
break;
}
default: {
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
} else {
// 不支持TouchID
switch (yfError.code) {
case LAErrorTouchIDNotEnrolled:
NSLog(@"LAErrorTouchIDNotEnrolled");
break;
case LAErrorPasscodeNotSet:
NSLog(@"LAErrorPasscodeNotSet");
// 此处触发showPasscodeResetAlert方法
break;
default:
NSLog(@"Touch ID is unaviliable");
break;
}
NSLog(@"%@", yfError.localizedDescription);
}
}
Swift:
let context = LAContext()
var err: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &err) {
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "验证你的Touch ID", reply: { (isSuccess, error) in
if isSuccess { // TouchID验证成功
// 继续处理相关业务(注意线程)
print("验证成功!", Thread.current)
} else {
print("验证失败!", error?.localizedDescription)
let e = (error as! NSError)
switch (Int32(e.code)) {
case kLAErrorSystemCancel:
print("切换到其他APP,系统取消验证Touch ID")
case kLAErrorUserCancel:
print("用户取消验证Touch ID ")
case kLAErrorUserFallback:
print("用户选择输入密码,切换主线程处理", Thread.current)
OperationQueue.main.addOperation {
print("主线程处理", Thread.current)
}
default:
print("其他情况,切换主线程处理")
DispatchQueue.main.async {
print("主线程处理", Thread.current)
}
}
}
})
}
注意:模拟器调试方法
-
如果想在模拟器上调试Touch ID,则需要进行以下模拟器设置
开启Touch ID
只有把这个选项选中,才能进行Touch ID验证。
-
匹配OR不匹配Touch ID
网友评论