TouchID

TouchID


1、使用的SDK

    使用的SDK LocalAuthentication.framework

    提供给开发者的外部头文件:

 
 
  1. LAPublicDefines.h
  2. LAContext.h
  3. LAError.h

    使用时只需引入头文件:

 
 
  1. #import <LocalAuthentication/LocalAuthentication.h>

2、使用条件

    TouchID出现在iPhone5s机型上,在iOS8.0以后出现,所以使用时需要判断设备系统版本:

 
 
  1. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
  2. }

3、LAContext

  • LAPolicy 枚举

  •    
       
    1. typedef NS_ENUM(NSInteger, LAPolicy)
    2. {
    3.    /*
    4.       仅使用指纹识别(生物识别)
    5.       NS_ENUM_AVAILABLE(NA, 8_0)iOS8 可用
    6.     */
    7.    LAPolicyDeviceOwnerAuthenticationWithBiometrics
    8.    /*
    9.       指纹识别失败后使用密码
    10.       NS_ENUM_AVAILABLE(10_11, 9_0)iOS 9可用
    11.     */
    12.    LAPolicyDeviceOwnerAuthentication
    13. }


  • LAError 枚举返回

       
       
    1. LAErrorAuthenticationFailed,    // 验证信息出错,就是说你指纹不对
    2. LAErrorUserCancel               // 用户取消了验证
    3. LAErrorUserFallback             // 用户点击了手动输入密码的按钮,所以被取消了
    4. LAErrorSystemCancel             // 被系统取消,进入别的应用了,不在刚刚那个页面,所以没法验证
    5. LAErrorPasscodeNotSet           // 用户没有设置TouchID
    6. LAErrorTouchIDNotAvailable      // 用户设备不支持TouchID
    7. LAErrorTouchIDNotEnrolled       // 用户没有设置手指指纹
    8. LAErrorTouchIDLockout           // 用户错误次数太多,现在被锁住了
    9. LAErrorAppCancel                // 在验证中被其他app中断
    10. LAErrorInvalidContext           // 请求验证出错
    11. LAErrorNotInteractive
    12. // 下方使用报错
    13. LAErrorBiometryNotAvailable
    14. LAErrorBiometryNotEnrolled
    15. LAErrorBiometryLockout



  • Context实例方法:
  •    
       
    1. /*
    2. 返回BOOL值,设备是否支持指纹或密码
    3. LAPolicy:
    4.     仅生物识别:LAPolicyDeviceOwnerAuthenticationWithBiometrics
    5.     生物识别或密码识别:LAPolicyDeviceOwnerAuthentication
    6. */
    7. - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;
    8. /*
    9. LAPolicy:
    10.     仅生物识别:LAPolicyDeviceOwnerAuthenticationWithBiometrics
    11.     生物识别或密码识别:LAPolicyDeviceOwnerAuthentication
    12. localizedReason:
    13.     提示描述(识别目的)
    14. success:
    15.     识别通过
    16. error:
    17.     识别失败
    18. */
    19. - (void)evaluatePolicy:(LAPolicy)policy
    20.       localizedReason:(NSString *)localizedReason
    21.                 reply:(void(^)(BOOL success, NSError * __nullable error))reply;

    canEvaluatePolicy:error 在连续五次输入失败后返回错误代码code: -8, reason: Biometry is locked out 此时再次启动应用调用 canEvaluatePolicy:error: 返回 NO,设备不再支持生物识别和密码识别


  • error 实测

  •    
       
    1. switch (error.code) {
    2.    case LAErrorAuthenticationFailed:
    3.        /*
    4.         code: -1, reason: Application retry limit exceeded
    5.         验证次数超过上限,测试上限3次
    6.         */
    7.        NSLog(@"LAErrorAuthenticationFailed");
    8.        break;
    9.    case LAErrorUserCancel:
    10.        /*
    11.         code: -2, reason: Canceled by user
    12.         取消按钮点击  [context setLocalizedCancelTitle:@"cancle"]
    13.         */
    14.        NSLog(@"LAErrorUserCancel");
    15.        break;
    16.    case LAErrorUserFallback:
    17.        /*
    18.         code: -3, reason: Fallback authentication mechanism
    19.         fallback按钮点击 [context setLocalizedFallbackTitle:@"fallback"];
    20.         */
    21.        NSLog(@"LAErrorUserFallback");
    22.        break;
    23.    case LAErrorSystemCancel:
    24.        NSLog(@"LAErrorSystemCancel");
    25.        break;
    26.    case LAErrorPasscodeNotSet:
    27.        NSLog(@"LAErrorPasscodeNotSet");
    28.        break;
    29.    case LAErrorTouchIDNotAvailable:
    30.        NSLog(@"LAErrorTouchIDNotAvailable");
    31.        break;
    32.    case LAErrorTouchIDNotEnrolled:
    33.        NSLog(@"LAErrorTouchIDNotEnrolled");
    34.        break;
    35.    case LAErrorTouchIDLockout:
    36.        /*
    37.         code: -8, reason: Biometry is locked out
    38.         连续五次错误,指纹识别关闭
    39.         */
    40.        NSLog(@"LAErrorTouchIDLockout");
    41.        break;
    42.    case LAErrorAppCancel:
    43.        NSLog(@"LAErrorAppCancel");
    44.        break;
    45.    case LAErrorInvalidContext:
    46.        NSLog(@"LAErrorInvalidContext");
    47.        break;
    48.    case LAErrorNotInteractive:
    49.        NSLog(@"LAErrorNotInteractive");
    50.        break;
    51.    default:
    52.        break;
    53. }


  • 代码

  •    
       
    1. if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    2.    LAContext *context = [[LAContext alloc] init];
    3.    if (@available(iOS 10.0, *)) {
    4.        // 默认是 “取消”
    5.        [context setLocalizedCancelTitle:@"取消"];
    6.    }
    7.    // 再试一次时,显示的右侧按钮,默认是 “输入密码”
    8.    [context setLocalizedFallbackTitle:@"输入密码"];
    9.    
    10.    NSError *error = nil;
    11.    
    12.    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
    13.        NSLog(@"支持指纹识别");
    14.        [context evaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"请验证您的指纹以授权应用" reply:^(BOOL success, NSError * _Nullable error) {
    15.            if (success) {
    16.                NSLog(@"指纹验证通过");
    17.            } else {
    18.                NSLog(@"指纹验证失败 ---> %ld, %@", error.code, error.localizedDescription);
    19.            }
    20.        }];
    21.    } else {
    22.        /*
    23.          设备不支持TouchID的原因有两种:
    24.              1、设备本身硬件不支持(现在基本上没有该设备)
    25.              2、错误次数超过上限,需要使用密码授权
    26.         */
    27.        NSLog(@"设备不支持TouchID");
    28.    }
    29. }


  • 效果图



    编号 1:默认显示内容,“东华车管”是应用名称。

    编号 2:由方法evaluatePolicy:localizedReason:reply: 中localizedReason参数设置,不能为空字符串,或nil

    编号 3:由方法[context setLocalizedCancelTitle:@"取消"]  设置,默认显示“取消”。点击后返回 LAErrorUserCancel ,error代码为:code: -2, reason: Canceled by user 。

    编号 4:由方法[context setLocalizedFallbackTitle:@"输入密码"] 设置,默认显示“输入密码”。点击后返回 LAErrorUserFallback ,error代码为:code: -3, reason: Fallback authentication mechanism 若要不显示该编号按钮,则设置为空字符串(@“”)即可(如下如效果)。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值