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

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

对几种情况的说明

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,} NS_ENUM_AVAILABLE(10_10, 8_0);

原理说明:指纹识别只可认出‘活手指’,iPhone5s(及以后机型)上的指纹传感器是通过发出射频信号探测手指纹路的,而且只探测手指表皮下面的一层皮肤,这样可以防止指纹被复制、盗窃。

当用户连续多次使用Touch ID失败后,Touch ID会被锁,需要用户输入手机开机密码解锁,这一整套的交互iOS系统已经封装在LocalAuthentication.framework里了,系统会自动弹出相应的操作界面,不需要开发者去操心,这大大的简便了开发者的开发集成和逻辑处理
 
#import "ViewController.h"#import 
//指纹解锁需要加入这个引用@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [superviewDidLoad]; }- (void)evaluateAuthenticate{    QMWNWEAKSELF;    //创建LAContext    LAContext* context = [[LAContext alloc] init];//这个属性是设置指纹输入失败之后的弹出框的选项context.localizedFallbackTitle =@"密码输入登录";//指纹识别失败后弹出框最右边的按钮内容,左边是取消。    NSError* error =nil;    NSString* result =@"请验证已有指纹";        //首先使用canEvaluatePolicy判断设备支持状态    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {        //支持指纹验证        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success,NSError *error) {            if (success) {                //验证成功,主线程处理UI                NSLog(@"指纹解锁成功");                [[NSOperationQueue mainQueue] addOperationWithBlock:^{                    //用户选择输入密码,切换主线程处理                    NSUserDefaults *def=[NSUserDefaults standardUserDefaults];                    weakSelf.phonetf.text=[def objectForKey:@"username"];                    weakSelf.verycodetf.text=[def objectForKey:@"password"];//*******测试用,上线的时候注释掉                }];                           }            else            {                NSLog(@"%@",error.localizedDescription);                switch (error.code) {                    caseLAErrorSystemCancel:                    {                        //系统取消授权,如其他APP切入                        break;                    }                    caseLAErrorUserCancel:                    {                        //用户取消验证Touch ID                       SLog(@"用户取消指纹解锁");                        break;                    }                    caseLAErrorAuthenticationFailed:                    {                        //授权失败                        break;                    }                    caseLAErrorPasscodeNotSet:                    {                        //系统未设置密码                      SLog(@"为设置密码");                        break;                    }                    caseLAErrorTouchIDNotAvailable:                    {                        //设备Touch ID不可用,例如未打开                        SLog(@"为打开");                        break;                    }                    caseLAErrorTouchIDNotEnrolled:                    {                        //设备Touch ID不可用,用户未录入                       SLog(@"用户未录入指纹");                        break;                    }                    caseLAErrorUserFallback:                    {//点击密码输入登录按钮调用这里的方法                        //如果验证指纹失败,可以做其他操作,入跳转到手动输入密码页面                        SLog(@"输入框失败后弹出的界面底部两个按钮右边一个的点击方法法");                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{                            //用户选择输入密码,切换主线程处理                                                    }];                        break;                    }                    default:                    {                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{                            //其他情况,切换主线程处理                        }];                        break;                    }                }            }        }];    }    else    {        //不支持指纹识别,LOG出错误详情        NSLog(@"不支持指纹识别");                switch (error.code) {            caseLAErrorTouchIDNotEnrolled:            {                SLog(@"TouchID is not enrolled");                break;            }            caseLAErrorPasscodeNotSet:            {               SLog(@"A passcode has not been set");                break;            }            default:            {              SLog(@"TouchID not available");                break;            }        }               SLog(@"%@",error.localizedDescription);    }}@end

转载地址:http://wdmgi.baihongyu.com/

你可能感兴趣的文章
架构成长之路:Spring Cloud微服务如何实现熔断降级?
查看>>
JVM发生内存溢出的8种原因、及解决办法
查看>>
SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
查看>>
高性能负载均衡:nginx搭建tomcat集群
查看>>
Spring切面中的正则表达式
查看>>
一直再说高并发,多少QPS才算高并发?
查看>>
Git恢复之前版本的两种方法reset、revert(图文详解)
查看>>
Maven打包的三种方式
查看>>
电商场景:并发扣库存,怎么保证不超卖又不影响并发性能
查看>>
分布式事务处理方式总结
查看>>
延迟队列有哪些实现方案?说说你的看法
查看>>
厉害了!我们老大半小时把我的springboot项目并发提升几倍
查看>>
Spring 中Bean 的生命周期
查看>>
为什么要用枚举实现单例模式(避免反射、序列化问题)
查看>>
微服务架构下的分布式限流方案思考
查看>>
全网最详细的一篇SpringCloud总结
查看>>
消息中间件中的有序消息,其实是排队但是不能插队
查看>>
不知道分布式事务,还想进互联网大厂
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>