支付宝指纹解锁流程分析以及代码实现
来源:互联网 发布:怎样查看淘宝时间 编辑:程序博客网 时间:2024/05/17 01:49
经常使用支付宝的的指纹登录,既安全,又方便。抽空就结合着指纹的相关知识,理了一下这个流程。
在梳理支付宝指纹流程之前,先熟悉一下关于指纹解锁的知识。
指纹解锁的相关类位于 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>然后把它保存到起来,下次在获取到的时候,进行对比。如果不一样,则代表指纹发生了变化。
阅读全文
0 0
- 支付宝指纹解锁流程分析以及代码实现
- 指纹解锁
- 指纹解锁
- iOS开发实现TouchID指纹解锁
- iOS开发实现TouchID指纹解锁
- iOS开发实现TouchID指纹解锁
- iOS开发实现TouchID指纹解锁
- iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析
- iOS支付宝支付(Alipay)详细接入流程以及项目中遇到的问题分析
- 支付宝支付流程 及简单实现
- java实现网上在线支付--02_分析易宝支付的工作流程
- iOS指纹解锁,几行代码解决,特简单
- 指纹解锁和手势解锁
- 微信支付/支付宝指纹支付原理
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- Android 支付宝以及微信支付快速接入流程
- 电商系统数据库设计
- 二叉查找树做题总结
- Kotlin For Android:如何创建一个Kotlin项目
- JavaScript中的正则表达式
- 二、常用分类
- 支付宝指纹解锁流程分析以及代码实现
- codeforces 793A Oleg and shares
- Linux下的tar压缩解压缩命令详解
- Spring 静态文件的处理【mvc:resources 、mvc:default-servlet-handler】详解
- laravel 修改记住我功能的cookie保存时间
- Apache kafka原理与特性(0.8V)(转载)
- jvm系列一:java内存组成介绍:堆(Heap)和非堆(Non-heap)内存
- 浅析代理模式
- Spring+Quartz 定时任务