iOS指纹登录(TouchID)集成方案详解
2019/7/9 22:41:43
本文主要是介绍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)集成方案详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-08-29Axios库资料:新手入门指南与基本使用教程
- 2024-03-14system bios shadowed
- 2024-03-14gabios
- 2024-02-07iOS应用提交上架的最新流程
- 2024-02-06打包 iOS 的 IPA 文件
- 2023-12-07uniapp打包iOS应用并通过审核:代码混淆的终极解决方案 ?
- 2023-11-25uniapp IOS从打包到上架流程(详细简单) 原创
- 2023-11-10【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固
- 2023-09-30最强大的iOS应用源码保护工具:Ipa Guard,保护你的商业机密代码
- 2023-09-07iOS安全加固探讨:代码混淆、类名方法名混淆等方法