iOS之指纹解锁
2017-07-21 15:59
295 查看
对几种情况的说明
原理说明:指纹识别只可认出‘活手指’,iPhone5s(及以后机型)上的指纹传感器是通过发出射频信号探测手指纹路的,而且只探测手指表皮下面的一层皮肤,这样可以防止指纹被复制、盗窃。
当用户连续多次使用Touch ID失败后,Touch ID会被锁,需要用户输入手机开机密码解锁,这一整套的交互iOS系统已经封装在LocalAuthentication.framework里了,系统会自动弹出相应的操作界面,不需要开发者去操心,这大大的简便了开发者的开发集成和逻辑处理
#import "ViewController.h"
#import <LocalAuthentication/LocalAuthentication.h>//指纹解锁需要加入这个引用
@interface
ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
//iOS8.0后才支持指纹识别接口
if ([UIDevicecurrentDevice].systemVersion.floatValue
< 8.0) {
return;
}
[selfevaluateAuthenticate];
}
- (void)evaluateAuthenticate
{
//创建LAContext
LAContext* context = [[LAContextalloc]
init];//这个属性是设置指纹输入失败之后的弹出框的选项
context.localizedFallbackTitle =@"密码输入登录";//指纹识别失败后弹出框最右边的按钮内容,左边是取消。
NSError* error =nil;
NSString* result =@"请验证已有指纹";
//首先使用canEvaluatePolicy判断设备支持状态
if ([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error])
{
//支持指纹验证
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:result
reply:^(BOOL success,NSError *error) {
if (success) {
//验证成功,主线程处理UI
NSLog(@"指纹解锁成功");
}
else
{
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
caseLAErrorSystemCancel:
{
//系统取消授权,如其他APP切入
break;
}
caseLAErrorUserCancel:
{
//用户取消验证Touch ID
NSLog(@"用户取消指纹解锁");
break;
}
caseLAErrorAuthenticationFailed:
{
//授权失败
break;
}
caseLAErrorPasscodeNotSet:
{
//系统未设置密码
NSLog(@"为设置密码");
break;
}
caseLAErrorTouchIDNotAvailable:
{
//设备Touch ID不可用,例如未打开
NSLog(@"为打开");
break;
}
caseLAErrorTouchIDNotEnrolled:
{
//设备Touch ID不可用,用户未录入
NSLog(@"用户未录入指纹");
break;
}
caseLAErrorUserFallback:
{
//点击密码输入登录按钮调用这里的方法
//如果验证指纹失败,可以做其他操作,入跳转到手动输入密码页面
NSLog(@"输入框失败后弹出的界面底部两个按钮右边一个的点击方法法");
[[NSOperationQueuemainQueue]
addOperationWithBlock:^{
//用户选择输入密码,切换主线程处理
}];
break;
}
default:
{
[[NSOperationQueuemainQueue]
addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
}
else
{
//不支持指纹识别,LOG出错误详情
NSLog(@"不支持指纹识别");
switch (error.code) {
caseLAErrorTouchIDNotEnrolled:
{
NSLog(@"TouchID is not enrolled");
break;
}
caseLAErrorPasscodeNotSet:
{
NSLog(@"A passcode has not been set");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
NSLog(@"%@",error.localizedDescription);
}
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
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, } NS_ENUM_AVAILABLE(10_10, 8_0);
原理说明:指纹识别只可认出‘活手指’,iPhone5s(及以后机型)上的指纹传感器是通过发出射频信号探测手指纹路的,而且只探测手指表皮下面的一层皮肤,这样可以防止指纹被复制、盗窃。
当用户连续多次使用Touch ID失败后,Touch ID会被锁,需要用户输入手机开机密码解锁,这一整套的交互iOS系统已经封装在LocalAuthentication.framework里了,系统会自动弹出相应的操作界面,不需要开发者去操心,这大大的简便了开发者的开发集成和逻辑处理
#import "ViewController.h"
#import <LocalAuthentication/LocalAuthentication.h>//指纹解锁需要加入这个引用
@interface
ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
//iOS8.0后才支持指纹识别接口
if ([UIDevicecurrentDevice].systemVersion.floatValue
< 8.0) {
return;
}
[selfevaluateAuthenticate];
}
- (void)evaluateAuthenticate
{
//创建LAContext
LAContext* context = [[LAContextalloc]
init];//这个属性是设置指纹输入失败之后的弹出框的选项
context.localizedFallbackTitle =@"密码输入登录";//指纹识别失败后弹出框最右边的按钮内容,左边是取消。
NSError* error =nil;
NSString* result =@"请验证已有指纹";
//首先使用canEvaluatePolicy判断设备支持状态
if ([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error])
{
//支持指纹验证
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:result
reply:^(BOOL success,NSError *error) {
if (success) {
//验证成功,主线程处理UI
NSLog(@"指纹解锁成功");
}
else
{
NSLog(@"%@",error.localizedDescription);
switch (error.code) {
caseLAErrorSystemCancel:
{
//系统取消授权,如其他APP切入
break;
}
caseLAErrorUserCancel:
{
//用户取消验证Touch ID
NSLog(@"用户取消指纹解锁");
break;
}
caseLAErrorAuthenticationFailed:
{
//授权失败
break;
}
caseLAErrorPasscodeNotSet:
{
//系统未设置密码
NSLog(@"为设置密码");
break;
}
caseLAErrorTouchIDNotAvailable:
{
//设备Touch ID不可用,例如未打开
NSLog(@"为打开");
break;
}
caseLAErrorTouchIDNotEnrolled:
{
//设备Touch ID不可用,用户未录入
NSLog(@"用户未录入指纹");
break;
}
caseLAErrorUserFallback:
{
//点击密码输入登录按钮调用这里的方法
//如果验证指纹失败,可以做其他操作,入跳转到手动输入密码页面
NSLog(@"输入框失败后弹出的界面底部两个按钮右边一个的点击方法法");
[[NSOperationQueuemainQueue]
addOperationWithBlock:^{
//用户选择输入密码,切换主线程处理
}];
break;
}
default:
{
[[NSOperationQueuemainQueue]
addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
}
else
{
//不支持指纹识别,LOG出错误详情
NSLog(@"不支持指纹识别");
switch (error.code) {
caseLAErrorTouchIDNotEnrolled:
{
NSLog(@"TouchID is not enrolled");
break;
}
caseLAErrorPasscodeNotSet:
{
NSLog(@"A passcode has not been set");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
NSLog(@"%@",error.localizedDescription);
}
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
相关文章推荐
- iOS 指纹解锁
- iOS开发之指纹解锁
- iOS开发实现TouchID指纹解锁
- iOS开发 手势密码解锁和指纹TouchID解锁
- iOS引导页及指纹解锁
- iOS指纹解锁,几行代码解决,特简单
- iOS 8.0新特性之指纹解锁
- iOS手势解锁和指纹解锁
- iOS开发实现TouchID指纹解锁
- iOS 指纹解锁
- iOS 指纹解锁 验证TouchID
- iOS指纹解锁和手势解锁
- iOS开发之指纹解锁
- ios 指纹解锁
- iOS 指纹解锁
- 论坛源码推荐(6月10日):iOS 8指纹解锁 用Swift语言编写的JokeClient和FanFan
- iOS开发之指纹解锁
- iOS开发之指纹解锁
- iOS手势解锁、指纹解锁--Swift代码
- iOS 指纹解锁