前段时间项目中使用了Touch ID解锁登陆,顺便就整理了一下。Touch ID 只支持iOS8、iPhone 5s以上的系统和设备,使用时需要引入 LocalAuthentication.framework,首先我们可以看一下这个库里面有什么东西:

比较简单,主要使用的就是LAContext这个类中的API。

要想使用Touch ID,第一步我们需要系统询问,看看当前的设备能不能使用。

1
2
3
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError *error))reply;

这个函数就是询问系统当前的设备能不能使用Touch ID,能使用 return YES,反之return NO;我在使用Touch Id的时候,我创建了一个工具类LBTouchId,里面包含了判断Touch Id是否可用的类方法+ (BOOL)checkTouchIDUsable和验证指纹是否正确的类方法

1
2
+ (void)verifyTouchIdWithLocalizedFallbackTitle:(NSString *)fallbackTitle
callBack:(void (^)(BOOL result, NSError *error))block

判断是否可用的实现方式如下

1
2
3
4
5
6
7
8
9
10
+ (BOOL)checkTouchIDUsable
{
if (!(CurrentIOS8)) {
return NO;
}
LAContext *context = [[LAContext alloc] init];
NSError *error;
BOOL usable = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
return usable;
}

当系统返回YES的时候,我们就需要验证指纹的正确性了,接下来就看一下实现的方式:

1
2
3
4
5
6
7
8
9
10
11
12
+ (void)verifyTouchIdWithLocalizedFallbackTitle:(NSString *)fallbackTitle
callBack:(void (^)(BOOL result, NSError *error))block
{
LAContext *context = [[LAContext alloc] init];
context.localizedFallbackTitle = fallbackTitle;
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请验证已有指纹"
reply:^(BOOL success, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
block(success,error);
});
}];
}

接下来我们运行,可以看到如下界面:

其中localizedReason可以是开发者自己指定的,如果验证失败,会出现下图:

其中localizedFallbackTitle也是开发者自己指定的,如果为空字符串,就不会显示这个按钮,只显示一个”取消”按钮,当用户点击对应的按钮,都是有回调的,可以根据具体情况做处理。

        好了,Touch ID的基本使用就全部结束了,比较简单,本文的Demo