TouchID 指纹解锁

简单的介绍

苹果于iOS 8时推出了TouchID(所以iPhone5及以下的设备是不支持的),并且进行了很完善的封装,非常的安全,且使用起来很简单。

实现过程及需要注意的地方

1.引入头文件

#import 

2.具体实现的完整代码:

//  进行touchID验证
- (IBAction)enterAboutBtn:(UIButton *)sender {
    LAContext *content = [[LAContext alloc] init];
    content.localizedCancelTitle = @"要取消";   /**< 弹出的两个取消按钮的文案 */
    content.localizedFallbackTitle = @"使用锁屏密码进入";  /**< 如果允许使用锁屏密码进入的话 */
    
    /*
     LAPolicyDeviceOwnerAuthenticationWithBiometrics : 该模式下,连续超过5次错误,系统会自动上锁(返回’Biometry is locked out.‘的提示),并且不会自动转到密码输入框,需要锁屏,用密码解锁一次才能再次使用
     LAPolicyDeviceOwnerAuthentication : 该模式下,允许连续输入6次错误,然后自动切换到密码输入解锁模式
     */
    NSError *error = nil;
    if ([content canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
        NSLog(@"该设备支持指纹识别");
        [content evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹解锁进入" reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"验证成功");
                //  当前线程非主线程,跳转vc属于刷新UI,必须在主线程上执行,否则可能导致crash,故此处用GCD回到主线程进行跳转处理
                dispatch_async(dispatch_get_main_queue(), ^{
                    NXTestTouchIDAboutViewController *VC = [[NXTestTouchIDAboutViewController alloc] init];
                    [self.navigationController pushViewController:VC animated:YES];
                });
                
                
            }else{
                NSLog(@"error:%@",error.localizedDescription);
                switch (error.code) {
                    case LAErrorSystemCancel:
                    {
                        NSLog(@"系统取消授权,如其他APP切入");
                        break;
                    }
                    case LAErrorUserCancel:
                    {
                        NSLog(@"用户取消验证Touch ID");
                        break;
                    }
                    case LAErrorAuthenticationFailed:
                    {
                        NSLog(@"授权失败");
                        break;
                    }
                    case LAErrorPasscodeNotSet:
                    {
                        NSLog(@"系统未设置密码");
                        break;
                    }
                    case LAErrorTouchIDNotAvailable:
                    {
                        NSLog(@"设备Touch ID不可用,例如未打开");
                        break;
                    }
                    case LAErrorTouchIDNotEnrolled:
                    {
                        NSLog(@"设备Touch ID不可用,用户未录入");
                        break;
                    }
                    case LAErrorUserFallback:
                    {
//                        此处的逻辑处理,也需要注意线程问题
                        break;
                    }
                    default:
                    {
//                     此处的逻辑处理,也需要注意线程问题
                        break;
                    }
                }
            }
        }];
        
    }else{
        NSLog(@"不支持指纹识别");
        switch (error.code) {
            case LAErrorTouchIDNotEnrolled:
            {
                NSLog(@"TouchID is not enrolled");
                break;
            }
            case LAErrorPasscodeNotSet:
            {
                NSLog(@"A passcode has not been set");
                break;
            }
            default:
            {
                NSLog(@"TouchID not available");
                break;
            }
        }
        
        NSLog(@"%@",error.localizedDescription);
    }
}

3.注意事项及小结:
实现过程中需要注意的细节已经在注释中标明。

4.链接:
已经将示例工程放到github上,需要的自取。精力有限,若有发现有误之处,欢迎指正。GitHub示例工程链接

你可能感兴趣的:(TouchID 指纹解锁)