TouchID 指纹识别

前言

  • Objective-C

    1
    NS_CLASS_AVAILABLE(10_10, 8_0) @interface LAContext : NSObject
  • 指纹识别功能是 iPhone 5s 推出的,SDK 是 iOS 8.0 推出。

  • 推出指纹识别的主要原因是为了简化支付,移动支付的环节约简单越好。

  • 1)指纹验证方式:

    • Objective-C

      1
      2
      3
      4
      5
      // 只使用指纹验证
      LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics,

      // 使用指纹和设备密码验证,指纹错误或无法验证时会自动跳转到输入密码验证界面
      LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication
  • 2)指纹验证错误信息:

    • Objective-C

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      // 指纹无法识别                        error.code == -1
      LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

      // 用户点击了 "取消" 按钮 error.code == -2
      LAErrorUserCancel = kLAErrorUserCancel,

      // 用户取消,点击了 "输入密码" 按钮 error.code == -3
      LAErrorUserFallback = kLAErrorUserFallback,

      // 系统取消,例如激活了其他应用程序 error.code == -4
      LAErrorSystemCancel = kLAErrorSystemCancel,

      // 验证无法启动,因为设备上没有设置密码 error.code == -5
      LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,

      // 验证无法启动,因为设备上没有 Touch ID error.code == -6
      LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable,

      // 验证无法启动,因为没有输入指纹 error.code == -7
      LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled,

      LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorTouchIDLockout,
      LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel,
      LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext

1、指纹识别的使用

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    // 包含本地身份验证头文件
    #import <LocalAuthentication/LocalAuthentication.h>

    // 判断用户手机系统是否是 iOS 8.0 以上版本
    if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {
    return;
    }

    // 实例化本地身份验证上下文
    LAContext *context= [[LAContext alloc] init];

    // 判断是否支持指纹识别
    if (![context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:NULL]) {
    return;
    }

    [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication
    localizedReason:@"请验证已有指纹"
    reply:^(BOOL success, NSError * _Nullable error) {

    // 输入指纹开始验证,异步执行
    if (success) {

    [self refreshUI:[NSString stringWithFormat:@"指纹验证成功"] message:nil];

    } else {

    [self refreshUI:[NSString stringWithFormat:@"指纹验证失败"] message:error.userInfo[NSLocalizedDescriptionKey]];
    }
    }];

    // 主线程刷新 UI
    - (void)refreshUI:(NSString *)str message:(NSString *)msg {

    dispatch_async(dispatch_get_main_queue(), ^{

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:str
    message:msg
    preferredStyle:UIAlertControllerStyleAlert];

    [self presentViewController:alert animated:YES completion:^{

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [alert dismissViewControllerAnimated:YES completion:nil];
    });
    }];
    });
    }
  • 效果

2、指纹识别的设置

  • Objective-C

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 判断是否支持指纹识别
    if (![context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:NULL]) {

    }

    // 取消指纹验证
    [context invalidate];

    // 设置 输入密码 按钮的标题
    context.localizedFallbackTitle = @"输入密码按钮标题";

    // 设置 取消 按钮的标题
    context.localizedCancelTitle = @"取消按钮标题";
文章目录
  1. 1. 前言
  2. 2. 1、指纹识别的使用
  3. 3. 2、指纹识别的设置
隐藏目录