iOS 指纹解锁与数字解锁

不得不说,关于指纹解锁这儿的api 真的很方便,刚刚给自己的项目加上了指纹,所以记录一下

 //1.判断版本

   if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
    //可以使用指纹识别 5S 以后的机型
    //2.判断是否可以使用指纹识别功能
    LAContext  *context = [[LAContext alloc]init];
    
    //2.判断能否使用
    //Evaluate 评估
    //Policy 策略
    
    
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil] ) {
        
        __weak typeof(self) weakSelf = self;
        //3.开始启用指纹识别
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹登录" reply:^(BOOL success, NSError * _Nullable error) {
            __strong typeof(weakSelf) strongSelf = weakSelf;
            //判断是否成功
            if (success) {
                NSLog(@"验证成功!");
                
            
                dispatch_async(dispatch_get_main_queue(), ^{
                  //此处进行其他操作,要放在主线程中
                });
              
                
            }else if(error != nil)
            {
                [self TouchIDResult:error.code];
            }
            
        }];
        
    }else
    {
        //设置 密码解锁  
           LAContext *context = [[LAContext alloc] init];
             [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"请输入设备密码" reply:^(BOOL success, NSError * _Nullable error) {
            NSLog(@"error = %@", error);
            if (success) {
  //再次调用 调起指纹的方法
                [self createUserFingerprint];
            }
            
        }];
    }
}

error code分别对应的 解释:

 -(void)TouchIDResult:(LAError)code
{
   NSString *result = nil;

switch (code)
{
    case LAErrorAuthenticationFailed:
    {
        result = @"指纹不匹配,请用账号密码登录";
        break;
    }
    case LAErrorUserCancel:
    {
            result = @"用户取消了Touch ID验证";
        break;
    }
    case LAErrorUserFallback:
    {
           result = @"用户不想进行Touch ID验证,想进行输入密码操作";
        
        dispatch_async(dispatch_get_main_queue(), ^{
            //用户选择输入密码,可以调起app自己的密码系统,也可调起手机的密码系统
            
        });
        break;
    }
    case LAErrorSystemCancel:
    {
            result = @"切换到其他APP,系统取消验证Touch ID";
        break;
    }
    case LAErrorPasscodeNotSet:
    {
        result = @"您没有在设备Settings中设定密码";
        break;
    }
    case LAErrorTouchIDNotAvailable:
    {
        result = @"您的设备不支持Touch ID";
        break;
    }
    case LAErrorTouchIDNotEnrolled:
    {
        result = @"您的设备没有进行Touch ID 指纹注册";
        break;
    }
    case LAErrorTouchIDLockout:
    {
            result = @"touchid被锁";
        
        // 这里是验证错误次数上限了,touchid被锁,这时候需要调起系统的密码验证就行解锁touchid,不然touchid就不能使用了
        LAContext* context = [LAContext new];
        NSString* result = @"请输入手机密码";
        //LAPolicyDeviceOwnerAuthentication:手机密码验证
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:result reply:^(BOOL success, NSError *error){
            if (success)
            {
                [self createUserFingerprint];
            }
            else
            {
                [self TouchIDResult:error.code];
            }
        }];
    }
    case LAErrorAppCancel:
    {
        result = @"应用取消验证";
        break;
    }
    case LAErrorInvalidContext:
    {
        result = @"";
        break;
    }
}

//回到主线程
dispatch_async(dispatch_get_main_queue(), ^{
    
    [self showText:result];
});
 }

你可能感兴趣的:(iOS 指纹解锁与数字解锁)