iOS---Touch ID于密码的简易开发教程

支持系统和机型:

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

依赖框架:

[objc]  view plain  copy
 
  1. LocalAuthentication.framework  
  2.   
  3. #import <LocalAuthentication/LocalAuthentication.h>  

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

使用类:LAContext 指纹验证操作对象

代码:

[objc]  view plain  copy
 
  1. - (void)authenticateUser  
  2. {  
  3.     //初始化上下文对象  
  4.     LAContext* context = [[LAContext alloc] init];  
  5.     //错误对象  
  6.     NSError* error = nil;  
  7.     NSString* result = @"Authentication is needed to access your notes.";  
  8.   
  9.     //首先使用canEvaluatePolicy 判断设备支持状态  
  10.     if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {  
  11.         //支持指纹验证  
  12.         [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:result reply:^(BOOL success, NSError *error) {  
  13.             if (success) {  
  14.                 //验证成功,主线程处理UI  
  15.             }  
  16.             else  
  17.             {  
  18.                 NSLog(@"%@",error.localizedDescription);  
  19.                 switch (error.code) {  
  20.                     case LAErrorSystemCancel:  
  21.                     {  
  22.                         NSLog(@"Authentication was cancelled by the system");  
  23.                         //切换到其他APP,系统取消验证Touch ID  
  24.                         break;  
  25.                     }  
  26.                     case LAErrorUserCancel:  
  27.                     {  
  28.                         NSLog(@"Authentication was cancelled by the user");  
  29.                         //用户取消验证Touch ID  
  30.                         break;  
  31.                     }  
  32.                     case LAErrorUserFallback:  
  33.                     {  
  34.                         NSLog(@"User selected to enter custom password");  
  35.                         [[NSOperationQueue mainQueue] addOperationWithBlock:^{  
  36.                             //用户选择输入密码,切换主线程处理  
  37.                         }];  
  38.                         break;  
  39.                     }  
  40.                     default:  
  41.                     {  
  42.                         [[NSOperationQueue mainQueue] addOperationWithBlock:^{  
  43.                            //其他情况,切换主线程处理   
  44.                         }];  
  45.                         break;  
  46.                     }  
  47.                 }  
  48.             }  
  49.         }];  
  50.     }  
  51.     else  
  52.     {  
  53.         //不支持指纹识别,LOG出错误详情  
  54.   
  55.         switch (error.code) {  
  56.             case LAErrorTouchIDNotEnrolled:  
  57.             {  
  58.                 NSLog(@"TouchID is not enrolled");  
  59.                 break;  
  60.             }  
  61.             case LAErrorPasscodeNotSet:  
  62.             {  
  63.                 NSLog(@"A passcode has not been set");  
  64.                 break;  
  65.             }  
  66.             default:  
  67.             {  
  68.                 NSLog(@"TouchID not available");  
  69.                 break;  
  70.             }  
  71.         }  
  72.   
  73.         NSLog(@"%@",error.localizedDescription);  
  74.         [self showPasswordAlert];  
  75.     }  
  76. }  

[objc]  view plain  copy
 
  1. typedef NS_ENUM(NSInteger, LAError)  
  2. {  
  3.     //授权失败  
  4.     LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,  
  5.   
  6.     //用户取消Touch ID授权  
  7.     LAErrorUserCancel           = kLAErrorUserCancel,  
  8.   
  9.     //用户选择输入密码  
  10.     LAErrorUserFallback         = kLAErrorUserFallback,  
  11.   
  12.     //系统取消授权(例如其他APP切入)  
  13.     LAErrorSystemCancel         = kLAErrorSystemCancel,  
  14.   
  15.     //系统未设置密码  
  16.     LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,  
  17.   
  18.     //设备Touch ID不可用,例如未打开  
  19.     LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,  
  20.   
  21.     //设备Touch ID不可用,用户未录入  
  22.     LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,  
  23. } NS_ENUM_AVAILABLE(10_108_0);  

操作流程:首先判断系统版本,iOS 8及以上版本执行-(void)authenticateUser方法,方法自动判断设备是否支持和开启Touch ID

转载自:http://blog.csdn.net/haogaoming123/article/details/44194819

你可能感兴趣的:(api,swift,密码,ios开发,指纹识别)