美文网首页
添加TouchID支持(指纹识别)

添加TouchID支持(指纹识别)

作者: shiyuwudi | 来源:发表于2017-09-02 07:52 被阅读5次
    -(void)finger {
        LAContext *context = [LAContext new];
        context.localizedFallbackTitle = @"";
        NSString *reasonStr = @"需要验证指纹才能进一步操作";
        NSError *err;
        if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&err]) {
            [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:reasonStr reply:^(BOOL success, NSError * _Nullable evalPolicyError) {
                if (success) {
                    NSLog(@"授权成功");
                    //开始绑定
                    [self bind];
                }else {
                    switch (evalPolicyError.code) {
                        case LAErrorSystemCancel:{
                            [self failedPrompt:@"系统取消授权"];
                            break;
                        }
                        case LAErrorUserCancel:{
                            [self failedPrompt:@"用户取消授权"];
                            break;
                        }
                        default:{
                            [self failedPrompt:@"授权失败"];
                            break;
                        }
                    }
                }
            }];
        } else {
            NSString *str = @"";
            switch (err.code) {
                case LAErrorTouchIDNotEnrolled:{
                    str = @"没有注册指纹";
                    break;
                }
                case LAErrorPasscodeNotSet:{
                    str = @"没有注册指纹验证码";
                    break;
                }
                default:
                    //LAErrorTouchIDNotAvailable
                    str = @"指纹识别不可用";
            }
            [self failedPrompt:str];
        }
    }
    

    开门见山。如上贴出指纹识别的一些关键代码,其实就是围绕着LAContext做文章。LA就是Local Authentication的缩写,也就是本地授权。所有成功和失败的情况已经全部体现在代码中。值得注意的是用户输入错误3次以上就会提示输入指纹验证码,也就是iOS设备注册指纹的时候以防万一的备用code。这个code如果通过的话也算是验证成功,如果想要禁用掉这个功能可以在localizedFallbackTitle中设置成空字符串。其他可以自定义的属性可以在LAContext官方文档的实例方法列表中找到(例如可以允许的最大失败数,默认好像是3;再例如指纹作用延长的时间,也就是一次成功验证之后多长时间内不用再次验证。。搞支付的朋友们还是别动这个属性就好。。;还有其他一些属性,有空研究)

    最后简单提一嘴应用场景和业务逻辑,我们是仿支付宝在账户安全中加的一个开关,如果本机不支持指纹识别则隐藏该列,否则可以手动打开和关闭,打开后要验证支付密码,比对成功之后再绑定。密码存在UserDefaults中,建议用用户名作为key。然后每次内部支付前检查是否绑定了指纹支付,通过指纹验证后直接把保存的密码发送给服务器即可。

    相关文章

      网友评论

          本文标题:添加TouchID支持(指纹识别)

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