您的位置:首页 > 移动开发 > IOS开发

iOS TouchID指纹验证

2015-11-05 22:38 666 查看
Touch ID不存储用户的任何指纹图像,只保存代表指纹的数字字符。iPhone 5s的A7处理器采用了新的高级安全架构,其中有一块名为Secure Enclave的区域用以专门保护密码和指纹数据。只有Secure
Enclave可以访问指纹数据,而且它还把这些数据同处理器和系统隔开,因而这些永远不会被存储在苹果的服务器上,也不会被同步到iCloud或其他地方。除了Touch ID之外,它们不会被匹配到其他指纹库中。

作为程序员, 我们大可不必关心上述的硬件原理, 苹果工程师们已经为我们封装号了API, 我们只需要调用就是了.
其实TouchID指纹验证只涉及到了下面两个方法:
1: 检测硬件是否支持, TouchID你都没有, 你还指纹验证, 验证个毛线呀~

- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));

2: 持续地进行"扫描"指纹, 直到成功, 或者三次失败而进行下一次扫描, 成功或失败, 都在这个方法的Block中进行处理: 

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

其中localizedReason是在系统弹框中的提示语:



这两个方法都在LocalAuthentication.h中定义的,
所以需要在你得App中添加指纹验证的时候, 必须要导入下面的头文件:

#import <LocalAuthentication/LocalAuthentication.h>

下面给个简单的验证栗子, 只是对验证结果的简单打印显示, 未作任何业务逻辑处理:

// 初始化上下文
LAContext *context = [[LAContext alloc] init];
NSError *error = nil;
// 认证出错时, 在系统弹框中的提示语
NSString *str = @"请继续扫描你得指纹";
// 检测设备是否有TouchID
if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { // 设备有TouchID
// 认证成功或失败之前, 会持续进行认证操作
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:str reply:^(BOOL success, NSError *error) {
if (success) { // TouchID存在, 并认证成功
NSLog(@"认证成功");
if (!success) {
NSLog(@"%@", error);
}
} else { // TouchID存在, 但认证失败
NSLog(@"认证失败");
if (!success) {
NSLog(@"%@", error);
}
}
}];
} else { // 设备没有TouchID
NSLog(@"发生了一个错误");
if (error) {
NSLog(@"%@", error);
}
}

源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS TouchID 指纹识别