iOS开发-Touch ID指纹解锁

导语
苹果在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,调用时需要导入头文件

#import 

2.需要用的方法有两个

 - (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(会有弹出框)

3.当输入错误的指纹时会弹出"再试一次"验证框
http://upload-images.jianshu.io/upload_images/679533-4b35d569f20be88e.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240

 //初始化
LAContext context = [LAContext new];
/
* 这个属性用来设置指纹错误后的弹出框的按钮文字

  • 不设置默认文字为“输入密码”
  • 设置@""将不会显示指纹错误后的弹出框
    */
    context.localizedFallbackTitle = @"忘记密码";

4.回调方法
接口提供了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"];
});
}
}];

你可能感兴趣的:(iOS开发-Touch ID指纹解锁)