IOS开发入门之Touch ID使用
白羽 2018-11-23 来源 :网络 阅读 1124 评论 0

摘要:本文将带你了解IOS开发入门Touch ID使用,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门Touch ID使用,希望本文对大家学IOS有所帮助。


        

Touch ID简介

Touch ID指纹识别作为iPhone 5s上的“杀手级”功能早已为人们所熟知,目前搭载的设备有iphone SE、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPad Pro、iPad mini 4、iPad mini 3和iPad air 2 iOS 8.0开放了指纹验证的API,为APP增添了新的解锁姿势,Touch ID在iPhone 6、iPhone 6 Plus上表现平平,识别效率低下成为众多用户的吐槽点 苹果在2015新品发布会上提及全新的iPhone 6s、iPhone 6s Plus采用第二代Touch ID,新的Touch ID识别速度更快;实际体验中只要轻轻触碰一下即可,以往要按压半秒钟的指纹识别过程,现在基本是一触即发 随着安卓也有越来越多的设备配备了类似Touch ID的指纹识别装置,今后会有越来越多的APP选择使用指纹识别的验证方式 

Touch ID原理

Touch ID不存储用户的任何指纹图像,只保存代表指纹的数字字符。iPhone 5s的A7处理器采用了新的高级安全架构,其中有一块名为Secure Enclave的区域用以专门保护密码和指纹数据。只有Secure Enclave可以访问指纹数据,而且它还把这些数据同处理器和系统隔开,因而这些永远不会被存储在苹果的服务器上,也不会被同步到iCloud或其他地方。除了Touch ID之外,它们不会被匹配到其他指纹库中 相信很多人都知道,一个Touch ID传感器和iPhone是一对一的关系,如果损坏,只能售后,无法自行更换,其中的原理比较复杂。一种可能的解释是苹果阻止了任何Touch ID和Secure Enclave之间的任何数据嗅探和截取,实现了特定处理器配对特定的Touch ID。 如果可以随意更换,那么有人将用户的指纹传感器更换,就可以在用户不知情的情况下窃取到指纹数据。苹果的技术降低了这一风险,这意味着不法之徒想要调包传感器的话,需要单独破解每台设备,对于重视安全性的用户来说,这个发现当然是个好消息 

 

Touch ID常用方法与枚举解释

首先苹果提供了canEvaluatePolicy:error:来判断运行的设备是否支持Touch ID

如果要让其失效,可以调用invalidate,新特征:iOS 9.0和Mac OS 10.11

还提供了evaluatePolicy:localizedReason:reply:来验证识别的情况,具体类型如下(以下枚举类型出现的情况均已测试并标注):


   

<code><code><code><code><code><code><code><code><code>    // 身份验证没有成功,因为用户未能提供有效的凭据(连续3次验证失败时提示)

    LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

 

    // 身份验证被用户取消(当用户点击取消按钮时提示)

    LAErrorUserCancel           = kLAErrorUserCancel,

 

    // 认证被取消了,因为用户点击回退按钮(当用户点击输入密码时提示)

    LAErrorUserFallback         = kLAErrorUserFallback,

 

    // 身份验证被系统取消(验证时当前APP被移至后台或者点击了home键导致验证退出时提示)

    LAErrorSystemCancel         = kLAErrorSystemCancel,

 

    // Touch ID无法启动,因为没有设置密码(当系统没有设置密码的时候,Touch ID也将不会开启)

    LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,

 

    // 无法启动身份验证(这种情况没有检测到,应该是出现硬件损坏才会出现)

    LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,

 

    // 无法启动身份验证,因为触摸没有注册的手指 (这个暂时没检测到)

    LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,

 

    // 身份验证是不成功的,因为有太多的失败会要求密码解除锁定,(前提是使用 LAPolicyDeviceOwnerAuthenticationWithBiometrics)iOS9和MAC OS0.11新特征

    LAErrorTouchIDLockout   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,

 

    // 认证被取消的应用(如无效而认证进行调用)这个暂时没有检测到,可能是苹果预留的 iOS9和MAC OS0.11新特征

    LAErrorAppCancel        NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,

 

    // LAContext通过这个电话已经失效(当LAContext失效时会调用)iOS9和MAC OS0.11新特征

    LAErrorInvalidContext   NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext

