指纹验证这个功能现在在一些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 <LocalAuthentication/LocalAuthentication.h>
第四步:实现指纹验证
这一步就是很重要的地方了,在- (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 ()<WJTouchIDDelegate>
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这两个方式来实现,感兴趣的话可以看下。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍iOS指纹验证TouchID应用学习教程2,包括了iOS指纹验证TouchID应用学习教程2的使用技巧和注意事项,需要的朋友参考一下 上一篇文章简单的写了对于touchid的简单了解。因为太懒了,就没有写实例,现在就单独写一篇应用吧,这篇想做的就是一个模仿那个叫啥软件来着,某某理财类类的软件的一个指纹验证解锁。我们做出来的页面应该如下图,在app挂起到后台的时候再点击到前台的时候回出
本文向大家介绍简单实现iOS指纹解锁(TouchID),包括了简单实现iOS指纹解锁(TouchID)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了iOS指纹解锁的具体代码,供大家参考,具体内容如下 1、首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h
我想在银行项目中通过android平板电脑记录客户数据,包括指纹。当客户存款或取款时,会通过指纹数据核实哪个客户。Android设备记录指纹数据并与Web服务器(asp.net)同步。那么,开发指纹验证的最佳方法是什么?如果指纹设备与Android平板电脑连接更容易,请建议我。
我正在尝试从Java脚本连接到我的SFTP服务器。我是为了我的目的而使用JSch lib。用户名、密码和主机名正确,但我得到一个:Auth fail错误。 我还尝试在session.connect()之前添加以下行,但问题仍然存在。 我必须在knownhosts.txt中放些什么?我服务器钥匙的指纹? 你有什么建议吗?提前道谢!
本文向大家介绍学习thinkphp5.0验证类使用方法,包括了学习thinkphp5.0验证类使用方法的使用技巧和注意事项,需要的朋友参考一下 通过一个实例,给大家讲解一下如果通过thinkphp5.0验证类的方法。 自定义验证类,需继承Validate类 比如在home模块新建validate文件夹,再新建Test.php验证类,内容如下: 在Index控制器test方法使用 以上就是我们给出的
本文向大家介绍socket.io学习教程之基本应用(二),包括了socket.io学习教程之基本应用(二)的使用技巧和注意事项,需要的朋友参考一下 前言 Socket.IO支持及时、双向与基于事件的交流。它可以在每个平台、每个浏览器和每个设备上工作,可靠性和速度同样稳定。 实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客户。 实时通信和聊天:只需几行代码便可写成一个Soc