博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TouchID 指纹解锁
阅读量:6609 次
发布时间:2019-06-24

本文共 4866 字,大约阅读时间需要 16 分钟。

概述

TouchID 指纹解锁

详细

代码下载:

 

一、软硬件支持

指纹验证功能的最低硬件支持为iPhone5s, iPad 6,iPad mini 3这些有touch ID硬件支持的设备,并且操作系统最低为iOS8.0,因为touch ID是在iOS8.0之后才开放的一类api,实现了指纹验证的功能。

二、程序实现

指纹解锁该功能实现起来是很简单的,因为苹果都已经帮我们封装好了,只需要实现几个方法就可以了。

 

实现流程:

step1: 引入依赖框架(指纹解锁必须的头文件):

#import 

 

step2: 指纹验证的实现的两个主要方法:

这个方法是判断设备是否支持TouchID的。

- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));

这个是用来验证TouchID的,会有弹出框出来。

- (void)evaluatePolicy:(LAPolicy)policy       localizedReason:(NSString *)localizedReason       reply:(void(^)(BOOL success, NSError * __nullable error))reply;

 

step3: 主要回调方法:

typedef NS_ENUM(NSInteger, LAError){    // 授权失败    LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,        // 用户取消Touch ID授权    LAErrorUserCancel           = kLAErrorUserCancel,        // 用户选择输入密码    LAErrorUserFallback         = kLAErrorUserFallback,        // 系统取消授权(例如其他APP切入)    LAErrorSystemCancel         = kLAErrorSystemCancel,        // 系统未设置密码    LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,        // 设备Touch ID不可用,例如未打开    LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,        // 设备Touch ID不可用,例如未打开    LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,        // 触摸ID现在锁定 验证是不成功的,因为有太多的失败的尝试和触摸ID    LAErrorTouchIDLockout   NS_ENUM_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAErrorTouchIDLockout,        // 认证被取消的应用(如无效而认证进行调用)。    LAErrorAppCancel        NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,        /// LAContext passed to this call has been previously invalidated.    // LAContext通过这个电话已经失效    LAErrorInvalidContext   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext}

 

验证指纹:

- (void)authenticateUser {    //创建LAContext    LAContext *context = [[LAContext alloc] init];    // 这个属性是设置指纹输入失败之后的弹出框的选项    context.localizedFallbackTitle = @"请输入密码";        NSError *error = nil;    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {        NSLog(@"支持指纹识别");        // localizedReason: 用于设置提示语,表示为什么要使用Touch ID        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请按home键指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {            if (success) {                                dispatch_sync(dispatch_get_main_queue(), ^{                    // Update UI in UI thread here                    NSLog(@"验证成功 刷新主界面");                });            }else{                NSLog(@"%@",error.localizedDescription);                switch (error.code) {                    case LAErrorSystemCancel:                    {                        NSLog(@"系统取消授权,如其他APP切入");                        break;                    }                    case LAErrorUserCancel:                    {                        NSLog(@"用户取消验证Touch ID");                        break;                    }                    case LAErrorAuthenticationFailed:                    {                        NSLog(@"授权失败");                        break;                    }                    case LAErrorPasscodeNotSet:                    {                        NSLog(@"系统未设置密码");                        break;                    }                    case LAErrorTouchIDNotAvailable:                    {                        NSLog(@"设备Touch ID不可用,例如未打开");                        break;                    }                    case LAErrorTouchIDNotEnrolled:                    {                        NSLog(@"设备Touch ID不可用,用户未录入");                        break;                    }                    case LAErrorUserFallback: // 用于设置左边的按钮的名称,默认是Enter Password                    {                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{                            NSLog(@"用户选择输入密码,切换主线程处理");                        }];                        break;                    }                    default:                    {                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{                            NSLog(@"其他情况,切换主线程处理");                        }];                        break;                    }                }            }        }];    }else{        NSLog(@"不支持指纹识别");        switch (error.code) {            case LAErrorTouchIDNotEnrolled:            {                NSLog(@"TouchID is not enrolled");                break;            }            case LAErrorPasscodeNotSet:            {                NSLog(@"A passcode has not been set");                break;            }            default:            {                NSLog(@"TouchID not available");                break;            }        }                NSLog(@"%@",error.localizedDescription);    }}

项目中若有了指纹解锁这种解锁方式, 瞬间有木有觉得自己的项目高大上了一丢丢呢。

三、压缩文件截图及运行效果

1、压缩文件的截图

1111.jpg

 

2、运行效果的截图

WechatIMG36.jpeg WechatIMG37.jpeg

四、其他补充

界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行!

 

代码下载:

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

 

你可能感兴趣的文章
perl-Thread-Queue for openwrt
查看>>
计算字符串中每种字符出现的次数[Dictionary<char,int>泛型集合用法]
查看>>
UI-text-field
查看>>
在生产环境中安全执行更新删除SQL脚本的技巧
查看>>
ubantu下安装软件
查看>>
PowerDeigner 一个很好的画uml 和建模的软件
查看>>
vs2012创建mvc4项目部署iis所遇到的问题
查看>>
jenkins下载
查看>>
卫语句学习
查看>>
【php】对PHPExcel一些简单的理解
查看>>
文档统一用Word编写之Word写&发送邮件(Office2007)
查看>>
JavaScript的简单继承实现案例
查看>>
第六篇 VIM你值得拥有!
查看>>
项目管理学习笔记之八.课程总结
查看>>
setjmp与longjmp的分析
查看>>
generate ascii table
查看>>
MATLAB绘制3D隐函数曲面的几种方法
查看>>
jquery改变链接移上光标时的颜色实例
查看>>
2013吉林通化邀请赛 1005 GCD and LCM
查看>>
高淇java300集JAVA常用类作业
查看>>