#import "TDTouchID.h" @implementation TDTouchID + (void)td_showTouchIDWithDescribe:(NSString *)desc BlockState:(StateBlock)block{ if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) { dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"系统版本不支持TouchID (必须高于iOS 8.0才能使用)"); block(TDTouchIDStateVersionNotSupport,nil); }); return; } LAContext *context = [[LAContext alloc] init]; context.localizedFallbackTitle = desc ?: @"通过Home键验证已有指纹"; NSError *error = nil; if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:desc ?: @"通过Home键验证已有指纹" reply:^(BOOL success, NSError * _Nullable error) { if (success) { dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 验证成功"); block(TDTouchIDStateSuccess,error); }); }else if(error){ switch (error.code) { case LAErrorAuthenticationFailed:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 验证失败"); block(TDTouchIDStateFail,error); }); break; } case LAErrorUserCancel:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 被用户手动取消"); block(TDTouchIDStateUserCancel,error); }); } break; case LAErrorUserFallback:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"用户不使用TouchID,选择手动输入密码"); block(TDTouchIDStateInputPassword,error); }); } break; case LAErrorSystemCancel:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 被系统取消 (如遇到来电,锁屏,按了Home键等)"); block(TDTouchIDStateSystemCancel,error); }); } break; case LAErrorPasscodeNotSet:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 无法启动,因为用户没有设置密码"); block(TDTouchIDStatePasswordNotSet,error); }); } break; case LAErrorTouchIDNotEnrolled:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 无法启动,因为用户没有设置TouchID"); block(TDTouchIDStateTouchIDNotSet,error); }); } break; case LAErrorTouchIDNotAvailable:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 无效"); block(TDTouchIDStateTouchIDNotAvailable,error); }); } break; case LAErrorTouchIDLockout:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"TouchID 被锁定(连续多次验证TouchID失败,系统需要用户手动输入密码)"); block(TDTouchIDStateTouchIDLockout,error); }); } break; case LAErrorAppCancel:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"当前软件被挂起并取消了授权 (如App进入了后台等)"); block(TDTouchIDStateAppCancel,error); }); } break; case LAErrorInvalidContext:{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"当前软件被挂起并取消了授权 (LAContext对象无效)"); block(TDTouchIDStateInvalidContext,error); }); } break; default: break; } } }]; }else{ dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"当前设备不支持TouchID"); block(TDTouchIDStateNotSupport,error); }); } } @end