热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS指纹验证TouchID应用学习教程

这篇文章主要为大家详细iOS指纹验证TouchID应用学习教程的第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

指纹验证这个功能现在在一些app中经常常见,常常与数字解锁,手势解锁联合起来使用。前几天接到说实现一个指纹验证的功能,捣鼓了挺久,然后今天,我就简单的介绍下指纹验证,会做个简单的demo实现一下基本的功能。 

支持系统和机型:iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8。实现起来呢,其实还是很简单的,下面我们就用纯代码方式实现一个简单的demo1。

第一部分:调用原生服务实现指纹验证

这部分了解个大概就可以了

第一步:添加LocalAuthentication.framework库

第二步:在appdelegate.m中添加代码
这个不说其实大家也都知道的吧。

#import "AppDelegate.h"
#import "ViewController.h"
@interface AppDelegate ()

@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 //appdelegate
 _window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
 _window.backgroundColor = [UIColor whiteColor];
 [_window makeKeyAndVisible];
 ViewController *vc = [[ViewController alloc]init];
 UINavigationController *na = [[UINavigationController alloc]initWithRootViewController:vc];
 _window.rootViewCOntroller= na;
 return YES;
}

第三步
引入头文件

  #import

第四步:实现指纹验证 

这一步就是很重要的地方了,在- (void)viewDidLoad中写入验证实现的代码,这里只有两步,因为LAContext在官方文档中只有两个方法:

 -canEvaluatePolicy:error: 
//-(BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));

 -evaluatePolicy:localizedReason:reply: 
//- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply;

一个是判断设备是否支持touchid,一个是进行验证返回不同的结果,之前在网上经常可以一些文章中写了,指纹验证的第一步都是先判断设备的系统版本等等,现在似乎都不需要了,只要调用该方法就可以了。全部的代码 如下:

- (void)viewDidLoad {
 [super viewDidLoad];
 self.title = @"TouchIDSimpleDemoOne";
 LAContext *cOntext= [[LAContext alloc]init];
 NSError *error;
 NSString *result = @"需要你身份验证呢"; 
 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
 {
 [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error)
 {
 if (success)
 {
 //验证成功,主线程处理UI
 //这个地方呢就是写一些验证成功之后需要做些什么事情的代码。
 NSLog(@"验证成功");
 }
 else
 {
 //以下是一些验证失败的原因啥的
 NSLog(@"%@",error.localizedDescription);
 switch (error.code) {
  case LAErrorSystemCancel:
  {
  NSLog(@"切换到其他APP,系统取消验证Touch ID");
  //切换到其他APP,系统取消验证Touch ID
  break;
  }
  case LAErrorUserCancel:
  {
  NSLog(@"用户取消验证Touch ID");
  //用户取消验证Touch ID
  break;
  }
  case LAErrorUserFallback:
  {
  NSLog(@"用户选择输入密码");
  [[NSOperationQueue mainQueue] addOperationWithBlock:^{
  //用户选择其他验证方式,切换主线程处理
  }];
  break;
  }
  default:
  {
  NSLog(@"LAErrorAuthenticationFailed,授权失败");
  //授权失败
  [[NSOperationQueue mainQueue] addOperationWithBlock:^{
  //其他情况,切换主线程处理
  }];
  break;
  }
 }
 }
 }]; 
 }else
 {
 //不支持指纹识别,LOG出错误详情

 switch (error.code) {
 case LAErrorTouchIDNotEnrolled:
 {
 NSLog(@"设备Touch ID不可用,用户未录入");
 break;
 }
 case LAErrorPasscodeNotSet:
 {
 NSLog(@"系统未设置密码");
 break;
 }
 case LAErrorTouchIDNotAvailable:
 {
 NSLog(@"设备Touch ID不可用,例如未打开");
 break;
 }
 default:
 {
 NSLog(@"系统未设置密码");
 break;
 }
 }
 NSLog(@"%@",error.localizedDescription);
 } 
}

//指纹验证返回值
typedef NS_ENUM(NSInteger, LAError)
{
 /// Authentication was not successful, because user failed to provide valid credentials.
 LAErrorAuthenticatiOnFailed= kLAErrorAuthenticationFailed,

 /// Authentication was canceled by user (e.g. tapped Cancel button).
 LAErrorUserCancel = kLAErrorUserCancel,

 /// Authentication was canceled, because the user tapped the fallback button (Enter Password).
 LAErrorUserFallback = kLAErrorUserFallback,

 /// Authentication was canceled by system (e.g. another application went to foreground).
 LAErrorSystemCancel = kLAErrorSystemCancel,

 /// Authentication could not start, because passcode is not set on the device.
 LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,

 /// Authentication could not start, because Touch ID is not available on the device.
 LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,

 /// Authentication could not start, because Touch ID has no enrolled fingers.
 LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,

 /// Authentication was not successful, because there were too many failed Touch ID attempts and
 /// Touch ID is now locked. Passcode is required to unlock Touch ID, e.g. evaluating
 /// LAPolicyDeviceOwnerAuthenticationWithBiometrics will ask for passcode as a prerequisite.
 LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,

 /// Authentication was canceled by application (e.g. invalidate was called while
 /// authentication was in progress).
 LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,

 /// LAContext passed to this call has been previously invalidated.
 LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext
} NS_ENUM_AVAILABLE(10_10, 8_0);

