iOS 使用Touch ID 校验[新增 iOS9 三种错误]

iOS8后苹果开放了Touch ID的API给开发者,这也给我们的app带来了新的体验。开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证或支付购买。本文主要介绍如何在应用中集成Touch ID来校验用户的身份和注意事项。

支持系统和机型

iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。

依赖框架

在使用前我们需要导入 LocalAuthentication.framework 这个库

iOS 使用Touch ID 校验[新增 iOS9 三种错误]

这个库必须要Xcode6并且连接的是真机,才不会提示找不到的错误。 如果是模拟器会提示找不到这个库。

注意事项

做iOS 8以下版本适配时,务必进行API验证,避免调用相关API引起崩溃。

使用类

LAContext 指纹验证操作对象

代码

- (void)authenticateButtonTapped{ LAContext *context = [[LAContext alloc] init]; context.localizedFallbackTitle = @"输入密码"; NSError *error = nil; if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"您是这设备的所有者吗?" reply:^(BOOL success, NSError *error) { if (success) { dispatch_async (dispatch_get_main_queue(), ^{ //在主线程更新 UI,不然会卡主 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"你是设备主人。" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }); }else{ /* // 用户未提供有效证书,(3次机会失败 --身份验证失败)。 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, // 认证被取消,(用户点击取消按钮)。 LAErrorUserCancel = kLAErrorUserCancel, // 认证被取消,用户点击回退按钮(输入密码)。 LAErrorUserFallback = kLAErrorUserFallback, // 身份验证被系统取消,(比如另一个应用程序去前台,切换到其他 APP)。 LAErrorSystemCancel = kLAErrorSystemCancel, // 身份验证无法启动,因为密码在设备上没有设置。 LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet, // 身份验证无法启动,因为触摸ID在设备上不可用。 LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable, // 身份验证无法启动,因为没有登记的手指触摸ID。 没有设置指纹密码时。 LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled, **/ switch (error.code) { case LAErrorAuthenticationFailed: NSLog(@"身份验证失败。"); break; case LAErrorUserCancel: NSLog(@"用户点击取消按钮。"); break; case LAErrorUserFallback: { NSLog(@"用户点击输入密码。"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //用户选择输入密码,切换主线程处理 }]; break; } case LAErrorSystemCancel: NSLog(@"另一个应用程序去前台"); break; case LAErrorPasscodeNotSet: NSLog(@"密码在设备上没有设置"); break; case LAErrorTouchIDNotAvailable: NSLog(@"触摸ID在设备上不可用"); break; case LAErrorTouchIDNotEnrolled: NSLog(@"没有登记的手指触摸ID。"); break; default: { NSLog(@"Touch ID没配置"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //其他情况,切换主线程处理 }]; break; } } } }]; } else { dispatch_async (dispatch_get_main_queue(), ^{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"错误提示" message:@"您的设备没有触摸ID." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggxgp.html