基于 LocalAuthentication 框架的指纹解锁
效果
想必大家对 iPhone 的指纹解锁功能已经相当的熟悉了。来看看效果吧!

Local Authentication
概述
- Local Authentication 框架提供了按照指定的安全策略请求用户授权(本地授权)的工具。例如, 通过 Touch ID 请求用户授权。
LAContext
- LAContext 提供了用户授权的上下文。在该上下文中,你可以获取用户授权的相关信息。通常会基于用户的授权状态来进行相应的操作。
授权策略
如图

上图为官方文档的截图,下图是 Xcode 的 library 中的截图(他们是有出入的哦)
LAPolicyDeviceOwnerAuthenticationWithBiometrics
- 可以简单的理解为,基于 TouchID 的授权;若 Touch ID 不可用,将会授权失败。在后面我们会详细阐述这种授权方式
- Touch ID,将在错误输入 5 次后被锁定。锁定后,需要输入密码来解锁
LAPolicyDeviceOwnerAuthentication
- 支持两种授权方式,即:Touch ID 和 输入密码
- 优先以 Touch ID 方式进行授权,若 Touch ID 和 输入密码都不用,将授权失败
- 输入密码授权,将在错误输入 6 次后被锁定
请求用户授权
逻辑

步骤
创建授权上下文
初始化授权相关信息
判断是否支持指定的授权策略
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * _Nullable *)error
注意:若授权上下文为空(即:context = nil), 此时进行判断,会失败,且 error.code 为 0(初始值)若支持,则执行下一步;否则,授权失败,根据授权失败信息执行相关操作,错误类型如下
- 该设备不支持 Touch ID
- 未设置密码
- 未注册 Touch ID
按照指定的策略请求用户授权
- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void (^)(BOOL success, NSError *error))reply
注意:请不要再 Block reply 中在此判断是否支持指定的策略,及调用 - canEvaluatePolicy:error:;否则会死循环根据用户授权状态进行下一步操作
- 用户取消了授权
- 用户点击了“输入密码”按钮
- 您已授权失败3次
- 指纹被锁定
- 应用程序进入后台
LAPolicy
- LAPolicyDeviceOwnerAuthenticationWithBiometrics,Touch ID 验证
- LAPolicyDeviceOwnerAuthentication,密码验证(iOS 9.0)
LAError(失败信息)
- 授权策略是否可用
- LAErrorPasscodeNotSet,没有设置密码
- LAErrorTouchIDNotEnrolled,没有注册 Touch ID
- kLAErrorTouchIDNotAvailable,该设备不支持 Touch ID
- 授权失败
- LAErrorUserCancel,用户取消授权
- LAErrorUserFallback,Touch ID 授权失败的情况下,用户点击“输入密码”按钮
- LAErrorAuthenticationFailed,授权失败三次
- LAErrorTouchIDLockout(iOS 9.0),Touch ID 被锁定(失败五次)
- LAErrorSystemCancel,应用进入后台时,授权失败
- 其他
- LAErrorAppCancel(iOS 9.0)
- LAErrorInvalidContext(iOS 9.0)
- 授权策略是否可用
Touch ID Authentication
使用 Touch ID 进行用户授权
- (IBAction)authenticationButtonClick:(UIButton *)sender {
// 1.创建授权上下文
LAContext *context = [[LAContext alloc] init];
// 2.初始化授权相关的信息
NSError *authError = nil;
NSString *localizedReasoningString = @"error";
bool isAvailable = false;
isAvailable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError];
// 3.判断是否支持指定的授权策略
if (isAvailable) {
// 5.按照指定策略请求用户授权
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:localizedReasoningString reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"success");
} else {
// 6.根据用户授权状态进行下一步操作
switch (error.code) {
case LAErrorUserCancel:
NSLog(@"用户取消了授权 - %@", error.localizedDescription);
break;
case LAErrorUserFallback:
NSLog(@"用户点击了“输入密码”按钮 - %@", error.localizedDescription);
break;
case LAErrorAuthenticationFailed:
NSLog(@"您已授权失败3次 - %@", error.localizedDescription);
break;
case LAErrorTouchIDLockout:
NSLog(@"指纹被锁定 - %@", error.localizedDescription);
break;
case LAErrorSystemCancel:
NSLog(@"应用程序进入后台 - %@", error.localizedDescription);
break;
default:
NSLog(@"++%@--%zd", error.localizedDescription, error.code);
break;
}
}
}];
} else {
// 4.根据授权失败信息执行相关操作
switch (authError.code) {
case LAErrorPasscodeNotSet:
NSLog(@"未设置密码 - %@", authError.localizedDescription);
break;
case LAErrorTouchIDNotEnrolled:
NSLog(@"未注册 Touch ID - %@", authError.localizedDescription);
break;
case kLAErrorTouchIDNotAvailable:
NSLog(@"该设备不支持 Touch ID - %@", authError.localizedDescription);
break;
default:
NSLog(@"--%@--%zd", authError.localizedDescription, authError.code);
break;
}
}
}
基于 LocalAuthentication 框架的指纹解锁的更多相关文章
- iOS 指纹解锁 验证TouchID
iOS指纹解锁 1.首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthenticatio ...
- TouchID 指纹解锁
概述 TouchID 指纹解锁 详细 代码下载:http://www.demodashi.com/demo/10701.html 一.软硬件支持 指纹验证功能的最低硬件支持为iPhone5s, iPa ...
- iOS 指纹解锁
目前常用的App支持指纹解锁的还不是很多,如果在你的项目中用一下是不是显得高大上呢? 废话不说多,干货- 1.在工程中添加LocalAuthentication.framework 2.在需要验证的c ...
- iOS9 集成指纹解锁
添加依赖库 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h> // 头文件 ...
- iOS --- Touch ID指纹解锁
https://www.cnblogs.com/ljmaque/p/TouchID.html 最近在项目中刚好用到了TouchId指纹解锁功能,之前也没有接触过,立马百度看看究竟是要如何使用,发现其实 ...
- SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器
SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器 天幕如遮,唯我一刀可碎千里华盖,纵横四海而无阻,是谓碎遮 --取自<有匪> 写在前面 这段时间很多时间都在忙着编写该项目 ...
- 基于Dubbo框架构建分布式服务(一)
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配 ...
- 基于SSH框架的学生公寓管理系统的质量属性
系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信 ...
- 基于BootStrap框架构建快速响应的GPS部标监控平台
最近一个客户要求将gps部标平台移植到bootStrap框架作为前端框架,符合交通部796部标只是他们的一个基本要求,重点是要和他们的冷链云物流平台进行适配.我自己先浏览了客户的云物流平台的界面,采用 ...
随机推荐
- Visual Studio开发Cordova应用示例
作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5455728.html 本文的GIF动画均使用ScreenToGif进行录制. Cordova是什么? ...
- JavaScript基础插曲---apply,call和URL编码等方法
Js基础学习 Js的压缩: 就是利用js的语法格式通过缩短变量名,去掉空格等来进行压缩. Apply和call的使用 1:apply方法:应用某一对象的方法,用于一个对象替换当前对象.主要是改变thi ...
- Android 手机上获取物理唯一标识码[转]
所有添加有谷歌账户的设备可以返回一个 ANDROID_ID 所有的CDMA设备对于 ANDROID_ID 和 TelephonyManager.getDeviceId() 返回相同的值(只要在设置时添 ...
- QQ--模拟登录
QQ--模拟登录 使用PC端模拟登录,主要使用的QQ空间登录地址测试. 首先,QQHelper的创建. #region Helper /// <summary> /// Helper // ...
- asp.net(c#)将彩色图片变灰阶图片
代码如下: using System; using System.Collections; using System.Configuration; using System.Data; using S ...
- 如何设计一个 App 的注册登录流程?
移 动设备发力之前的登录方式很简单:用户名/邮箱+密码+确认密码,所有的用户登录注册都是围绕着邮箱来做.随着移动设备和社交网络的普及,邮箱不再是唯 一,渐渐的出现了微博,QQ,微信等第三方登录方式,手 ...
- 在吉日嘎拉DotNet.WebForm中使用FluentScheduler调度任务
有些用户一直说系统发送的邮件一直收不到,投诉系统不正常,这时候怎么洗刷冤屈呢?将发送的每一封Email都保存到数据库中,并记录发送的日志,让用户无话可说. 自己创建3个表: MessageFailed ...
- Mysql调试存储过程最简单的方法
以前同事告诉我用临时表插入变量数据来查看,但是这种方法过于麻烦,而且Mysql没有比较好的调试存储过程的工具.今天google了下发现可以用select + 变量名的方法来调试...真是让我汗颜啊. ...
- webservice入门(1)
前段时间学习了webservice的用法,虽然只是一些简单的用法,但是如果久了还是会忘记的,所以将学到了记录下来. 一:schema和http协议. 1.schema约束: schema规范中: . ...
- Django messages框架
一.简介 在网页应用中,你经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户 对于这个功能,Django 提供基于Cookie 和会话的消息,无 ...