经常使用支付宝的的指纹登录,既安全,又方便。抽空就结合着指纹的相关知识,理了一下这个流程。

在梳理支付宝指纹流程之前,先熟悉一下关于指纹解锁的知识。

指纹解锁的相关类位于 LocalAuthentication.framework 。这个库内容比较少,所以不是很复杂。主要方法如下


判断 TouchID 或者手机密码是否可用


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

其中:LAPolicy 是个枚举 :

LAPolicyDeviceOwnerAuthenticationWithBiometrics指纹验证,三次验证不成功 就会自动取消验证注:这个时候可以再次被调起,但如果依然验证不通过,TouchID则会被锁定。

LAPolicyDeviceOwnerAuthentication两次指纹匹配不成功,会自动弹出输入密码界面。注:当上面的TouchID多次不匹配,被锁定,无法调起的时候,我们可以调这个,会直接弹出输入密码的界面。

Error 里包含的是错误码。通过error.code获取。

我们常用的,也是比较重要的,有这两个code。(其他的具体可以参考 LAError 类)

LAErrorAuthenticationFailed   -1LAErrorTouchIDLockout         -8其中:“-1”代表授权失败(当我们的指纹三次没有匹配成功的时候)。“-8”代表TouchID被锁定。(当返回“-1”后,我们再次掉起指纹验证,再次不匹配)注:对于一个App,并不是只有在返回“-1”之后才会返回“-8”。因为TouchID可能因为其他App无法验证被锁定,而导致我们的App直接返回“-8”。

属性

localizedCancelTitle:ALertView的左边标题 默认是取消localizedFallbackTitle :ALertView的右边标题 (一般设置为账号密码登录)

在代码实现前,先分析一些支付宝指纹登录的流程。如图所示:


主要代码实现:

导入头文件#import <LocalAuthentication/LocalAuthentication.h>

初始化

self.context = [[LAContext alloc] init];
self.context.localizedCancelTitle = @"取消";
self.context.localizedFallbackTitle = @"使用密码登录";[self loginWithTouchID];

.

单纯的使用TouchID登录,如果反复无法通过,就禁止再次使用TouchID。

