Touch ID
Touch ID是苹果公司的一种指纹识别技术。它作为iPhone 5s上的“杀手级”功能,早已为人们所熟知。 iPhone SE、iPhone 6、iPhone 6 Plus、iPhone 6s、iPhone 6s Plus、iPhone 7、iPhone 7 Plus,iPad Pro、iPad mini 4、iPad mini 3和iPad Air 2也使用了Touch ID。苹果把用户的指纹数据存放在处理器的安全区域(Secure Enclave)中,充分保护用户的数据安全。除此之外,苹果还有另外一道指纹数据安全防线,以一种前所未有的硬件技术实现了对用户数据的保护。
下面简单学习下怎么在iOS项目上使用 Touch ID
使用
Touch ID的API非常的简单也好理解,在使用前我们需要导入LocalAuthentication这个库。
1
首先来看下头文件的定义:
#import 《LocalAuthentication/LocalAuthentication.h》
//验证设备是否支持Touch ID
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError*__autoreleasing*)error __attribute__((swift_error(none)));
//进行验证的回调
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString*)localizedReason
reply:(void(^)(BOOLsuccess,NSError*__nullableerror))reply;
//取消Touch Id验证的按钮的标题,默认标题是输入密码@property(nonatomic,copy)NSString*localizedFallbackTitle;
代码使用示例
- (void)viewDidLoad {
[superviewDidLoad];
self.title=@"Just For Test";
UIButton*btn = [UIButtonbuttonWithType:UIButtonTypeCustom];
btn.frame=CGRectMake(138,200,100,100);
btn.backgroundColor= [UIColorredColor];
[btnsetTitle:@"点我哟"forState:UIControlStateNormal];
[btnaddTarget:selfaction:@selector(startTouchId)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:btn];
}
- (void)startTouchId{
LAContext*context = [LAContextnew];
NSError*error;
context.localizedFallbackTitle=@"啦啦啦失败了吧";
context.localizedCancelTitle=@"取消点我";
//用来判断设备是否支持Touch ID
if([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error]) {
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, .5f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
//验证身份
[contextevaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:NSLocalizedString(@"Use Touch ID to Change Color.",nil)reply:^(BOOLsuccess,NSError*error) {
if(success) {
dispatch_async(dispatch_get_main_queue(), ^{
self.view.backgroundColor= [UIColorcolorWithRed:arc4random()%255/255.0green:arc4random()%255/255.0blue:arc4random()%255/255.0alpha:1];
});
}else{
NSLog(@"%@",error.localizedDescription);
switch(error.code) {
caseLAErrorSystemCancel:
{
NSLog(@"Authentication was cancelled by the system");
//切换到其他APP,系统取消验证Touch ID
break;
}
caseLAErrorUserCancel:
{
NSLog(@"Authentication was cancelled by the user");
//用户取消验证Touch ID
break;
}
caseLAErrorUserFallback:
{
NSLog(@"User selected to enter custom password");
[[NSOperationQueuemainQueue]addOperationWithBlock:^{
//用户选择输入密码,切换主线程处理
}];
break;
}
caseLAErrorAuthenticationFailed:
{
NSLog(@"Authentication Failed");
break;
}
caseLAErrorTouchIDLockout:
{
NSLog(@"TOUCH ID is locked out");
break;
}
caseLAErrorAppCancel:
{
NSLog(@"app cancle the authentication");
break;
}
caseLAErrorInvalidContext:
{
NSLog(@"context is invalidated");
break;
}
default:
{
[[NSOperationQueuemainQueue]addOperationWithBlock:^{
//其他情况,切换主线程处理
}];
break;
}
}
}
}];
//});
}else{
/**
LAErrorTouchIDNotAvailable设备本身并不具备指纹传感装置。
*/
NSLog(@"%@",error.localizedDescription);
//不支持指纹识别,LOG出错误详情
switch(error.code) {
caseLAErrorTouchIDNotEnrolled:
{
//已经设定有密码机制,但设备配置当中还没有保存过任何指纹内容。
NSLog(@"TouchID is not enrolled");
break;
}
caseLAErrorPasscodeNotSet:
{
//设备上并不具备密码设置信息,也就是说Touch ID功能处于被禁用状态。
NSLog(@"A passcode has not been set");
break;
}
caseLAErrorTouchIDNotAvailable:{
NSLog(@"no TouchID");
break;
}
default:
{
NSLog(@"TouchID not available");
break;
}
}
}
}
这样我们就完成了一个Touch ID的验证功能。当我们点击按钮进行调用的时候,就会弹出验证的对话框:
2
弹窗目前还不能自定义,都是统一的,第一行是app的名字+Touch ID, 第二行是需要用Touch ID的理由。在用户进行操作后,我们可以在回调的block那边处理自己的业务逻辑。
总结
从上面的代码中我们也可以看到,Touch ID验证中我们并不能拿到标识,只有一个YES or NO的结果,只能用来表明当前用户有权限使用这设备。正常情况下,我们的手机里面的账号信息都是自己的,所以在一定方面的确有加固安全,验证和方便的功能。
网友评论