IOS8 SDK 向开发者公开了
Touch ID
的API
。对于我们的产品和IOS开发,我们就有了一个新的吸引用户的眼球的方法。如果,我们app内有个指纹验证,是不是让用户眼球一亮呢?好了,下面直接上代码:
使用Touch Id 需要引入LocalAuthentication框架
#import <LocalAuthentication/LocalAuthentication.h>
然后我直接在控制器加了个按钮 ,给它建了Touch Up Inside事件,先检查TouchID 是否可用,然后执行认证策略
- (IBAction)onclickButton:(id)sender {
//新建LAContext实例
LAContext *authenticationContext= [[LAContext alloc]init];
NSError *error;
//1:检查Touch ID 是否可用
if ([authenticationContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
NSLog(@"touchId 可用");
//2:执行认证策略
[authenticationContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"需要验证您的指纹来确认您的身份信息" reply:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"通过了Touch Id指纹验证");
}else{
NSLog(@"error===%@",error);
NSLog(@"code====%d",error.code);
NSLog(@"errorStr ======%@",[error.userInfo objectForKey:NSLocalizedDescriptionKey]);
if (error.code == -2) {//点击了取消按钮
NSLog(@"点击了取消按钮");
}else if (error.code == -3){//点输入密码按钮
NSLog(@"点输入密码按钮");
}else if (error.code == -1){//连续三次指纹识别错误
NSLog(@"连续三次指纹识别错误");
}else if (error.code == -4){//按下电源键
NSLog(@"按下电源键");
}else if (error.code == -8){//Touch ID功能被锁定,下一次需要输入系统密码
NSLog(@"Touch ID功能被锁定,下一次需要输入系统密码");
}
NSLog(@"未通过Touch Id指纹验证");
}
}];
}else{
//todo goto 输入密码页面
NSLog(@"error====%@",error);
NSLog(@"抱歉,touchId 不可用");
}
}
运行效果:
我们只需要对于error来做不同业务处理。
验证Touch ID 是否可用,error的不同情况
例如,在iphone5上运行结果:
Error Domain=com.apple.LocalAuthentication Code=-6 "Biometry is not available on this device." UserInfo=0x15ec5a00 {NSLocalizedDescription=Biometry is not available on this device.
例如,在模拟器上运行结果:
Error Domain=com.apple.LocalAuthentication Code=-1000 "Simulator is not supported." UserInfo=0x7ffe604b0790 {NSLocalizedDescription=Simulator is not supported.
例如,在有TouchID 的功能下,没有设置TouchID的运行结果:
Error Domain=com.apple.LocalAuthentication Code=-7 "No fingers are enrolled with Touch ID." UserInfo=0x170075fc0 {NSLocalizedDescription=No fingers are enrolled with Touch ID.
认证策略,error的不同情况
例如:连续三次指纹识别错误:
Error Domain=com.apple.LocalAuthentication Code=-1 "Aplication retry limit exceeded." UserInfo=0x1740797c0 {NSLocalizedDescription=Aplication retry limit exceeded.}
例如:用户在Touch ID对话框中点击了取消按钮:
Error Domain=com.apple.LocalAuthentication Code=-2 "Canceled by user." UserInfo=0x17006c780 {NSLocalizedDescription=Canceled by user.
例如:用户在Touch ID对话框中点击输入密码按钮:
Error Domain=com.apple.LocalAuthentication Code=-3 "Fallback authentication mechanism selected." UserInfo=0x17407e040 {NSLocalizedDescription=Fallback authentication mechanism selected.
例如:按下电源键:
Error Domain=com.apple.LocalAuthentication Code=-4 "UI canceled by system." UserInfo=0x170065900 {NSLocalizedDescription=UI canceled by system.}
例如:Touch ID功能被锁定,下一次需要输入系统密码时的运行结果:
Error Domain=com.apple.LocalAuthentication Code=-8 "Biometry is locked out." UserInfo={NSLocalizedDescription=Biometry is locked out.
被锁定之后,再次点击这个按钮,会出现如下的页面:
对于error,我现在只找到这几种情况,如有更多,请告知。demo地址,请猛戳这里。