iOS 关于手势/指纹登陆

1. 手势

手势/指纹登陆是为了省去输入密码的麻烦。参考了中国银行信用卡App --"缤纷生活",截图如下

1. 在登陆成功的情况下才能进入 “设置-账号与安全” 设置手势/指纹,未登陆时 见图10

2. 登陆成功时会提示你是否设置辅助登陆密码,也就是手势/指纹 ,见图1

3. 在“设置-账号与安全” 中点击开关,会进入到密码验证,如果已有手势,则弹出手势验证,见图2,3,4,5

4. 手势绘制需要重复绘制2次,录入成功之后回到开关界面,开关打开,见图6

5. 图8,是杀掉App,再次打开App,可见用户数据都清空了

6. 图9,有注册,切换登录方式这两个,目的就是为了给不同账号登陆

 

 

再看这个,我关闭了所有网络,此时用手势快捷登陆,会提示网络故障,由此可以看看出,手势验证成功之后,他立即发送了一个登陆的请求。

包括图9中这个用户名,可能还有密码,都会存入沙盒。

 

iOS 关于手势/指纹登陆_第1张图片

 

2. 指纹

而指纹验证,验证成功了在沙盒存一个标志就可以了

注意

evaluatePolicy...

的回调里面如果要操作UI,一定要切换回主线程

#import //必须导入

 

- (void)p_touchID
{
    dispatch_async(dispatch_get_main_queue(), ^{
        LAContext *context = [[LAContext alloc] init];
        NSError *error = nil;
        //判断是否支持TouchID (本机)
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"通过Home键验证已有手机指纹" reply:^(BOOL success, NSError * _Nullable error) {
                if (success) {//指纹验证成功
                    
                    
                    //指纹验证成功 这里表示开启了指纹开关
                    //[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"OpenTouchID"];
                    
                    //[[NSNotificationCenter defaultCenter] postNotificationName:@"UnlockLoginSuccess" object:nil];
                    
                }else {//指纹验证失败
                    
                    switch (error.code)
                    {
                        case LAErrorAuthenticationFailed:
                        {
                            NSLog(@"授权失败"); // -1 连续三次指纹识别错误
                            //[[NSNotificationCenter defaultCenter] postNotificationName:@"touchIDFailed" object:nil];
                        }
                            break;
                        case LAErrorUserCancel:
                        {
                            NSLog(@"用户取消验证Touch ID"); // -2 在TouchID对话框中点击了取消按钮
//                            [self dismissViewControllerAnimated:YES completion:nil];
                        }
                            break;
                        case LAErrorUserFallback:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                //[[NSNotificationCenter defaultCenter] postNotificationName:@"touchIDFailed" object:nil];
                                NSLog(@"用户选择输入密码,切换主线程处理"); // -3 在TouchID对话框中点击了输入密码按钮
                            }];
                            
                        }
                            break;
                        case LAErrorSystemCancel:
                        {
                            NSLog(@"取消授权,如其他应用切入,用户自主"); // -4 TouchID对话框被系统取消,例如按下Home或者电源键
                        }
                            break;
                        case LAErrorPasscodeNotSet:
                            
                        {
                            NSLog(@"设备系统未设置密码"); // -5
                        }
                            break;
                        case LAErrorBiometryNotAvailable:
                        {
                            NSLog(@"设备未设置Touch ID"); // -6
                        }
                            break;
                        case LAErrorBiometryNotEnrolled: // Authentication could not start, because Touch ID has no enrolled fingers
                        {
                            NSLog(@"用户未录入指纹"); // -7
                        }
                            break;
                            
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
                        case LAErrorBiometryLockout: //Authentication was not successful, because there were too many failed Touch ID attempts and Touch ID is now locked. Passcode is required to unlock Touch ID, e.g. evaluating LAPolicyDeviceOwnerAuthenticationWithBiometrics will ask for passcode as a prerequisite 用户连续多次进行Touch ID验证失败,Touch ID被锁,需要用户输入密码解锁,先Touch ID验证密码
                        {
                            NSLog(@"Touch ID被锁,需要用户输入密码解锁"); // -8 连续五次指纹识别错误,TouchID功能被锁定,下一次需要输入系统密码
                        }
                            break;
                        case LAErrorAppCancel:
                        {
                            NSLog(@"用户不能控制情况下APP被挂起"); // -9
                        }
                            break;
                        case LAErrorInvalidContext:
                        {
                            NSLog(@"LAContext传递给这个调用之前已经失效"); // -10
                        }
                            break;
#else
#endif
                        default:
                        {
                            [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                NSLog(@"其他情况,切换主线程处理");
                            }];
                            break;
                        }
                    }
                }
            }];
        }else {
            //不支持
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"该设备不支持TouchID" preferredStyle:UIAlertControllerStyleAlert];
            [alertController addAction:[UIAlertAction actionWithTitle:@"完成" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                [self dismissViewControllerAnimated:YES completion:nil];
            }]];
            [self presentViewController:alertController animated:YES completion:nil];
        }
    });
}

 

  

 

你可能感兴趣的:(iOS 关于手势/指纹登陆)