iOS开发--touchID指纹识别
2015-09-14 17:08
676 查看
从iPhone 5s、iOS7开始,就有指纹识别了,不过指纹识别的API好像是iOS8出来之后才开放的,具体记得不是很清楚了。
最近没事研究了一下指纹识别,不过我看到网上关于这方面的资料都不是很全,所以我就来写一下,对我也可以强化一下记忆,让大家也可以参考参考。
其实这个东西已经封装的很简单了,就一个类,里面有2个方法,2个属性,东西很少。
先直接上代码,然后再在下面解释一下。
.h文件什么都没写,直接.m文件了。
在使用touchID之前,先要导入
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError *__autoreleasing
*)error;
该方法是用来判断设备是否支付指纹识别;
- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString
*)localizedReason reply:(void(^)(BOOL success,NSError *error))reply;
该方法是用来识别指纹的。
按上面的代码写了后,运行,会看到如下效果:
在该图中,“指纹识别”四个字是App的名字,下面的一行字“请通过Home键输入您的手机指纹密码”是方法 - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError *error))reply
中的localizedReason,这个字符串必须要写,不能为空,不然会崩。
这里面的LAPolicy分为两种:
LAPolicyDeviceOwnerAuthenticationWithBiometrics
可以简单的理解为,基于 TouchID 的授权;若 Touch ID 不可用,将会授权失败。在后面我们会详细阐述这种授权方式
Touch ID,将在错误输入 5 次后被锁定。锁定后,需要到手机锁屏界面输入密码来解锁
LAPolicyDeviceOwnerAuthentication
支持两种授权方式,即:Touch ID 和 输入密码
优先以 Touch ID 方式进行授权,若Touch ID输入错误5次后,会弹出输入密码的界面
输入密码授权,将在错误输入 6 次后被锁定
若 Touch ID 和 输入密码都不用,将授权失败
如果指纹识别成功,那么就会进入if(success){}这个方法;
如果指纹识别不成功,那么就会进入else的方法中,失败的原因有很多。
在LAError中详细列出了这些失败的code,
指纹识别默认是3次机会,如果三次都失败了,那么输入指纹的这个AlertView就会dismiss。
#import <LocalAuthentication/LAContext.h>中有一个属性,
@property (nonatomic)NSNumber *maxBiometryFailuresNS_AVAILABLE(10_10,8_1);
就是用来设置其最大可失败次数的。
如果你指纹识别失败,会出现这个界面:
该界面中,“输入密码”这个按钮上的字样有该类中的另外一个属性所控制,
@property (nonatomic,copy)NSString *localizedFallbackTitle;
对,就是它!默认是Enter Password,输入密码。
如果你点了这个按钮,会进入
if (error.code ==LAErrorUserFallback) {
NSLog(@"用户使用Fallback(用户用其他登陆方式了)");
}
这个方法。
如果你三次指纹识别都失败了,AlertView消息,随后进入
if (error.code ==LAErrorAuthenticationFailed) {
NSLog(@"授权失败,指纹识别三次都错了。");
}
该方法,你可以对其进行其他操作。
OK,大致就这些了。
最近没事研究了一下指纹识别,不过我看到网上关于这方面的资料都不是很全,所以我就来写一下,对我也可以强化一下记忆,让大家也可以参考参考。
其实这个东西已经封装的很简单了,就一个类,里面有2个方法,2个属性,东西很少。
先直接上代码,然后再在下面解释一下。
.h文件什么都没写,直接.m文件了。
#import "ViewController.h" #import <LocalAuthentication/LocalAuthentication.h> @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)buttonClick:(UIButton *)sender { LAContext *context = [[LAContext alloc] init]; // _context.localizedFallbackTitle = @"用密码登录"; // _context.maxBiometryFailures = @3; NSError *error = nil; BOOL isSupport = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]; if (isSupport) { [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请通过Home键输入您的手机指纹密码" reply:^(BOOL success, NSError *error) { if (success) { NSLog(@"指纹识别成功"); }else{ NSLog(@"%ld",error.code); if (error.code == LAErrorAuthenticationFailed) { NSLog(@"授权失败,指纹识别三次都错了。"); } if (error.code == LAErrorUserCancel) { NSLog(@"用户取消"); } if (error.code == LAErrorUserFallback) { NSLog(@"用户使用Fallback(用户用其他登陆方式了)"); } if (error.code == LAErrorSystemCancel) { NSLog(@"系统取消"); } } }]; }else{
if (error.code == LAErrorPasscodeNotSet) { NSLog(@"密码未设置"); } if (error.code == LAErrorTouchIDNotAvailable) { NSLog(@"touchID不可用"); } if (error.code == LAErrorTouchIDNotEnrolled) { NSLog(@"touchID未录入"); }}}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning];}
在使用touchID之前,先要导入
#import <LocalAuthentication/LocalAuthentication.h>这个类中有2个方法,
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError *__autoreleasing
*)error;
该方法是用来判断设备是否支付指纹识别;
- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString
*)localizedReason reply:(void(^)(BOOL success,NSError *error))reply;
该方法是用来识别指纹的。
按上面的代码写了后,运行,会看到如下效果:
在该图中,“指纹识别”四个字是App的名字,下面的一行字“请通过Home键输入您的手机指纹密码”是方法 - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError *error))reply
中的localizedReason,这个字符串必须要写,不能为空,不然会崩。
这里面的LAPolicy分为两种:
LAPolicyDeviceOwnerAuthenticationWithBiometrics
可以简单的理解为,基于 TouchID 的授权;若 Touch ID 不可用,将会授权失败。在后面我们会详细阐述这种授权方式
Touch ID,将在错误输入 5 次后被锁定。锁定后,需要到手机锁屏界面输入密码来解锁
LAPolicyDeviceOwnerAuthentication
支持两种授权方式,即:Touch ID 和 输入密码
优先以 Touch ID 方式进行授权,若Touch ID输入错误5次后,会弹出输入密码的界面
输入密码授权,将在错误输入 6 次后被锁定
若 Touch ID 和 输入密码都不用,将授权失败
如果指纹识别成功,那么就会进入if(success){}这个方法;
如果指纹识别不成功,那么就会进入else的方法中,失败的原因有很多。
在LAError中详细列出了这些失败的code,
// // LAError.h // LocalAuthentication // // Copyright (c) 2013 Apple. All rights reserved. // #import <Foundation/Foundation.h> #import <LocalAuthentication/LAPublicDefines.h> 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, } NS_ENUM_AVAILABLE(10_10, 8_0); /// LocalAuthentication error domain. extern NSString *const LAErrorDomain NS_AVAILABLE(10_10, 8_0);
指纹识别默认是3次机会,如果三次都失败了,那么输入指纹的这个AlertView就会dismiss。
#import <LocalAuthentication/LAContext.h>中有一个属性,
@property (nonatomic)NSNumber *maxBiometryFailuresNS_AVAILABLE(10_10,8_1);
就是用来设置其最大可失败次数的。
如果你指纹识别失败,会出现这个界面:
该界面中,“输入密码”这个按钮上的字样有该类中的另外一个属性所控制,
@property (nonatomic,copy)NSString *localizedFallbackTitle;
对,就是它!默认是Enter Password,输入密码。
如果你点了这个按钮,会进入
if (error.code ==LAErrorUserFallback) {
NSLog(@"用户使用Fallback(用户用其他登陆方式了)");
}
这个方法。
如果你三次指纹识别都失败了,AlertView消息,随后进入
if (error.code ==LAErrorAuthenticationFailed) {
NSLog(@"授权失败,指纹识别三次都错了。");
}
该方法,你可以对其进行其他操作。
OK,大致就这些了。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- iOS开发中实现邮件和短信发送的简单示例
- ios通过按钮点击异步加载图片
- 加载带有手势识别器的XIB文件需注意哪些问题