导语
苹果在iPhone 5s之后添加了Touch ID指纹识别功能,用户可以通过指纹来对iPhone进行安全而高效的访问。现在很多应用都添加了指纹识别,如QQ登录,支付宝支付等等。
利用Touch ID进行指纹解锁
http://upload-images.jianshu.io/upload_images/679533-268db1e09507a065.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240
https://github.com/chlsix/TouchIDDemo源代码地址说明
Touch ID的调用接口是LocalAuthentication.framework,调用时需要导入头文件
<pre>#import <LocalAuthentication/LocalAuthentication.h></pre>
2.需要用的方法有两个
<pre> - (BOOL)canEvaluatePolicy:(LAPolicy)policy
error:(NSError * __autoreleasing *)error attribute((swift_error(none)));</pre>
用来验证设备支不支持Touch ID
<pre> - (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError * __nullable error))reply;</pre>
验证Touch ID(会有弹出框)
3.当输入错误的指纹时会弹出"再试一次"验证框
http://upload-images.jianshu.io/upload_images/679533-4b35d569f20be88e.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240
<pre> //初始化
LAContext context = [LAContext new];
/* 这个属性用来设置指纹错误后的弹出框的按钮文字
- 不设置默认文字为“输入密码”
- 设置@""将不会显示指纹错误后的弹出框
*/
context.localizedFallbackTitle = @"忘记密码";</pre>
4.回调方法
接口提供了Touch ID验证成功和失败的回调方法
<pre>[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"];
});
}
}];</pre>