IOS实现TouchID和FaceID

IOS TouchID或FaceID核心实现

1.#import <LocalAuthentication/LocalAuthentication.h>

2.创建LAContext实例context

3.配置context的localizedFallbackTitle,为验证失败后的撤销操作

4.主要实现context的两个方法:

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

用于验证手机是否支持FaceID或TouchID

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

用于启动TouchID或FaceID验证

5.之后是处理验证后的回调操作,判断success确认验证是否通过,error.code来判断验证失败原因:

LAErrorSystemCancel:系统取消授权

LAErrorUserCancel:用户取消验证

LAErrorAuthenticationFailed:验证失败

LAErrorPasscodeNotSet:密码未设置

kLAErrorTouchIDNotAvailable:Touch ID尚未启用

kLAErrorTouchIDNotEnrolled:Touch ID尚未录入


代码:

//
// ViewController.m
// TouchIDDemo
//
// Created by dave.luo on 2018/6/14.
// Copyright © 2018年 dave.luo. All rights reserved.
//
#import "ViewController.h"
#import <LocalAuthentication/LocalAuthentication.h>
@interface ViewController ()
@end
@implementation ViewController
@synthesize context;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
context = [LAContext new];
context.localizedFallbackTitle = @"忘记密码";
_result.hidden=YES;
[self verifyTouchID];
}
-(void)verifyTouchID{
NSError *error = nil;
if([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]){
NSLog(@"支持指纹识别");
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {
if(success){
NSLog(@"验证成功");
dispatch_async(dispatch_get_main_queue(), ^{
_result.hidden=NO;
_result.text = @"验证成功";
});
}
else{
NSLog(@"%@",error.localizedDescription);
dispatch_async(dispatch_get_main_queue(), ^{
_result.hidden=NO;
_result.text = @"验证失败";
});
switch (error.code) {
case LAErrorSystemCancel:
{
NSLog(@"系统取消授权");
break;
}
case LAErrorUserCancel:{
NSLog(@"用户取消验证");
break;
}
case LAErrorAuthenticationFailed:{
NSLog(@"验证失败");
break;
}
case LAErrorPasscodeNotSet:{
NSLog(@"密码未设置");
break;
}
case kLAErrorTouchIDNotAvailable:{
NSLog(@"Touch ID尚未启用");
break;
}
case kLAErrorTouchIDNotEnrolled:{
NSLog(@"Touch ID尚未录入");
break;
}
case kLAErrorUserFallback:{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"用户选择输入密码,切换主线程处理");
}];
break;
}
default:{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"其他情况,切换主线程处理");
}];
break;
}
}
}
}];
}else{
NSLog(@"不支持指纹识别的设备");
dispatch_async(dispatch_get_main_queue(), ^{
_result.hidden=NO;
_result.text = @"不支持指纹识别的设备";
});
switch (error.code) {
case kLAErrorTouchIDNotEnrolled:
{
NSLog(@"TouchID is not enrolled");
break;
}
case LAErrorPasscodeNotSet:
{
NSLog(@"A passcode has not been set");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end

版权声明:著作权归作者所有。

相关推荐

Pandas对应SQL的in和not in实现

在Pandas提供了pd.isin(),使用它可以实现SQL的in和not in。not in 对应于:~a.isin(b) 示例:假如有以下dataframe数据,它包含了列data如下:>>> df   data 0   a 1   b 2 &nb

iOS动态改变App Icon

从iOS10.3开始,苹果就支持了开发者通过编程来动态改变app的icon。这里简单介绍下如何动态改变app icon。首先要了解一下三个属性/api:var supportsAlternateIcons: Bool { get } var alternateIconName: String? { 

Kotlin实现Java的三元条件运算

在Kotlin没有类似Java的三元条件运算:a ? b : c 在Kotlin有几种等效的方法:ifval r =if (a) b else c whenval r = when(a) {     true 

Android使用CountDownTimer实现倒计时示例(Kotlin)

CountDownTimer是一个抽象类,它的构造函数为CountDownTimer(long millisInFuture, long countDownInterval) millisInFuture:倒计时的总时间,从调用start()方法开始。毫秒数countDownInterval:倒计时的时间间隔。毫秒数。CountDownTimer主要有四个方法:syn

Xcode 9添加项目的iOS App图标

Xcode 8及之前的版本是可以直接在iTunes Connect上添加App icon。而Xcode 9则是把App icon放置在项目的asset catalog。在Info.plist 添加key CFBundleIconName:<key>CFBundleIconName</key> &