iOS8中使用TouchID校验

版权所有,禁止匿名转载;禁止商业使用。

在iOS8中,开发者们可使用向第三方应用开放了Touch ID权限的API,以便他们在应用中使用指纹认证来完成用户认证部分。


本文主要介绍如何在应用中集成 Touch ID 来校验用户的身份。

#import <LocalAuthentication/LocalAuthentication.h>

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


- (IBAction)authenticateButtonTapped:(id)sender {
     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(), ^{
                                       
                                       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Success"
                                                                                       message:@"你是设备主人。"
                                                                                      delegate:nil
                                                                             cancelButtonTitle:@"Ok"
                                                                             otherButtonTitles:nil];
                                       [alert show];
                                   });
                                   
                               }else{
                                   
                              
                               /*
                                // 用户未提供有效证书,(3次机会失败 --身份验证失败)。
                                LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,
                                
                                // 认证被取消,(用户点击取消按钮)。
                                LAErrorUserCancel           = kLAErrorUserCancel,
                                
                                // 认证被取消,用户点击回退按钮(输入密码)。
                                LAErrorUserFallback         = kLAErrorUserFallback,
                                
                                // 身份验证被系统取消,(比如另一个应用程序去前台)。
                                LAErrorSystemCancel         = kLAErrorSystemCancel,
                                
                                // 身份验证无法启动,因为密码在设备上没有设置。
                                LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,
                                
                                // 身份验证无法启动,因为触摸ID在设备上不可用。
                                LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,
                                
                                // 身份验证无法启动,因为没有登记的手指触摸ID。 没有设置指纹密码时。
                                LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
                                **/
                               switch (error.code) {
                                   case LAErrorAuthenticationFailed:
                                       NSLog(@"身份验证失败。");
                                    
                                       break;
                                       
                                   case LAErrorUserCancel:
                                       NSLog(@"用户点击取消按钮。");
                                    
                                       break;
                                       
                                   case LAErrorUserFallback:
                                       NSLog(@"用户点击输入密码。");
                                    
                                       break;
                                       
                                   case LAErrorSystemCancel:
                                       NSLog(@"另一个应用程序去前台");
                                   
                                       break;
                                       
                                   case LAErrorPasscodeNotSet:
                                       NSLog(@"密码在设备上没有设置");
                                     
                                       break;
                                       
                                   case LAErrorTouchIDNotAvailable:
                                       NSLog(@"触摸ID在设备上不可用");
                                   
                                       break;
                                       
                                   case LAErrorTouchIDNotEnrolled:
                                       NSLog(@"没有登记的手指触摸ID。");
                                 
                                       break;
                                       
                                   default:
                                       NSLog(@"Touch ID没配置");
                                  
                                       break;
                               }
                             }
                         }];
         
     } else {
         dispatch_async (dispatch_get_main_queue(), ^{
             
             UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"错误提示"
                                                             message:@"您的设备没有触摸ID."
                                                            delegate:nil
                                                   cancelButtonTitle:@"Ok"
                                                   otherButtonTitles:nil];
             [alert show];
         });
     }
   
 }

其中:


(1)localizedFallbackTitle:用于设置左边的按钮的名称,默认是 输入密码。


(2)localizedReason:用于设置提示语,表示为什么要使用Touch ID,如代码中 @"您是这设备的所有者吗?" 。


官方的API就是简单,简简单单几句话 就可以。


0 0