前言
NS_CLASS_AVAILABLE(10_10, 8_0) @interface LAContext : NSObject
指纹识别功能是 iPhone 5s 推出的,SDK 是 iOS 8.0 推出。
推出指纹识别的主要原因是为了简化支付,移动支付的环节越简单越好。
-
1)指纹验证方式:
// 只使用指纹验证 LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics, // 使用指纹和设备密码验证,指纹错误或无法验证时会自动跳转到输入密码验证界面 LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication
-
2)指纹验证错误信息:
// 指纹无法识别 error.code == -1 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, // 用户点击了 "取消" 按钮 error.code == -2 LAErrorUserCancel = kLAErrorUserCancel, // 用户取消,点击了 "输入密码" 按钮 error.code == -3 LAErrorUserFallback = kLAErrorUserFallback, // 系统取消,例如激活了其他应用程序 error.code == -4 LAErrorSystemCancel = kLAErrorSystemCancel, // 验证无法启动,因为设备上没有设置密码 error.code == -5 LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet, // 验证无法启动,因为设备上没有 Touch ID error.code == -6 LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable, // 验证无法启动,因为没有输入指纹 error.code == -7 LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled, LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout, LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel, LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext
1、指纹识别的使用
-
Objective-C
// 包含本地身份验证头文件 #import <LocalAuthentication/LocalAuthentication.h> // 判断用户手机系统是否是 iOS 8.0 以上版本 if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) { return; } // 实例化本地身份验证上下文 LAContext *context= [[LAContext alloc] init]; // 判断是否支持指纹识别 if (![context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:NULL]) { return; } [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"请验证已有指纹" reply:^(BOOL success, NSError * _Nullable error) { // 输入指纹开始验证,异步执行 if (success) { [self refreshUI:[NSString stringWithFormat:@"指纹验证成功"] message:nil]; } else { [self refreshUI:[NSString stringWithFormat:@"指纹验证失败"] message:error.userInfo[NSLocalizedDescriptionKey]]; } }]; // 主线程刷新 UI - (void)refreshUI:(NSString *)str message:(NSString *)msg { dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController *alert = [UIAlertController alertControllerWithTitle:str message:msg preferredStyle:UIAlertControllerStyleAlert]; [self presentViewController:alert animated:YES completion:^{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [alert dismissViewControllerAnimated:YES completion:nil]; }); }]; }); }
-
效果
2、指纹识别的设置
-
Objective-C
// 判断是否支持指纹识别 if (![context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL]) { } // 取消指纹验证 [context invalidate]; // 设置 输入密码 按钮的标题 context.localizedFallbackTitle = @"输入密码按钮标题"; // 设置 取消 按钮的标题 context.localizedCancelTitle = @"取消按钮标题";