服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS指纹登录(TouchID)集成方案详解

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

2021-04-23 18:07软件iOS开发 IOS

这篇文章主要为大家详细介绍了iOS指纹登录TouchID的集成方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

touchid api使用

1.添加头文件

#import

2.判断系统版本

?
1
2
3
4
5
//首先判断版本
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。

?
1
if ([context canevaluatepolicy:lapolicydeviceownerauthenticationwithbiometrics error:&error]) {

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

5. evaluatedpolicydomainstate

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

6. evaluatepolicy

evaluatepolicy方法是对touchid进行验证,block回调中如果success为yes则验证成功,为no验证失败,并对error进行解析.

?
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
- (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的核心,也几乎是所有代码了.

验证

验证必须使用真机

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

结果

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

输入错误的时候

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

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

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

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

原文链接:https://blog.csdn.net/qq_40201300/article/details/80000495

延伸 · 阅读

精彩推荐
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01