添加TouchID支持(指纹识别)

-(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。然后每次内部支付前检查是否绑定了指纹支付,通过指纹验证后直接把保存的密码发送给服务器即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,261评论 25 709
  • 简述: 在类似支付宝为首的应用以及各种理财等涉及钱财对安全性要求较高的应用中,目前普遍对关键数据都做了安全访问限制...
    C_HPY阅读 8,150评论 0 18
  • error code(错误代码)=0是操作成功完成。error code(错误代码)=1是功能错误。error c...
    Heikki_阅读 8,719评论 1 9
  • 5.1 21000->BE 210001->00 21002->BE 21003->00 21004->BE 21...
    余生筑阅读 1,599评论 0 0