iOS Touch ID 简易开发教程

转自:NsstringFromName

支持系统和机型

iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。

依赖框架

LocalAuthentication.framework

#import <LocalAuthentication/LocalAuthentication.h>

注意事项

iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。

使用类

LAContext 指纹验证操作对象

代码

 1 - (void)authenticateUser
 2 {
 3     //初始化上下文对象
 4     LAContext* context = [[LAContext alloc] init];
 5     //错误对象
 6     NSError* error = nil;
 7     NSString* result = @"Authentication is needed to access your notes.";
 8
 9     //首先使用canEvaluatePolicy 判断设备支持状态
10     if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
11         //支持指纹验证
12         [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {
13             if (success) {
14                 //验证成功,主线程处理UI
15             }
16             else
17             {
18                 NSLog(@"%@",error.localizedDescription);
19                 switch (error.code) {
20                     case LAErrorSystemCancel:
21                     {
22                         NSLog(@"Authentication was cancelled by the system");
23                         //切换到其他APP,系统取消验证Touch ID
24                         break;
25                     }
26                     case LAErrorUserCancel:
27                     {
28                         NSLog(@"Authentication was cancelled by the user");
29                         //用户取消验证Touch ID
30                         break;
31                     }
32                     case LAErrorUserFallback:
33                     {
34                         NSLog(@"User selected to enter custom password");
35                         [[NSOperationQueue mainQueue] addOperationWithBlock:^{
36                             //用户选择输入密码,切换主线程处理
37                         }];
38                         break;
39                     }
40                     default:
41                     {
42                         [[NSOperationQueue mainQueue] addOperationWithBlock:^{
43                            //其他情况,切换主线程处理
44                         }];
45                         break;
46                     }
47                 }
48             }
49         }];
50     }
51     else
52     {
53         //不支持指纹识别,LOG出错误详情
54
55         switch (error.code) {
56             case LAErrorTouchIDNotEnrolled:
57             {
58                 NSLog(@"TouchID is not enrolled");
59                 break;
60             }
61             case LAErrorPasscodeNotSet:
62             {
63                 NSLog(@"A passcode has not been set");
64                 break;
65             }
66             default:
67             {
68                 NSLog(@"TouchID not available");
69                 break;
70             }
71         }
72
73         NSLog(@"%@",error.localizedDescription);
74     }
75 }
 1 typedef NS_ENUM(NSInteger, LAError)
 2 {
 3     //授权失败
 4     LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
 5
 6     //用户取消Touch ID授权
 7     LAErrorUserCancel           = kLAErrorUserCancel,
 8
 9     //用户选择输入密码
10     LAErrorUserFallback         = kLAErrorUserFallback,
11
12     //系统取消授权(例如其他APP切入)
13     LAErrorSystemCancel         = kLAErrorSystemCancel,
14
15     //系统未设置密码
16     LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
17
18     //设备Touch ID不可用,例如未打开
19     LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
20
21     //设备Touch ID不可用,用户未录入
22     LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
23 } NS_ENUM_AVAILABLE(10_10, 8_0);

操作流程

首先判断系统版本,iOS 8及以上版本执行-(void)authenticateUser方法,方法自动判断设备是否支持和开启Touch ID

iOS 9

 1  /// Authentication was not successful, because there were too many failed Touch ID attempts and
 2     /// Touch ID is now locked. Passcode is required to unlock Touch ID, e.g. evaluating
 3     /// LAPolicyDeviceOwnerAuthenticationWithBiometrics will ask for passcode as a prerequisite.
 4     LAErrorTouchIDLockout   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,
 5
 6     /// Authentication was canceled by application (e.g. invalidate was called while
 7     /// authentication was in progress).
 8     LAErrorAppCancel        NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
 9
10     /// LAContext passed to this call has been previously invalidated.
11     LAErrorInvalidContext   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext

其中,LAErrorTouchIDLockout是在8.0中也会出现的情况,但并未归为单独的错误类型,这个错误出现,源自用户多次连续使用Touch ID失败,Touch ID被锁,需要用户输入密码解锁,这个错误的交互LocalAuthentication.framework已经封装好了,不需要开发者关心。

LAErrorAppCancelLAErrorSystemCancel相似,都是当前软件被挂起取消了授权,但是前者是用户不能控制的挂起,例如突然来了电话,电话应用进入前台,APP被挂起。后者是用户自己切到了别的应用,例如按home键挂起。

LAErrorInvalidContext很好理解,就是授权过程中,LAContext对象被释放掉了,造成的授权失败

时间: 2024-10-05 14:45:36