- (void)loginWithTouchID{NSError *error = nil;BOOL touchIDEnable =[self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];if (touchIDEnable) {//TouchID 可用[self.context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"通过Home键验证已有手机指纹" reply:^(BOOL success, NSError * _Nullable error) {if (success) {//进入登录}else{if (error.code == LAErrorAuthenticationFailed) {//提示指纹不匹配,等待用户再次点击指纹图标,进行另一种授权验证。}if (error.code == LAErrorTouchIDLockout) {//TouchID被锁定,使用另一种授权方式进行登录[self loginWithPhonePassword];}}}];}else{//TouchID被锁定,使用另一种授权方式进行登录[self loginWithPhonePassword];}}

.

如果TouchID没有被锁定,会先弹出两次TouchID验证。都不通过的时候,会自动弹出输入iphone密码的界面。

- (void)loginWithToucOrPhonePassword{NSError *error = nil;BOOL enable =[self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error];if (enable) {[self.context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"通过Home键验证已有手机指纹" reply:^(BOOL success, NSError * _Nullable error) {if (success) {//进入登录}else{NSLog(@"%ld",error.code);}}];}else{NSLog(@"%ld",error.code);}
}

另外,如果我们在设置中添加了新的TouchID,支付宝启动并没有做特别的变化。但在支付的时候,会检测到这一行为,让你手动输入支付密码。

那么,当添加了新的TouchID时,为了安全,我们可能会取消App的指纹登录,采用App的普通账号密码登录,能实现么?当然是可以的。

苹果提供了检测更新的字段:

evaluatedPolicyDomainState 在我们通过
[self.context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
检测TouchID是否可用后,我们可以通过 self.evaluatedPolicyDomainState 获取当前的一串这样的NSData:<3a6ebca2 b5366980 5c5a18e1 831f1f23 bff38c84 13fe93bc a305ef57 1a0efa2c>然后把它保存到起来,下次在获取到的时候,进行对比。如果不一样,则代表指纹发生了变化。

支付宝指纹解锁流程分析以及代码实现相关推荐

  1. android 解锁流程,Android Q 指纹解锁流程

    Android Q 指纹解锁流程 // Authentation Finger Schedule: (close Screen, Authentation with finger(Success)) ...

  2. android keyguard,Android8.1 SystemUI Keyguard之指纹解锁流程

    手指在指纹传感器上摸一下就能解锁,Keyguard是怎么做到的呢? 下面我们就跟着源码,解析这整个过程. 何时开始监听指纹传感器? 先来看下IKeyguardService这个binder接口有哪些回 ...

  3. android指纹解锁动画,Android8.1 SystemUI Keyguard之指纹解锁流程

    手指在指纹传感器上摸一下就能解锁,Keyguard是怎么做到的呢? 下面我们就跟着源码,解析这整个过程. 何时开始监听指纹传感器? 先来看下IKeyguardService这个binder接口有哪些回 ...

  4. 指纹录入和指纹解锁流程

    粗略了解下指纹的录入和解锁流程, 记录如下 Android P Finger Enroll:     1.Settings         FingerprintEnrollIntroduction ...

  5. 息屏指纹解锁性能优化 TP LCD

    需求背景 .客户反馈我司的指纹解锁机器冷屏(息屏)解锁下速度太慢,体验很差,而对比机却非常快 .对比发现,我司机器跟市面品牌机的冷屏解锁速度差了不是一个等级, 急待改善. 既然要优化功能,首先要做到理 ...

  6. 记一次息屏指纹解锁性能优化实现

    需求背景 .客户反馈我司的指纹解锁机器冷屏(息屏)解锁下速度太慢,体验很差,而对比机却非常快 .对比发现,我司机器跟市面品牌机的冷屏解锁速度差了不是一个等级, 急待改善. 既然要优化功能,首先要做到理 ...

  7. 高通Android智能平台环境搭建_编译流程分析

    高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...

  8. 高通平台环境搭建,编译,系统引导流程分析 .

    1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通开发板上烧录文件系统 建立高通平台开发环境 高通平台,android和 modem 编译流程分析 高通平台 7620 启动流 ...

  9. Mybatis执行流程分析_自定义简易Mybatis框架

    自定义简易Mybatis框架 Mybatis执行流程分析 Mybatis代码编写流程: Mybatis配置文件加载过程: 需求分析及技术概述 根据上述的功能结构图, 得出如下需求: 1. 需要具有配置 ...

最新文章

  1. Windows下Hadoop的环境安装[转]
  2. Windows phone 应用开发[12]-Pex 构建自动化白盒测试[下]
  3. 你了解过Spring支持的常用数据库事务传播属性和隔离级别吗?来一起看看吧!!!
  4. jsp中jquery传值给Java_jsp中利用jquery+ajax在前后台之间传递json格式参数
  5. 中判断字符串是否为空_java中的数字以及如何判断字符串是不是数字
  6. Linux下socket最大连接数 ulimit -n 最大值修改
  7. Winform 进度条弹窗和任务控制
  8. SQL Server 索引重建手册
  9. Gartner发布2022年政府行业主要技术趋势:XaaS、数字化、超自动化等
  10. 小米开源移动端深度学习框架MACE,自主研发,专为IoT设备优化
  11. Entity Framework使用Sqlite时的一些配置
  12. qtvs添加qchart_如何使用Qt Designer在表单中插入QChartView?
  13. 深入浅出MySQL crash safe
  14. java认证考试(java认证考试报名)
  15. ucint核心边缘分析_ucinet社会网络分析笔记(一)网络密度、中心度、凝聚子群、核心-边缘...
  16. 成都盛铭轩:商品质量分怎么提升
  17. 京东商品的历史价格走势
  18. 课程设计——模仿网易云UI设计基础(超简单版)
  19. GSCoolink GSV6201 TypeC/DP to HDMI2.1
  20. Windows Mobile 6.x 下改Tahoma字体+微软雅黑说明

热门文章

  1. 红米手机显示Linux,小米红米笔记本在Deepin下出现屏幕下半部分花屏问题的解决...
  2. Java解析MDB(上)-纯JDBC解析非空间数据
  3. Dev-C++连接mysql数据库
  4. linux添加目录命令权限,linux chmod命令设置目录/文件权限详解
  5. Linux配置安装 Elasticsearch 7.10.2 详细教程
  6. 微前端如何做样式隔离?
  7. 8051(c51)单片机从汇编到C语言,从Boot到应用实践教程
  8. Allure定制化标签(用例等级\项目描述\模块名称\缺陷连接\定义链接\添加附件等)
  9. WebP 探寻之路,推荐一个GitHub项目
  10. 2022-2027年中国广播系统行业发展监测及投资战略研究报告