美文网首页
iOS-传感器之TouchID

iOS-传感器之TouchID

作者: XTK_iOS | 来源:发表于2018-11-08 11:34 被阅读0次

    仿支付宝TouchID登录方法

    支付宝登录流程.gif

    1.观看一波完,可以看到支付宝的登录流程:

    (1) 当我们连续三次指纹识别错误后,进行提示 指纹不匹配

    (2) 再次点击 指纹识别,再两次识别失败后,Touch ID功能被锁定,弹出密码来进行身份验证进行解锁TouchID功能

    (3) 当我们 五次 指纹未识别后并且使用密码进行解锁TouchID后,再次弹出TouchID 来进行验证指纹

    (4) 当我们进行验证密码登录后 就会切换到 自己支付宝账号的密码进行 登录

    以上就是 支付宝整个TouchID的登录流程

    2.上代码

    - (IBAction)fingerprintButton:(UIButton *)sender {
        //首先判断版本
        if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
            NSLog(@"系统版本不支持TouchID");
            return;
        }else {
            // 验证指纹是否匹配,需要弹出输入密码的弹框的话:
            // iOS9之后用 LAPolicyDeviceOwnerAuthentication可输入手机密码的验证方式
            // iOS9之前用LAPolicyDeviceOwnerAuthenticationWithBiometrics 只有指纹的验证方式
          [self startTouchIDWithPolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics];
        }
    }
    
    - (void)startTouchIDWithPolicy:(LAPolicy )policy {
        LAContext *context = [[LAContext alloc]init];
        //设置 输入密码 按钮的标题
        //localizedFallbackTitle=@“”,不会出现“输入密码”按钮
        context.localizedFallbackTitle = @"验证登录密码";
        //设置 取消 按钮的标题 iOS10之后
        if (@available(iOS 10.0, *)) {
            context.localizedCancelTitle = @"取消";
        }else {
            // Fallback on earlier versions
        }
        
        NSError *error;
        _localizedReason = @"通过Home键验证已有手机指纹";
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error]) {//判断设备是否支持TouchID
            
            [context evaluatePolicy:policy localizedReason:_localizedReason reply:^(BOOL success, NSError * _Nullable error) {
                if (success) {
                    NSLog(@"指纹识别成功");
                    // 指纹识别成功,回主线程更新UI
                    dispatch_async(dispatch_get_main_queue(), ^{
                        if (policy == LAPolicyDeviceOwnerAuthentication) {
                            [self startTouchIDWithPolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics];
                        }else {
                            
                        }
                    });
                }else {
                    //指纹识别失败,回主线程更新UI
                    NSLog(@"指纹识别失败");
                    dispatch_async(dispatch_get_main_queue(), ^{
                        //失败操作
                        [self handelWithError:error];
                    });
                }
            }];
            
        }else {
            NSLog(@"当前设备不支持TouchID");
        }
    }
    
    /**
     处理错误数据
     @param error 错误信息
     */
    - (void)handelWithError:(NSError *)error {
        if (error) {
    /**
    -1 LAErrorAuthenticationFailed,    // 验证信息出错,就是说你指纹不对
    -2 LAErrorUserCancel               // 用户取消了验证
    -3 LAErrorUserFallback             // 用户点击了手动输入密码的按钮,所以被取消了
    -4 LAErrorSystemCancel             // 被系统取消,就是说你现在进入别的应用了,不在刚刚那个页面,所以没法验证
    -5 LAErrorPasscodeNotSet           // 用户没有设置TouchID
    -6 LAErrorTouchIDNotAvailable      // 用户设备不支持TouchID
    -7 LAErrorTouchIDNotEnrolled       // 用户没有设置手指指纹
    -8 LAErrorTouchIDLockout           // 用户错误次数太多,现在被锁住了
    -9 LAErrorAppCancel                // 在验证中被其他app中断
    -10 LAErrorInvalidContext          // 请求验证出错
     */
            NSLog(@"指纹识别错误描述 %@",error.description);
            
            NSString *message;
            LAError errorCode = error.code;
            switch (errorCode) {
                case LAErrorAuthenticationFailed:
                    message = @"已经连续三次指纹识别错误了,请输入密码验证";
                    _localizedReason = @"指纹验证失败";
                    [self createAlterView:message];
                    break;
                case LAErrorUserFallback:
                    NSLog(@"手动输入密码的按钮,切换其他方式登录");
                    message = @"手动输入密码的按钮,切换其他方式登录";
                    [self createAlterView:message];
                    break;
                case LAErrorTouchIDLockout:
                    //touchID 被锁定--ios9才可以
                    [self handleLockOutAliPay];
                    break;
                default:
                    break;
            }
        }
    }
    
    /**支付宝处理锁定
     */
    - (void)handleLockOutAliPay {
        //开启验证--调用非全指纹 指纹验证
        [self startTouchIDWithPolicy:LAPolicyDeviceOwnerAuthentication];
    }
    
    

    相关文章

      网友评论

          本文标题:iOS-传感器之TouchID

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