iOS Touch ID 简易开发教程的相关文章

iOS---Touch ID于密码的简易开发教程

支持系统和机型: iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用. 依赖框架: LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h> 注意事项:做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃. 使用类:LA

iOS Touch ID 使用详情

简单介绍: 支持系统和机型 iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用. 依赖框架 LocalAuthentication.framework import <LocalAuthentication/LocalAuthentication.h> 注意事项 做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃. 使用类

iOS AutoLayout自动布局中级开发教程(2)-初识autolayout

通过storyboard,我们初识一下autolayout的表现形式: 看下图,使用storyboard创建的两个控件视图: 上图中的四个圆角框内的距离值,就是约束; 比如上图的第二个视图,他的 约束是:  距离 view左边,右边界的距离,这样就确定了 宽度和水平方向上的位置,还有距离上面(第一个)视图的距离,还有高,这样就确定了 视图的高度和y轴的位置;这样就可以在一个二维空间(屏幕)中唯一的确定这个视图的位置了; 但是,需要注意的,在添加距离上一个视图下边界的约束时,第一个视图的位置一定要

iOS AutoLayout自动布局中级开发教程(5)-修改约束的值,延迟加载

如何修改autolayout 约束的值? <span style="font-family:SimSun;">目前我已知的方法有5种 1.修改frame(有时候可能会不起作用,但可以做动画) 2.修改约束的float值 3.使用VisualFormat 语言 4.使用 constraintWithItem,按倍率改变   如  2x+1=Y  5.移除约束(remove at runtime),添加新的约束</span> 前面的文章已经讲到如何使用storybo

iOS AutoLayout自动布局中级开发教程(7)-底部顶部baseLine基线对齐

如何对多个view或者Button添加底部对齐顶部对齐等等类似的对齐约束呢?最简单的方法使用 storyboard,在后续的教程中将使用代码实现. 如下图,如何为这两个或者多个视图添加 底部对齐呢? (或者顶部对齐,左对齐,右对齐,基线baseLine对齐?) 首先说明一下对齐的实质: 顶部或者底部对齐: 本质上就确定了 一个视图的y坐标 左边或者右边对齐:本质上确定了一个视图的x坐标 centerX/Y对齐:确定 x/y坐标 注意对齐的前提是要 这其中的一个的顶部(或者底部,等等)约束已经确定

iOS AutoLayout自动布局中级开发教程(1)-浅谈autolayout

何为autoLayout(自动布局,相对布局)? 按照我粗浅的理解,autolayout就是描述用来描述视图(控件)与视图之间的关系的一种工具; 当然,这种关系包括,子视图与子视图(如一个view上的两个button),子视图与父视图的关系(如一个Button距离他的父视图view右边界的距离);有大小关系(等高等宽),边界距离关系,有中心点(centerX 和 centerY)关系也有比例缩放(ratio)关系; autolayout的原理实际上是基于数学的一次方程求解,最终算出 约束值;按照

iOS AutoLayout自动布局中级开发教程(4)-label等文字自动适应大小,宽度

相比大家会经常遇到  label  或则  textfield等显示文字的  视图时,显示不全,或者无法自动 变化长度  ,自动改变字体的 设置: 今天给大家演示一下,如何 在autolayout让label 适应 不同的 宽度: 1.自动 改变字体: 首先设置好 label 的约束,包括宽高之后,默认来看 你的  label是不变了 ,但是 当遇到 文字较多时,就会出现显示不全的问题: 如图,我们设置好 Label的宽度和高度,和其他约束,固定住 label, 这是我们增加label的字数..

iOS AutoLayout自动布局中级开发教程(3)-等宽等高等中心

前面讲到了一些关于边界约束的知识,但那些基础知识来解决一些实际问题还是会有点力不从心的;所以我们需要更高级的设置约束的办法,设置等高等宽等中心: 见下图: 图中有3个button按钮, 现在要求3个button等宽,等高 , 且 垂直中心在一条线上,这该如何设置? 按照前面的说法,约束其实是一次方程组的求解,那么 通过观察可以得之,如果我们设置好了button之间的左右边界约束,然后再让3个button等宽就可以; 那么就会有  3x  = 宽度; 所以 每一个Button的宽度就可以计算出来了

iOS Touch ID使用

1.首先导入头文件 #import <LocalAuthentication/LocalAuthentication.h> 2.关键代码 - (void)validateTouchID { LAContext *context = [[LAContext alloc] init]; NSError *error; NSString *tip = @"通过Home键验证已有手机指纹"; // 判断手机是否有指纹 if ([context canEvaluatePolicy:L