</code></code></code></code></code></code></code></code></code>

   

Touch 使用

首先,我们需要引入 LocalAuthentication 框架



<code><code><code><code><code><code><code><code><code><code>    #import <localauthentication localauthentication.h="">

</localauthentication></code></code></code></code></code></code></code></code></code></code>

   

使用很简单,先创建一个LAContext对象并配置必要的信息


   

<code><code><code><code><code><code><code><code><code><code><code>    LAContext *context = [[LAContext alloc] init];

    // 当指纹识别失败一次后,弹框会多出一个选项,而这个属性就是用来设置那个选项的内容

    context.localizedFallbackTitle = @"使用密码登录";

</code></code></code></code></code></code></code></code></code></code></code>

   

配置好LAContext对象后,就需要判断一下设备是否支持指纹识别功能


   

<code><code><code><code><code><code><code><code><code><code><code><code>NSError *error = nil;

 

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { // 该设备支持指纹识别

 

}else {

 

}

</code></code></code></code></code></code></code></code></code></code></code></code>

   

当设备支持指纹识别的时候,实现如下



   

<code><code><code><code><code><code><code><code><code><code><code><code>    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"身份验证需要解锁指纹识别功能" reply:^(BOOL success, NSError * _Nullable error) {

        if (success) {  // 验证成功

 

        }else {

 

            NSLog(@"%@", error.localizedDescription);

            switch (error.code) {

                case LAErrorSystemCancel:

                    NSLog(@"身份验证被系统取消(验证时当前APP被移至后台或者点击了home键导致验证退出时提示)");

                    break;

                case LAErrorUserCancel:

                    NSLog(@"身份验证被用户取消(当用户点击取消按钮时提示)");

                    break;

                case LAErrorAuthenticationFailed:

                    NSLog(@"身份验证没有成功,因为用户未能提供有效的凭据(连续3次验证失败时提示)");

                    break;

                case LAErrorPasscodeNotSet:

                    NSLog(@"Touch ID无法启动,因为没有设置密码(当系统没有设置密码的时候,Touch ID也将不会开启)");

                    break;

                case LAErrorTouchIDNotAvailable:

                    NSLog(@"无法启动身份验证");  // 这个没有检测到,应该是出现硬件损坏才会出现

                    break;

                case LAErrorTouchIDNotEnrolled:

                    NSLog(@"无法启动身份验证,因为触摸标识没有注册的手指");  // 这个暂时没检测到

                    break;

                case LAErrorUserFallback:

                {

                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                        NSLog(@"用户选择输入密码,切换主线程处理");

                    }];

                    break;

                }

                default:

                {

                    [[NSOperationQueue mainQueue] addOperationWithBlock:^{

                        NSLog(@"其他情况,切换主线程处理");   // 5次失败进入,如果继续验证,则需要输入密码解锁

                    }];

                    break;

                }

            }

        }

      }

    ];</code></code></code></code></code></code></code></code></code></code></code></code>

   

如果不支持,实现如下



   

<code><code><code><code><code><code><code><code><code><code><code><code>    NSLog(@"不支持指纹识别");

        switch (error.code) {

            case LAErrorTouchIDNotEnrolled:

                NSLog(@"设备Touch ID不可用");

                break;

            case LAErrorPasscodeNotSet:

                NSLog(@"系统未设置密码");

                break;

            default:

                NSLog(@"TouchID不可用或已损坏");

                break;

    }

 

    NSLog(@"%@", error.localizedDescription);</code></code></code></code></code></code></code></code></code></code></code></code>

   

github-Demo下载请点我

          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程