iOS 关于TouchID指纹解锁的实现

  一直想玩玩指纹解锁,近期时间比较闲,就研究了一下这个指纹解锁。这个功能实现起来还是很简单的,虽然看起来比较高大上,但是对于开发来说,越是高大上的东西一般都有封装好的,我们只需要调用就可以实现相当秀的功能。
  废话少说,直接贴教程。
  苹果公司推出的指纹识别,提供的功能很少,只要注意这两个功能即可(验证是否支持指纹以及指纹是否正确)。

  第一步:导入解锁必须的头文件

#import <LocalAuthentication/LocalAuthentication.h>

  第二步:(这一步主要是了解使用的方法,可以直接跳过看第三步的代码)

  这个方法是判断设备是否支持TouchID的。


1

2

- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)

error __attribute__((swift_error(none)));

  这个是用来验证TouchID的,会有弹出框出来。


1

2

3

- (void)evaluatePolicy:(LAPolicy)policy

       localizedReason:(NSString *)localizedReason

                 reply:(void(^)(BOOL success, NSError * __nullable error))reply;

  LAContext对象,这个主要设置的属性是localizedFallbackTitle。这个是用于设置左边的按钮的名称,默认是Enter Password.当你设置为@“”时会隐藏。还可以设置localizedReason这个属性,这是用于设置提示语,表示为什么要使用Touch ID。

  第三步:(整体代码)

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    //初始化上下文对象
    LAContext* context = [[LAContext alloc] init];
    //这个设置的使用密码的字体,当[email protected]""时,按钮将被隐藏

    [email protected]"输入密码解锁";

//这个设置的取消按钮的内容
    [email protected]"取消";
    //错误对象
    NSError* error = nil;
    NSString* result = @"需要验证您的touch ID";
    //首先使用canEvaluatePolicy 判断设备支持状态
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                             error:&error]) {
        NSLog(@"支持指纹识别");
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                localizedReason:result reply:^(BOOL success, NSError * _Nullable error) {
                    if (success) {
                        NSLog(@"验证成功 刷新主界面");
                    }else{
                        NSLog(@"%@",error.localizedDescription);
                        switch (error.code) {
                            case LAErrorSystemCancel:
                            {
                                NSLog(@"系统取消授权,如其他APP切入");
                                break;
                            }
                            case LAErrorUserCancel:
                            {
                                NSLog(@"用户取消验证Touch ID");
                                break;
                            }
                            case LAErrorAuthenticationFailed:
                            {
                                NSLog(@"授权失败");
                                break;
                            }
                            case LAErrorPasscodeNotSet:
                            {
                                NSLog(@"系统未设置密码");
                                break;
                            }
                            case LAErrorTouchIDNotAvailable:
                            {
                                NSLog(@"设备Touch ID不可用,例如未打开");
                                break;
                            }
                            case LAErrorTouchIDNotEnrolled:
                            {
                                NSLog(@"设备Touch ID不可用,用户未录入");
                                break;
                            }
                            case LAErrorUserFallback:
                            {
                                [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                    NSLog(@"用户选择输入密码,切换主线程处理");
                                }];
                                break;
                            }
                            default:
                            {
                                [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                    NSLog(@"其他情况,切换主线程处理");
                                }];
                                break;
                            }
                        }
                    }
                }];
    }else{
        NSLog(@"不支持指纹识别");
        switch (error.code) {
            case LAErrorTouchIDNotEnrolled:
            {
                NSLog(@"TouchID is not enrolled");
                break;
            }
            case LAErrorPasscodeNotSet:
            {
                NSLog(@"A passcode has not been set");
                break;
            }
            default:
            {
                NSLog(@"TouchID not available");
                break;
            }
        }

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

}

补充:

1.touch ID 在验证连续错误三次的时候,会停止touch ID的使用,需要输入手机的密码以解锁。还在研究。

2.在使用的过程中,在block回调中使用了LCProgressHUD,但是界面出现了卡死的现象,通过视图层级下,发现是由于LCProgressHUD的界面没有清除,导致整个界面被它覆盖,形成卡死假象。这是别人遇到的问题,Mark一下,防止以后出错。

参考链接:1.http://www.jianshu.com/p/0690a96ad5f6

     2.http://blog.csdn.net/zzzzzdddddxxxxx/article/details/53513909

附件Demo:其中包含我的小demo和一个封装好的类touchID.zip

时间: 2024-10-06 10:49:57

iOS 关于TouchID指纹解锁的实现的相关文章

iOS项目添加指纹解锁

目前常用的App支持指纹解锁的还不是很多,如果在你的项目中用一下是不是显得高大上呢? 废话不说多,干货- 1.在工程中添加LocalAuthentication.framework 2.在需要验证的controller引入头文件 #import <LocalAuthentication/LocalAuthentication.h> 3.加入以下代码 1 //验证指纹解锁是否可用 2 - (void)canEvaluatePolicy 3 { 4 LAContext *context = [[L

iOS开发之指纹解锁

http://blog.csdn.net/hongfengkt/article/details/49868073 前一阵子一直在赶项目进度,没有太多时间写博客,现在终于空闲了,将以前欠下的博客补上来. 在iOS8.0之后,API开放了指纹验证的功能.开放的API虽然只能用来作为验证使用,比较局限,但是对于有类似“手势密码”功能的app来说,已经足够用了.有了这个新api,就可以在app中再多一种高大上的解锁方式了. 指纹验证功能的最低硬件支持为iPhone5s,iPad 6,iPad mini

iOS 之(个人隐私钱包调用系统TouchID指纹锁验证)

// //  ViewController.m //  TouchID指纹验证 // //  Created by apple on 16/9/18. //  Copyright © 2016年 apple. All rights reserved. // #import "ViewController.h" #import "HomeViewController.h"//跳转成功后需要跳转到的视图控制器 #import <LocalAuthenticatio

iOS9 集成指纹解锁

添加依赖库 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h>  // 头文件 LAContext *context = [[LAContext alloc] init]; NSError *error = nil; //  这句代码是让指纹验证的提示框没有输入密码 context.localizedFallbackTitle = @""; if ([contex

iOS开发中指纹识别简单介绍

中指纹识别简单介绍,在iphone系列中,是从5S以后开始有了指纹识别的功能,在ios8的时候开放的指纹验证的接口. 所以我们在进行指纹识别应用的时候要去判断机型以及系统的版本. 代码如下,下面需要特别注意的其实就是LAPolicyDeviceOwnerAuthentication和LAPolicyDeviceOwnerAuthenticationWithBiometrics的区别,以及检测系统的版本通过[UIDevice currentDevice].systemVersion.floatVa

指纹解锁以及自定义转场动画

这两天工作不忙,就去研究了下指纹解锁以及转场动画,其实这里面的单单一个动画就可以说半天了,但是今天不去说动画.这个以后有时间在讲讲.. 指纹解锁,很简单,官方文档上说的很清楚,其实我们要做的几乎没有.. 1.导入 #import <LocalAuthentication/LocalAuthentication.h> 这个框架 2.导入下面那段代码,指纹解锁就完成了, so easy!!!!然后再实现自己大逻辑就可以了.. LAContext *myContext = [[LAContext a

IOS仿Android九宫格解锁效果[转]

原理很简单,监听view中touch的一系列事件,当判定手指位置在某个按钮附近的时候则判断此按钮选中,并画出线. 效果图如下: 你可以在NineGridUnlockView.m文件中方法 touchesEnded:withEvent: 的最后添加自己的代码来决定画线完成后来做什么. (当前工程还没有加入委托,后续可能加上) 代码地址: https://github.com/lcwangchao/NineGridUnlocker IOS仿Android九宫格解锁效果[转]

指纹解锁亮屏时间 Log 分析

极力推荐Android 开发大总结文章:欢迎收藏 Android 开发技术文章大总结 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.解锁指纹,发送指纹中断Log 2.认证指纹,计算指纹耗时 3.指纹认证成功,keyguard 响应解锁屏流程 4.keyguard 解锁结束,开启动Launcher至绘制工作 5.Launcher 绘制完成,隐藏Keyguard 6.点亮屏幕结束,统计亮屏时间 1. 解锁指纹,发送指纹中断Log 从kernel lo

iOS指纹解锁、手势解锁--Swift代码

一.指纹验证 iPhone 的Home键 上的金属环 能感应手指,通知Touch ID 读取指纹,Touch ID 传感器 可以拍摄 皮肤 皮下层指纹. 每次使用指纹,Touch ID 会持续的添加新的指纹特性,进一步提高准确.安全性. Touch ID 不会储存指纹的图像.它只存储指纹的数学表达式.设备中的芯片还包含称为“Secure Enclave”的高级安全架构,专门用于保护密码和指纹数据.指纹数据通过 Secure Enclave 的专用密钥得到加密和保护.iOS 和其他 app 绝不会