您的位置:首页 > 移动开发 > IOS开发

iOS开发之Touch ID指纹验证

2016-02-01 14:26 495 查看
iOS8.0以上支持指纹验证,允许App对用户身份进行本地验证。

使用Touch ID 需要两步即可。

1、检查Touch ID是否可用

2、获得指纹验证结果

集成

依赖框架

导入LocalAuthentication.framework

#import <LocalAuthentication/LocalAuthentication.h>


代码

- (void)authenticateUser
{
//做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。
if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) return;
//初始化上下文对象
LAContext *context = [[LAContext alloc] init];
//错误对象
NSError *error = nil;
NSString *result = @"请验证已有指纹";
//首先使用canEvaluatePolicy 判断设备支持状态
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(@"Authentication was cancelled by the system");
//切换到其他APP,系统取消验证Touch ID
break;
}
case LAErrorUserCancel:
{
NSLog(@"Authentication was cancelled by the user");
//用户取消验证Touch ID
break;
}
case LAErrorUserFallback:
{
NSLog(@"User selected to enter custom password");
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//用户选择输入密码,切换主线程处理
}];
break;
}
case LAErrorAuthenticationFailed:
{
//授权失败(连续三次指纹识别错误)
NSLog(@"Application retry limit exceeded");
break;
}
case LAErrorTouchIDLockout:
{
//iOS9第一次输错会锁住指纹验证功能,然后要求输入密码来激活指纹验证
NSLog(@"Biometry is locked out");
break;
}
case LAErrorAppCancel:
{
//用户不能控制的挂起,例如突然来了电话,电话应用进入前台,APP被挂起
NSLog(@"");
}
case LAErrorInvalidContext:
{
//授权过程中,LAContext对象被释放掉了,造成的授权失败
NSLog(@"");
}
case LAErrorTouchIDNotAvailable:
{
//设备Touch ID不可用,例如未打开
break;
}
default:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
}
else
{
//不支持指纹识别,打印出错误详情
switch (error.code) {
case LAErrorTouchIDNotEnrolled:
{
//设备Touch ID不可用,用户未录入
//No fingers are enrolled with Touch ID
NSLog(@"TouchID is not enrolled");
break;
}
case LAErrorPasscodeNotSet:
{
//系统未设置密码
NSLog(@"A passcode has not been set");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
NSLog(@"%@",error.localizedDescription);
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: