iOS指纹登录(TouchID)集成方案详解

TouchID指纹识别是iPhone 5S设备中增加的一项重大功能.苹果的后续移动设备也相继添加了指纹功能,在实际使用中还是相当方便的,比如快捷登录,快捷支付等等.系统提供了相应框架,使用起来还是比较方便的.使用LAContext对象即可完成指纹识别,提高用户体验.

提示:指纹识别必须用真机测试,并且在iOS8以上系统.

TouchID API使用

1.添加头文件

#import

2.判断系统版本

 //首先判断版本
if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
  NSLog(@"系统版本不支持TouchID");
  return;
}

3.LAPolicy

在这里简单介绍一下LAPolicy,它是一个枚举.我们根据自己的需要选择LAPolicy,它提供两个值:

LAPolicyDeviceOwnerAuthenticationWithBiometrics和LAPolicyDeviceOwnerAuthentication.

<1>. LAPolicyDeviceOwnerAuthenticationWithBiometrics是支持iOS8以上系统,使用该设备的TouchID进行验证,当输入TouchID验证5次失败后,TouchID被锁定,只能通过锁屏后解锁设备时输入正确的解锁密码来解锁TouchID。

<2>.LAPolicyDeviceOwnerAuthentication是支持iOS9以上系统,使用该设备的TouchID或设备密码进行验证,当输入TouchID验证5次失败后,TouchID被锁定,会触发设备密码页面进行验证。

4. canEvaluatePolicy

使用canEvaluatePolicy方法判断设备是否支持TouchID,返回BOOL为YES,该设备支持TouchID。

 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

error为返回验证错误码.具体不解释了.

5. evaluatedPolicyDomainState

context.evaluatedPolicyDomainState用于判断设备上的指纹是否被更改,在LAContext被创建的时候,evaluatedPolicyDomainState才生效,可在TouchID验证成功时,将它记录下来,用于下次使用TouchID时校验,提高安全性。

6. evaluatePolicy

evaluatePolicy方法是对TouchID进行验证,Block回调中如果success为YES则验证成功,为NO验证失败,并对error进行解析.

- (IBAction)loginButtonClick:(UIButton *)sender {

 //首先判断版本
 if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_8_0) {
  NSLog(@"系统版本不支持TouchID");
  return;
 }

 LAContext *context = [[LAContext alloc] init];
 context.localizedFallbackTitle = @"输入密码";
 if (@available(iOS 10.0, *)) {
//  context.localizedCancelTitle = @"22222";
 } else {
  // Fallback on earlier versions
 }
 NSError *error = nil;

 if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {

  [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"通过Home键验证已有手机指纹" reply:^(BOOL success, NSError * _Nullable error) {

   if (success) {
    dispatch_async(dispatch_get_main_queue(), ^{
     NSLog(@"TouchID 验证成功");
    });
   }else if(error){

    switch (error.code) {
     case LAErrorAuthenticationFailed:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID 验证失败");
      });
      break;
     }
     case LAErrorUserCancel:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID 被用户手动取消");
      });
     }
      break;
     case LAErrorUserFallback:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"用户不使用TouchID,选择手动输入密码");
      });
     }
      break;
     case LAErrorSystemCancel:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID 被系统取消 (如遇到来电,锁屏,按了Home键等)");
      });
     }
      break;
     case LAErrorPasscodeNotSet:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID 无法启动,因为用户没有设置密码");
      });
     }
      break;
     case LAErrorTouchIDNotEnrolled:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID 无法启动,因为用户没有设置TouchID");
      });
     }
      break;
     case LAErrorTouchIDNotAvailable:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID 无效");
      });
     }
      break;
     case LAErrorTouchIDLockout:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"TouchID 被锁定(连续多次验证TouchID失败,系统需要用户手动输入密码)");
      });
     }
      break;
     case LAErrorAppCancel:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"当前软件被挂起并取消了授权 (如App进入了后台等)");
      });
     }
      break;
     case LAErrorInvalidContext:{
      dispatch_async(dispatch_get_main_queue(), ^{
       NSLog(@"当前软件被挂起并取消了授权 (LAContext对象无效)");
      });
     }
      break;
     default:
      break;
    }
   }
  }];

 }else{
  NSLog(@"当前设备不支持TouchID");
 }
}

上面这个代码, 是整个TouchID的核心,也几乎是所有代码了.

验证

验证必须使用真机

结果

输入错误的时候

总结:TouchID使用起来不难,重要的是使用流程逻辑.

以登录为例,一般来说流程是这样的:

  • 开启指纹登录:首次登陆使用密码登录,登录后,可以设置一个开启指纹ID登录的按钮,来进行指纹认证.
  • 验证:检测是否支持TouchID.
  • 生成设备账号/密码:TouchID验证通过后,根据当前已登录的账号和硬件设备Token,生成设备账号/密码(规则可自定,密码要长要复杂),并保存在keychain;
  • 绑定:生成设备账号/密码后,将原账号及设备账号/密码,加密后(题主使用的是RSA加密)发送到服务端进行绑定;
  • 成功:验证原账号及设备账号有效后,返回相应状态,绑定成功则完成整个TouchID(设备)绑定流程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • iOS 指纹解锁验证TouchID功能
  • 简单实现iOS指纹解锁(TouchID)
  • iOS指纹验证TouchID应用学习教程2
  • iOS指纹验证TouchID应用学习教程
  • 浅析IOS开发TouchID指纹解锁功能
  • IOS 指纹识别详解及实例代码
  • iOS中指纹识别常见问题汇总
  • 使用Swift代码实现iOS手势解锁、指纹解锁实例详解
  • iOS中应用内添加指纹识别的实例代码
  • IOS 指纹识别两种方式详解及实例
(0)

相关推荐

  • iOS指纹验证TouchID应用学习教程

    指纹验证这个功能现在在一些app中经常常见,常常与数字解锁,手势解锁联合起来使用.前几天接到说实现一个指纹验证的功能,捣鼓了挺久,然后今天,我就简单的介绍下指纹验证,会做个简单的demo实现一下基本的功能.     支持系统和机型:iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8.实现起来呢,其实还是很简单的,下面我们就用纯代码方式实现一个简单的demo1. 第一部分:调用原生服务实现指纹验证 这部分了解个大概就可以了 第一步:添加LocalAuthentic

  • iOS中应用内添加指纹识别的实例代码

    iOS8之后苹果发布了指纹识别的功能,通过touch ID来识别用户,做用户授权,主要是依赖于LocalAuthentication库 指纹识别:一判断设备是否支持指纹识别功能 二识别指纹,成功后做相应的动作,失败后提醒用户指纹识别失败 先引入#import <LocalAuthentication/LocalAuthentication.h> LAContext *context = [[LAContext alloc] init]; NSError *error = nil; //验证是否

  • IOS 指纹识别详解及实例代码

    IOS 指纹识别,这里整理下项目中用的知识. IOS 指纹识别现在,在要求安全与效率兼得的时候,普通密码已不能满足我们的要求,指纹识别就这样诞生了. 每个人都有自己专属的指纹,在需要支付等输入密码的地方,我们只需轻轻一按即可,避免了输入密码的繁琐步骤,更加安全,而且妈妈再也不用担心我们忘记密码. 其实,听着高大上,实现起来特别简单,因为苹果已经帮我们封装好了,我们只需要简单的调用就好了. 1.首先,我们需要导入头文件: #import <LocalAuthentication/LocalAuth

  • 简单实现iOS指纹解锁(TouchID)

    本文实例为大家分享了iOS指纹解锁的具体代码,供大家参考,具体内容如下 1.首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h> 2.然后,判断系统是否为iOS8及以上 //iOS8.0后才支持指纹识别接口 if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) { return; } 3.最后

  • iOS 指纹解锁验证TouchID功能

    1.首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h> 2.然后,判断系统是否为iOS8及以上 //iOS8.0后才支持指纹识别接口 if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) { return; } 3.最后,在APP启动时调用以下方法即可完成指纹解锁的全部功能集成 - (voi

  • iOS指纹验证TouchID应用学习教程2

    上一篇文章简单的写了对于touchid的简单了解.因为太懒了,就没有写实例,现在就单独写一篇应用吧,这篇想做的就是一个模仿那个叫啥软件来着,某某理财类类的软件的一个指纹验证解锁.我们做出来的页面应该如下图,在app挂起到后台的时候再点击到前台的时候回出现如下页面: app唤醒的时候出现的画面 点击取消按钮出现的页面 这里我先挂上github的链接地址,毕竟本文的篇幅较长,也没什么人有耐心有时间看到最后,顶多看下demo,快速的知道怎么调用啥的就可以了.(popViewForTouchID) 因为

  • 使用Swift代码实现iOS手势解锁、指纹解锁实例详解

    一.手势密码 1. 1.1.用UIButton组成手势的节点. 1.2.当手指接触屏幕时,调用重写的 touchesBegan:withEvent方法(在touchesBegan里调用setNeedsDisplay,这样就会自动调用drawRect方法). 1.3.当手指在屏幕上滑动时,调用重写的touchesEnded:withEvent方法. 这两个方法执行的操作是一样的:通过locationInView获取 触摸的坐标,然后用 CGRectContainsPoint 判断手指是否经过UIB

  • 浅析IOS开发TouchID指纹解锁功能

    效果图如下 实现过程 1.首先引入指纹解锁必须的头文件 #import <LocalAuthentication/LocalAuthentication.h> 2.了解下主要的两个方法 这个方法是判断设备是否支持TouchID的. - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none))); 这个是用来验证TouchI

  • iOS中指纹识别常见问题汇总

    最近公司的 app 要使用指纹支付了;总体来说还是蛮顺利的;但是中间有遇到一些坑;下面就对坑进行汇总; 一.基本知识 点开这个LocalAuthentication.framework,发现里面主要有这么几个东西 LocalAuthentication.framework - LAContext.h - LAError.h - LAPublicDefines.h - LocalAuthentication.h LocalAuthentication.h 这个没什么可讲的吧,代码就两行,一行导入L

  • IOS 指纹识别两种方式详解及实例

    IOS 指纹识别两种方式详解及实例 首先引入类名: #import <LocalAuthentication/LocalAuthentication.h> 然后在实现指纹识别的地方放入如下代码: 方式一: LAContext *lacontext = [[LAContext alloc]init]; // 判断设备是否支持指纹识别 BOOL isSupport = [lacontext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWit

随机推荐