以上呢,就是一个简单的demo了,可能有些小问题,到时候需要的话可以自调整。这里附上这个demo的guithub链接看这里看这里,链接在这呢。

第二部分:利用现有的第三方组件实现

这个部分可以好好学习一下。

在这里呢,我要推荐一个别人写的一个第三方的组件,就是[WJTouchID](https://github.com/hu670014125/WJTouchID);这个控件的话,在这个链接上其实已经有写出怎么用了,其实不需要我再都说什么,但是我还是要说下吧。 

调用时只需要一两行代码调用,但是回调函数还是需要写不少东西的。

1:复制文件进去

2:引入头文件

#import "WJTouchID.h"

3:遵守协议

@interface ViewController ()

4: 创建对象

@property (nonatomic, strong) WJTouchID *touchID;

5:调用

- (void)viewDidLoad {
 [super viewDidLoad];
 //初始化
 WJTouchID *touchid = [[WJTouchID alloc]init];
 [touchid startWJTouchIDWithMessage:WJNotice(@"自定义信息", @"The Custom Message") fallbackTitle:WJNotice(@"", @"Fallback Title") delegate:self];
 self.touchID = touchid;
}

6:实现回调函数

@required

 //TouchID验证成功
- (void)WJTouchIDAuthorizeSuccess;

 //TouchID验证失败
- (void)WJTouchIDAuthorizeFailure;

@optional

 //当前设备不支持指纹识别
- (void)WJTouchIDIsNotSupport;

 //当前软件被挂起取消了授权(如突然来了电话,应用进入前台)
- (void)WJTouchIDAuthorizeErrorAppCancel;

 //取消TouchID验证 (用户点击了取消)
- (void)WJTouchIDAuthorizeErrorUserCancel;

 //在TouchID对话框中点击输入密码按钮
- (void)WJTouchIDAuthorizeErrorUserFallback;

 //在验证的TouchID的过程中被系统取消 例如突然来电话、按了Home键、锁屏...
- (void)WJTouchIDAuthorizeErrorSystemCancel;

 //无法启用TouchID,设备没有设置密码
- (void)WJTouchIDAuthorizeErrorPasscodeNotSet;

 //多次连续使用Touch ID失败,Touch ID被锁,需要用户输入密码解锁
- (void)WJTouchIDAuthorizeErrorTouchIDLockout;

 //当前软件被挂起取消了授权 (授权过程中,LAContext对象被释)
- (void)WJTouchIDAuthorizeErrorInvalidContext;

 //设备没有录入TouchID,无法启用TouchID
- (void)WJTouchIDAuthorizeErrorTouchIDNotEnrolled;

 //该设备的TouchID无效
- (void)WJTouchIDAuthorizeErrorTouchIDNotAvailable;

这些方法实现结束后呢,这个功能也基本上算是完成了。因为好像篇幅太长了,看得人肯定也嫌烦,所以我准备另写一篇做一个在app被唤醒的时候启动指纹验证,分别用弹出控制器和弹出自定义view这两个方式来实现,感兴趣的话可以看下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
  •   源码地址:https:github.comfzhleeSwiftUI-Guide当点击按钮时,弹出Modl模态窗口。示例代码:structContentView:View{@S ... [详细]
  • Flow 生态案例学习 | Emerald City为Flow上DAO、教育和开发铺平道路
    原文链接:https://www.onflow.org/post/emer ... [详细]
  • Flutter入门——Flutter功能概览
    IT之家12月5日消息:今天谷歌官方宣布Flutter的1.0版本正式发布!Flutter是Google打造的UI工具包,帮助你通过一套代码同时在iOS和Android上构建媲美原 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 打开文件管理器_【教程】模组管理器3.1食用指南
    文编:byakko最近有部分小伙伴反应还不会使用unity模组管理器,现在我就给大家讲一下unity模组管理器——从下载到使用。完整视频版以下是无WiF ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • iphone充着电反而掉电
    iphone一边充电还一边掉电的原因可能是充电的电压不够、充电器或数据线不是原装的、充电环境的温度过低、充电头用久了老化或者是接口脏了、手机软硬件出现问题等等。建议先把手机进行重启 ... [详细]
  • Xcode离线安装帮助文档1.在线查看帮助文件:Xcode下查看帮助文件,菜单Help-DeveloperDocumentation在右上角搜索框中即可检索,但速度很慢 ... [详细]
  • 抖音别人的文案标题怎么复制
    复制别人的抖音文案标题操作如下:1、打开抖音app,选择需要复制文案的视频,点击右侧箭头即可弹出分享框。2、在分享框中,点击复制链接”,即可将视频链接复制成功。3、在输入框中,选择 ... [详细]
  • Testner自动化测试平台免费开放啦
    swift(雨燕)是目前世界上飞行速度最快的鸟之一,尖尾雨燕平时飞行的时速为170公里,最快可达到325.5公里。恰恰自动化测试的主要目的就是为了提高测试效率,因此,Testner自动化测试平台也叫 ... [详细]
author-avatar
_A-lan
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有