美文网首页
iOS Touch ID <指纹识别>

iOS Touch ID <指纹识别>

作者: cym_bj | 来源:发表于2016-02-15 16:28 被阅读249次

    Touch ID

    Touch

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

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

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

    使用

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

    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的验证功能。当我们点击按钮进行调用的时候,就会弹出验证的对话框:

    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 <指纹识别>

          本文链接:https://www.haomeiwen.com/subject/fcspkttx.html