iOS Touch ID <指纹识别>

Touch ID

Touch

ID是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术。大家用得最多的可能是手机的解屏操作,不用在和以前一样输入手机的四位数密

码进行验证。一方面不用担心密码被别人看到,另一方面也方便了自己的操作。iOS8后苹果开放了Touch

ID的API给开发者,这也给我们的app带来了新的体验。

使用

Touch ID的API非常的简单也好理解,在使用前我们需要导入LocalAuthentication这个库。

iOS Touch ID <指纹识别>_第1张图片

1.png

首先来看下头文件的定义:

//验证设备是否支持Touch ID

- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError* __autoreleasing *)error;

//进行验证的回调

- (void)evaluatePolicy:(LAPolicy)policy      localizedReason:(NSString*)localizedReason                reply:(void(^)(BOOLsuccess,NSError*error))reply;

//取消Touch Id验证的按钮的标题,默认标题是输入密码@property(nonatomic,copy)NSString*localizedFallbackTitle;

代码使用示例

LAContext *laContext = [[LAContext alloc] init];

NSError*error;

if([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])

{      

[laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics                      localizedReason:@"Touch Id Test"reply:^(BOOLsuccess,NSError*error) {

if(success)

{NSLog(@"success to evaluate");//do your work}

if(error)

{NSLog(@"---failed to evaluate---error: %@---", error.description);//do your error handle}                                }];    }

else{NSLog(@"==========Not support :%@", error.description);//do your error handle}

这样我们就完成了一个Touch ID的验证功能。当我们点击按钮进行调用的时候,就会弹出验证的对话框:

iOS Touch ID <指纹识别>_第2张图片

2.png

弹窗目前还不能自定义,都是统一的,第一行是app的名字+Touch ID, 第二行是需要用Touch ID的理由。在用户进行操作后,我们可以在回调的block那边处理自己的业务逻辑。

错误处理

typedefNS_ENUM(NSInteger, LAError){//用户验证没有通过,比如提供了错误的手指的指纹LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,// 用户取消了Touch ID验证LAErrorUserCancel          = kLAErrorUserCancel,//用户不想进行Touch ID验证,想进行输入密码操作

LAErrorUserFallback        = kLAErrorUserFallback,// 系统终止了验证

LAErrorSystemCancel        = kLAErrorSystemCancel,// 用户没有在设备Settings中设定密码LAErrorPasscodeNotSet      = kLAErrorPasscodeNotSet,// 设备不支持Touch IDLAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,// 设备没有进行Touch ID 指纹注册

LAErrorTouchIDNotEnrolled  = kLAErrorTouchIDNotEnrolled,}NS_ENUM_AVAILABLE(10_10,8_0);

在block回调那边,我们需要对每种错误进行处理,以便得到更好的用户体验。

#import "ViewController.h"#import@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];

btn.center=self.view.center;

btn.bounds=CGRectMake(0, 0, 100, 40);

[btn setTitle:@"指纹识别" forState:UIControlStateNormal];

[btn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];

[self.view addSubview:btn];

[btn addTarget:self action:@selector(clickTouchId) forControlEvents:UIControlEventTouchUpInside];

}

-(void)clickTouchId

{

CGFloat systemVersion=[UIDevice currentDevice].systemVersion.doubleValue;

if (systemVersion>=8.0)

{

LAContext *context=[[LAContext alloc]init];

NSError *error=nil;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"XX请求验证" reply:^(BOOL success, NSError * _Nullable error) {

if (success)

{

NSLog(@"验证成功");

}

switch (error.code)

{

case LAErrorSystemCancel:

NSLog(@"切换到其它app,系统取消验证");

break;

case LAErrorUserCancel:

NSLog(@"用户取消验证");

break;

case LAErrorUserFallback:

NSLog(@"用户选择输入密码,切换主线程处理");

break;

}

}];

}

if (error)

{

NSLog(@"%@",error.localizedDescription);

}

}

}

你可能感兴趣的:(iOS Touch ID <指纹识别>)