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

 更新时间:2018年04月20日 16:05:17   作者:软件iOS开发  
这篇文章主要为大家详细介绍了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 Xcode8更新后输出log日志关闭的方法

    iOS Xcode8更新后输出log日志关闭的方法

    今天刚把xcode更新到了xcode8,运行发现好多log输出,怎么关闭呢,不是很清楚,通过查阅相关资料顺利关掉这些log日志,下面小编把方法共享下,需要的朋友参考下
    2016-09-09
  • iOS UIAlertView自动关闭功能

    iOS UIAlertView自动关闭功能

    这篇文章主要介绍了iOS UIAlertView自动关闭,需要的朋友可以参考下
    2017-06-06
  • iOS开发教程之Status Bar状态栏设置的方法汇总

    iOS开发教程之Status Bar状态栏设置的方法汇总

    iOS 的 Status Bar 状态栏是一个比较坑的地方,所以下面这篇文章主要给大家介绍了关于iOS开发教程之Status Bar状态栏设置的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-08-08
  • IOS实战之自定义转场动画详解

    IOS实战之自定义转场动画详解

    这篇文章主要介绍了IOS实战之自定义转场动画,CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • searchDisplayController 引起的数组越界处理办法

    searchDisplayController 引起的数组越界处理办法

    这篇文章主要介绍了searchDisplayController 引起的数组越界处理办法,需要的朋友可以参考下
    2015-07-07
  • iOS实现点击微信头像(放大、缩放、保存)效果

    iOS实现点击微信头像(放大、缩放、保存)效果

    最近公司产品需要实现点击个人主页头像可以放大头像、缩放头像、保存头像效果(和点击微信个人头像类似),故找个时间实现一下,记录下来,供自己查看也给有需要的大家做个参考。下面来一起看看吧。
    2017-03-03
  • IOS 聊天界面(自适应文字)的实现

    IOS 聊天界面(自适应文字)的实现

    本文主要介绍一个实现聊天界面的思路过程,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • iOS 请求权限封装类的实例代码

    iOS 请求权限封装类的实例代码

    下面小编就为大家分享一篇iOS 请求权限封装类的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • iOS WKWebView无法处理URL Scheme和App Store链接的问题解决

    iOS WKWebView无法处理URL Scheme和App Store链接的问题解决

    这篇文章主要给大家介绍了关于iOS WKWebView无法处理URL Scheme和App Store链接的问题解决的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • iOS中关于模块化开发解决方案(纯干货)

    iOS中关于模块化开发解决方案(纯干货)

    这篇文章主要介绍了iOS中关于模块化开发解决方案(纯干货)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09

最新评论