引用
#import <LocalAuthentication/LocalAuthentication.h>
typedef void(^TouchIDFinish)(BOOL success, NSString * strAlter ,LAError errorCode);
判断
+(BOOL)isSupportTouchID{
//创建LAContext
LAContext* context = [[LAContext alloc] init];
NSError* error = nil;
if ([[[UIDevice currentDevice]systemVersion] floatValue]>=8.0) {
return [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
}else{
return NO;
}
}
初始化并回调
+(void)initWithNeedStr:(NSString *)needStr fallbackTitle:(NSString *)fallbackTitle touchID:(TouchIDFinish)touchFinish{
if (touchFinish) {
//创建LAContext
LAContext *context = [LAContext new];
//这个属性是设置指纹输入失败之后的弹出框的选项
context.localizedFallbackTitle = fallbackTitle;
NSError *error = nil;
if ([self isSupportTouchID]) {
NSLog(@"支持指纹识别");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:needStr reply:^(BOOL success, NSError * _Nullable error) {
NSString *strAlter = @"";
if (success) {
strAlter = @"验证成功 刷新主界面";
}else{
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
case LAErrorSystemCancel:
{
strAlter = @"系统取消授权,如其他APP切入";
break;
}
case LAErrorUserCancel:
{
strAlter = @"用户取消验证Touch ID";
break;
}
case LAErrorAuthenticationFailed:
{
strAlter = @"授权失败";
break;
}
case LAErrorPasscodeNotSet:
{
strAlter = @"系统未设置密码";
break;
}
case LAErrorTouchIDNotAvailable:
{
strAlter = @"设备Touch ID不可用,例如未打开";
break;
}
case LAErrorTouchIDNotEnrolled:
{
strAlter = @"设备Touch ID不可用,用户未录入";
break;
}
case LAErrorUserFallback:
{
strAlter = @"用户选择输入密码,切换主线程处理";
break;
}
default:
{
strAlter = @"其他情况,切换主线程处理";
break;
}
}
}
touchFinish(success,strAlter,error.code);
}];
}else{
NSLog(@"不支持指纹识别");
NSString *strAlter = @"";
switch (error.code) {
case LAErrorTouchIDNotEnrolled:
{
strAlter = @"TouchID is not enrolled";
break;
}
case LAErrorPasscodeNotSet:
{
strAlter = @"A passcode has not been set";
break;
}
default:
{
strAlter = @"TouchID not available";
break;
}
}
touchFinish(0,strAlter,error.code);
}
}
}
调用
if ([TouchIDHelper isSupportTouchID]) {
[TouchIDHelper initWithNeedStr:@"请按home键指纹解锁" fallbackTitle:@"没有忘记密码" touchID:^(BOOL success, NSString *strAlter, LAError errorCode) {
if (success) {
NSLog(@"请求网络登录");
}else{
//比较常见的
NSLog(@"strAlter:%@",strAlter);
if (errorCode==LAErrorAuthenticationFailed) {
NSLog(@"重复验证指纹失效");
}else if (errorCode==LAErrorUserCancel){
NSLog(@"用户点击取消 一般什么都不做");
}else if (errorCode==LAErrorUserFallback){
NSLog(@"用户第一次指纹失效 之后点击进入到密码登录");
}
}
}];
}