iOS TouchID 认证(仅限设备支持指纹识别)
2017-01-03 本文已影响70人
会飞的大马猴
iOS 8的SDK开放了Touch ID的接口.从WWDC的视频中可以看到Touch ID应用在两个方面:用于Key Chain加密和用于授权.iOS 8正式版发布以后我们可以看到Evernote的iOS app已经集成了该功能.下面来看看如何实现使用Touch ID进行身份认证.
需要的类
LAContext : 指纹验证操作对象
没错!这一个类就够用了
首先,我们要确保设备是否支持指纹识别,直接贴代码
LAContext* context = [[LAContextalloc]init];
//错误对象
NSError* error =nil;
//首先使用canEvaluatePolicy判断设备支持状态
BOOL isSupport = [contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error]
NSString*alertName =@"提示信息";
if (isSupport) {
//支持指纹验证
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:alertName reply:^(BOOL success, NSError *error) {
if (success) {
//验证成功,主线程处理UI
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_sync(mainQueue, ^{
self.label.text = @"验证成功";
});
}
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;
}
default:
{
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
}
else
{
//不支持指纹识别,LOG出错误详情
switch (error.code) {
case LAErrorTouchIDNotEnrolled:
{
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);
}```
#总结
其实手势识别很简单,总体来说 只要一个类,一句代码,不过需要我们判断的状态有那么几种,我在代码中已经注释了。