Touch ID 简易教程


基础知识

支持系统和机型

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

依赖框架

LocalAuthentication.framework
#import <LocalAuthentication/LocalAuthentication.h>

注意事项

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

if(iOS8){xxx} // 系统版本验证

if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError])

使用类

LAContext指纹验证操作对象

操作流程

•       判断系统版本,iOS 8及以上版本执行-(void)authenticateUser方法,

•       方法自动判断设备是否支持和开启Touch ID

代码示例


<p class="p1"><span class="s1">#define <span style="font-family: Arial, Helvetica, sans-serif;">iOS8later     </span>([UIDevice currentDevice].systemVersion.doubleValue >= </span><span class="s2">8.0</span><span class="s1">)</span></p>

- (IBAction)showTouchIDAlert:(id)sender {
    // 1.判断是否是iOS8之后
    if (!iOS8later) {
        NSLog(@"版本不对不能使用TouchID");
        return;
    }

    // 2.调用touchID的相关方法
    [self authenticateUser];
}

// 鉴定用户
- (void)authenticateUser
{
    // 创建指纹验证对象
    LAContext *context = [[LAContext alloc] init];
    NSError *yfError = nil;

    // 验证设备是否支持touchID
    // LAPolicyDeviceOwnerAuthenticationWithBiometrics 14年时候枚举只有这一个属性
    // LAPolicyDeviceOwnerAuthentication 后来加的枚举属性
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&yfError]) {
        // 支持touchID
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                localizedReason:@"支付宝指纹验证"
                          reply:^(BOOL success, NSError * _Nullable error) {
                              if (success) {
                                  // touchID验证成功

                                  // 继续处理相关业务(注意线程)
                              }else
                              {
                                  NSLog(@"%@",error.localizedDescription);
                                  switch (error.code) {
                                      case LAErrorSystemCancel:
                                      {
                                          NSLog(@"Authentication was cancelled by the system");
                                          //切换到其他APP,系统取消验证Touch ID
                                          break;
                                      }
                                      case LAErrorUserCancel:
                                      {
                                          NSLog(@"Authentication was cancelled by the user");
                                          //用户取消验证Touch ID
                                          break;
                                      }
                                      case LAErrorUserFallback:
                                      {
                                          NSLog(@"User selected to enter custom password");
                                          [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                              //用户选择输入密码,切换主线程处理
                                          }];
                                          break;
                                      }
                                      default:
                                      {
                                          [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                                              //其他情况,切换主线程处理
                                          }];
                                          break;
                                      }
                                  }
                              }
                }];

    }else
    {
        switch (yfError.code) {
            case LAErrorTouchIDNotEnrolled:
                NSLog(@"LAErrorTouchIDNotEnrolled");
                break;


            case LAErrorPasscodeNotSet:
                NSLog(@"LAErrorPasscodeNotSet"); // 此处触发showPasscodeResetAlert方法
                break;

            default:
                NSLog(@"Touch ID is unaviliable");
                break;
        }
        NSLog(@"%@", yfError.localizedDescription);
    }
}

/*
 typedef NS_ENUM(NSInteger, LAError)
 {
 //授权失败
 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

 //用户取消Touch ID授权
 LAErrorUserCancel           = kLAErrorUserCancel,

 //用户选择输入密码
 LAErrorUserFallback         = kLAErrorUserFallback,

 //系统取消授权(例如其他APP切入)
 LAErrorSystemCancel         = kLAErrorSystemCancel,

 //系统未设置密码
 LAErrorPasscodeNotSet       = kLAErrorPasscodeNotSet,

 //设备Touch ID不可用,例如未打开
 LAErrorTouchIDNotAvailable  = kLAErrorTouchIDNotAvailable,

 //设备Touch ID不可用,用户未录入
 LAErrorTouchIDNotEnrolled   = kLAErrorTouchIDNotEnrolled,
 } NS_ENUM_AVAILABLE(10_10, 8_0);

 */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值