一、引言
iPhone5s之后,iPhone硬件上已支持进行指纹识别的功能,相应的,一些新的api也可以应用于APP中,进行用户安全的验证。目前,开发者可以使用的安全验证方式有两种,一种是通过手机密码进行验证,一种是通过识别指纹进行验证。
二、为APP添加安全验证
要使用安全验证的相关api,我们需要引入如下头文件:
//typedef NS_ENUM(NSInteger, LAError)
//{
////用户验证没有通过,比如提供了错误的手指的指纹
//LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
//
////用户取消了Touch ID验证
//LAErrorUserCancel= kLAErrorUserCancel,
//
////用户不想进行Touch ID验证,想进行输入密码操作
//LAErrorUserFallback= kLAErrorUserFallback,
//
////系统终止了验证
//LAErrorSystemCancel= kLAErrorSystemCancel,
//
////用户没有在设备Settings中设定密码
//LAErrorPasscodeNotSet= kLAErrorPasscodeNotSet,
//
////设备不支持Touch ID
//LAErrorTouchIDNotAvailable= kLAErrorTouchIDNotAvailable,
//
////设备没有进行Touch ID指纹注册
//LAErrorTouchIDNotEnrolled= kLAErrorTouchIDNotEnrolled,
//} NS_ENUM_AVAILABLE(10_10, 8_0);
三.代码
//初始化上下文对象
LAContext*context = [[LAContextalloc]init];
NSError*error;
NSString*result =@"需要您的支付进行支付";
context.localizedFallbackTitle=@"快捷支付";
//首先使用canEvaluatePolicy判断设备的支付状态
if([contextcanEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricserror:&error]) {
//支持指纹的验证
[contextevaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometricslocalizedReason:resultreply:^(BOOLsuccess,NSError*_Nullableerror) {
if(success) {
//验证成功,主线程处理UI
NSLog(@"验证成功");
}else{
switch(error.code) {
caseLAErrorSystemCancel:
{
//切换到其他App,系统取消验证Touch ID
}
break;
caseLAErrorUserCancel:
{
//用户取消使用Touch ID
}
break;
caseLAErrorUserFallback:
{
//用户选择输入密码,切换主线程处理
[[NSOperationQueuemainQueue]addOperationWithBlock:^{
//回到主线程进行活动
}];
}
break;
caseLAErrorAuthenticationFailed:
{//用户验证没有通过。比如提供了错误的手指指纹
}
break;
caseLAErrorTouchIDLockout:
{
}
break;
caseLAErrorAppCancel:
{
}
break;
caseLAErrorInvalidContext:
{
}
break;
default:
{
[[NSOperationQueuemainQueue]addOperationWithBlock:^{
//其他情况需要在主线程进行处理
}];
}
break;
}
}
}];
}else{
switch(error.code) {
caseLAErrorTouchIDNotEnrolled:
{
}
break;
caseLAErrorPasscodeNotSet:
{
}
break;
default:
{
// Touch ID不可使用
}
break;
}
}
}