iOS之Touch ID的使用

最近做了一个Touch ID的功能,添加到APP内,所以研究了一下,下面跟大家分享一下。

iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。

在开始前,我们首先要做一下,依赖库的添加,这里给大家介绍一种新的方式,比较方便,不用先添加,然后在引用头文件,直接这样就可以了:

@import LocalAuthentication; 这个就Touch ID的依赖库。接下来就是要实现下面两个方法:

 //是否可以用 Touch ID 
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;
//用Touch ID后,返回的结果,是否成功
- (void)evaluatePolicy:(LAPolicy)policy
   localizedReason:(NSString *)localizedReason
             reply:(void(^)(BOOL success, NSError *error))reply;
因为在使用 Touch ID前,我们必须使用 canEvaluatePolicy 验证该机器是否支持,不然会直接崩溃的。然后我们 使用 evaluatePolicy

方法启动传说中的指纹验证。接下来先给大家贴个验证操作的返回code列表:

typedef NS_ENUM(NSInteger, LAError){

 //授权失败    
    LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,         
//用户取消Touch ID授权   
    LAErrorUserCancel           = kLAErrorUserCancel,         
//用户选择输入密码     
    LAErrorUserFallback         = kLAErrorUserFallback,        
 //系统取消授权(例如其他APP切入或者按home键时)    
    LAErrorSystemCancel         = kLAErrorSystemCancel,         
//系统未设置密码   
     LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,         
//设备Touch ID不可用,例如未打开
     LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,         
//设备Touch ID不可用,用户未录入
     LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,

}
其他的就不多说了看代码:

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

    context.localizedFallbackTitle=@"";

    NSError *err;

    if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&err]){

        

        NSLog(@"该设备支持Touch ID");

        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];

        view.backgroundColor=[UIColor blackColor];

        view.alpha=0.5;

        [self.view addSubview:view];

        

        [context isCredentialSet:LACredentialTypeApplicationPassword];

        [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"指纹验证" reply:^(BOOL success, NSError * _Nullable error) {

            

            if(success)

            {

                NSLog(@"识别成功");

                

                dispatch_async(dispatch_get_main_queue(), ^{

                   

                    [view removeFromSuperview];

                    

                });

                

            

            }

            else

            {

                if(error.code==kLAErrorUserFallback)

                {

                     NSLog(@"Fallback按钮被点击");

                }

                else if (error.code==kLAErrorUserCancel)

                {

                

                    NSLog(@"取消按钮被点击");

                }

                else if (error.code==kLAErrorAppCancel)

                {

                    NSLog(@"home键推出");

                }

                else

                {

                    NSLog(@"指纹识别失败%ld",error.code);

                }

                

                dispatch_async(dispatch_get_main_queue(), ^{

                   

                    [view removeFromSuperview];

                });

            }

            

        }];

    

    }else{

        

        NSLog(@"设备不支持Touch ID");

        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"设备不支持Touch ID" preferredStyle:UIAlertControllerStyleAlert];

        [self presentViewController:alert animated:YES completion:nil];

        UIAlertAction *action = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

            isLock=NO;

        }];

        [alert addAction:action];


        

    }

Demo地址就附在这里了:https://github.com/j521887/TouchID_OC


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值