导语
苹果在iPhone 5s之后添加了Touch ID指纹识别功能,用户可以通过指纹来对iPhone进行安全而高效的访问。现在很多应用都添加了指纹识别,如QQ登录,支付宝支付等等。
利用Touch ID进行指纹解锁
说明
Touch ID的调用接口是LocalAuthentication.framework,调用时需要导入头文件
#import <LocalAuthentication/LocalAuthentication.h>-
需要用的方法有两个
- (BOOL)canEvaluatePolicy:(LAPolicy)policy
error:(NSError * __autoreleasing *)error attribute((swift_error(none)));
用来验证设备支不支持Touch ID- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply;
验证Touch ID(会有弹出框)
-
当输入错误的指纹时会弹出"再试一次"验证框
效果图
//初始化
LAContext context = [LAContext new];
/* 这个属性用来设置指纹错误后的弹出框的按钮文字
* 不设置默认文字为“输入密码”
* 设置@""将不会显示指纹错误后的弹出框
*/
context.localizedFallbackTitle = @"忘记密码"; 回调方法
接口提供了Touch ID验证成功和失败的回调方法
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
localizedReason:@"指纹验证"
reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
//验证成功执行
NSLog(@"指纹识别成功");
//在主线程刷新view,不然会有卡顿
dispatch_async(dispatch_get_main_queue(), ^{
[view removeFromSuperview];
//保存设置状态
[[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%d", sender.isOn] forKey:@"touchOn"];
});
} else {
if (error.code == kLAErrorUserFallback) {
//Fallback按钮被点击执行
NSLog(@"Fallback按钮被点击");
} else if (error.code == kLAErrorUserCancel) {
//取消按钮被点击执行
NSLog(@"取消按钮被点击");
} else {
//指纹识别失败执行
NSLog(@"指纹识别失败");
}
dispatch_async(dispatch_get_main_queue(), ^{
[view removeFromSuperview];
[sender setOn:!sender.isOn animated:YES];
[[NSUserDefaults standardUserDefaults] setValue:[NSString stringWithFormat:@"%d", sender.isOn] forKey:@"touchOn"];
});
}
}];
结语
在实际开发中Touch ID的应用肯定不是这么简单,而是和许多功能一起进行复杂的糅合,但是只要知道了核心方法,多尝试几遍,开发就是要不断地摸索。