您的位置:首页 > 其它

实用知识:指纹识别功能的实现

2016-05-22 13:35 441 查看
#import "ViewController.h"

// iPhone5S开始, 6S第二代, 指纹识别验证 YES/NO

// 授权验证, 指纹识别框架
#import <LocalAuthentication/LocalAuthentication.h>

@interface ViewController ()

// 指纹识别
@property (strong, nonatomic) LAContext *context;

@end

@implementation ViewController

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
// 弹出指纹验证
self.context = [[LAContext alloc] init];

// 判断硬件是否支持
/**
LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics,  // 指纹识别, 5次失败上锁
LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication    // 指纹识别, 6次失败上锁
*/
NSError *error;
// 判断设备是否可以使用指纹识别
BOOL isAuthentication = [self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
if (isAuthentication == NO || error) {
NSLog(@"不能使用: %@", error);
return;
}

/**
请求进行指纹识别
localizedReason: 告诉用户使用指纹识别的目的
*/
NSString *reason = @"使用指纹进行用户登陆";
[self.context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:reason reply:^(BOOL success, NSError * _Nullable error) {

/**
// 指纹验证失败
LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

// 用户取消, 点击了取消按钮
LAErrorUserCancel           = kLAErrorUserCancel,

// 用户取消, 点出了输入密码
LAErrorUserFallback         = kLAErrorUserFallback,

// 系统取消, (比如App进入后台)
LAErrorSystemCancel         = kLAErrorSystemCancel,

// 不能开始指纹验证, 设备没有设置密码
LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,

// 不能开始指纹验证, Touch ID 不能用
LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,

// 不能开始指纹验证, Touch ID 没有录入指纹
LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,

// 指纹验证失败, 太多次的验证失败导致
// TouchID 锁住了, 需要输入密码
LAErrorTouchIDLockout   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,

// App 取消了指纹验证
LAErrorAppCancel        NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,

/// LAContext passed to this call has been previously invalidated.
LAErrorInvalidContext   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext
*/

if (error) {
switch (error.code) {
case LAErrorAuthenticationFailed:
NSLog(@"指纹验证失败");
break;
case LAErrorUserCancel:
NSLog(@"用户取消了指纹验证");
break;
case LAErrorSystemCancel:
NSLog(@"系统取消了指纹验证");
break;
default:
break;
}
}

// 结果回调
if (success) {
NSLog(@"验证成功");
// 执行相关的功能代码
}
}];
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: