TouchID 指纹解锁
概述
详细
一、软硬件支持
指纹验证功能的最低硬件支持为iPhone5s, iPad 6,iPad mini 3这些有touch ID硬件支持的设备,并且操作系统最低为iOS8.0,因为touch ID是在iOS8.0之后才开放的一类api,实现了指纹验证的功能。
二、程序实现
指纹解锁该功能实现起来是很简单的,因为苹果都已经帮我们封装好了,只需要实现几个方法就可以了。
实现流程:
step1: 引入依赖框架(指纹解锁必须的头文件):
#import <LocalAuthentication/LocalAuthentication.h>
step2: 指纹验证的实现的两个主要方法:
这个方法是判断设备是否支持TouchID的。
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)
error __attribute__((swift_error(none)));
这个是用来验证TouchID的,会有弹出框出来。
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError * __nullable error))reply;
step3: 主要回调方法:
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, // 触摸ID现在锁定 验证是不成功的,因为有太多的失败的尝试和触摸ID
LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAErrorTouchIDLockout, // 认证被取消的应用(如无效而认证进行调用)。
LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel, /// LAContext passed to this call has been previously invalidated.
// LAContext通过这个电话已经失效
LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext
}
验证指纹:
- (void)authenticateUser {
//创建LAContext
LAContext *context = [[LAContext alloc] init];
// 这个属性是设置指纹输入失败之后的弹出框的选项
context.localizedFallbackTitle = @"请输入密码";
NSError *error = nil;
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
NSLog(@"支持指纹识别");
// localizedReason: 用于设置提示语,表示为什么要使用Touch ID
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请按home键指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
dispatch_sync(dispatch_get_main_queue(), ^{
// Update UI in UI thread here
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: // 用于设置左边的按钮的名称,默认是Enter Password
{
[[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、压缩文件的截图

2、运行效果的截图

四、其他补充
界面性问题可以根据自己项目需求调整即可, 具体可参考代码, 项目能够直接运行!
注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权
TouchID 指纹解锁的更多相关文章
- iOS --- Touch ID指纹解锁
https://www.cnblogs.com/ljmaque/p/TouchID.html 最近在项目中刚好用到了TouchId指纹解锁功能,之前也没有接触过,立马百度看看究竟是要如何使用,发现其实 ...
- iOS 指纹解锁 验证TouchID
iOS指纹解锁 1.首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthenticatio ...
- 基于 LocalAuthentication 框架的指纹解锁
效果 想必大家对 iPhone 的指纹解锁功能已经相当的熟悉了.来看看效果吧! Local Authentication 概述 Local Authentication 框架提供了按照指定的安全策略请 ...
- iOS9 集成指纹解锁
添加依赖库 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h> // 头文件 ...
- iOS - (个人隐私钱包调用系统本机TouchID指纹锁验证)
// // ViewController.m // TouchID指纹验证 // // Created by apple on 16/9/18. // Copyright © 2016年 ap ...
- iOS 指纹解锁
目前常用的App支持指纹解锁的还不是很多,如果在你的项目中用一下是不是显得高大上呢? 废话不说多,干货- 1.在工程中添加LocalAuthentication.framework 2.在需要验证的c ...
- 新iPhone有望加入指纹解锁,你会买吗?
苹果新款iPhone即将在9月份正式发布,或命名为iPhone 13或者iPhone 12s.据外媒报道,新一代iPhone的屏幕和相机都将迎来重大升级,同时还将首次加入屏下指纹解锁技术.你期待吗? ...
- iOS开发之指纹解锁
http://blog.csdn.net/hongfengkt/article/details/49868073 前一阵子一直在赶项目进度,没有太多时间写博客,现在终于空闲了,将以前欠下的博客补上来. ...
- Android指纹解锁
Android6.0及以上系统支持指纹识别解锁功能:项目中用到,特此抽离出来,备忘. 功能是这样的:在用户将app切换到后台运行(超过一定的时长,比方说30秒),再进入程序中的时候就会弹出指纹识别的界 ...
随机推荐
- tomcat启动时间修改
Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires ...
- RecyclerView 缓存机制详解
一 前言 RecyclerView据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView.GridView.RecyclerView可以用来代替传 ...
- linux 监控CPU 内存情况
htop
- ELK+Filebeat 安装配置入门
本文地址 http://www.cnblogs.com/jasonxuli/p/6397244.html https://www.elastic.co 上,elasticsearch,logsta ...
- Java网络编程技术1
1. Java网络编程常用API 1.1 InetAddress类使用示例 1.1.1根据域名查找IP地址 获取用户通过命令行方式指定的域名,然后通过InetAddress对象来获取该域名对应的IP地 ...
- C语言:将结构体数组的成绩按照从小到大进行排序。
#include<stdio.h> typedef struct student { char *name; int sno; int age; float score; }Student ...
- 某浪PHP面试题及答案优化
前几天一网友去国内某知名IT公司某浪面试PHP,在他谈心得的时候得一面试题,下面写问题答案及优化方案,希望大家多提提意见. “神马,杨辉三角?” 我估计太久不上学了,当年初中数学及大学C语言课上的杨辉 ...
- eclipse svn 配置
1.安装svn http://subversion.apache.org/ 到apache网站上下载svn 2.在eclipse中安装svn插件 在eclipse->help->eclip ...
- 网络编程socket之listen函数
摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被 ...
- WF4.0(2)----设计工作流
自从做了程序员,发现自己长胖了,而且自己的身体抵抗力也出了问题,最近身体不适,公司工作任务最近也很赶,上次写了WF4.0的简介,这次就工作中工作流设计的几种方式稍微总结一下.设计工作流包括四种方式:流 ...