ios TouchId

移动开发 waitig 478℃ 百度已收录 0评论

IPhone 指纹识别 是在IPhone 5s 设备出现的新功能,用于数据加密和安全。用户开启设备可通过输入密码或者验证指纹的方式解锁手机,以达到个人隐私得到安全保护的手段。在ios8.0 后开发了功能实现的API,我们可以运用这个功能在第三方app进行验证登录,提高用户体验

废话不多说,直接进入正题。

假设你要在第三方APP 做指纹验证登录,那么你或怎么做? 我想应该是类似第三方登录(微信、QQ、微博等)同样的流程。首先,你必须注册一个账号,然后验证TouchId,验证通过后,生成一个token保存要keychain,并提交后台进行账号绑定。当二次登陆的时候,touchid校验通过的话,发送token到后台进行校验,校验成功后即登陆成功。

下面是详细的实验过程

第一步:导入touchid的API 接口库,声明工具方法

#import <LocalAuthentication/LocalAuthentication.h>

//方法的具体实现步骤,如下
+ (void)touchIdIdentify;

第二步: 判断系统版本是否支持touchId

if (!([[UIDevice currentDevice]systemVersion].doubleValue >= 8.0)) 
{
     NSLog(@"系统不支持");
     return;
}

第三步 : 判断设备是否支持touchId。如果不支持,判断touchId是否打开。这里需要注意一个问题。如果是ios8.0后,touchid被锁定后,需要重启手机来重新开启。如果是ios9.0后,可通过输入密码来重新开启touchid来校验。

LAContext *context = [[LAContext alloc]init];

NSError *error;

[context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];

if (error.code == LAErrorTouchIDLockout && [UIDevice currentDevice]systemVersion].doubleValue >= 9.0) 
{

     [context evaluatePolicy:LAPolicyDeviceOwnerAuthentication localizedReason:@"重新开启TouchID功能" reply:^(BOOL success, NSError * _Nullable error) 
     {
            if (success) 
            {
                //递归调用下
                [self touchIdIdentify];
            }
        }]; 
   return;
}

注意 : kLAPolicyDeviceOwnerAuthentication 这个(枚举)值只有在iOS9.0以后才可以使用,利用这个值可以调出输入密码来解锁TouchID的界面。故以上要做9.0的版本判断。

.

第四步 : 在第三步的基础上,如果支持,那么进行校验。
注意 :由于校验的结果回调是在子线程,所以,涉及到一个操作必须回到主线程。

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

       //回主线程
        dispatch_async(dispatch_get_main_queue(), ^{

            if (error) 
            {
                switch (error.code) 
                {
                    case LAErrorAuthenticationFailed:

                        NSLog(@"LAErrorAuthenticationFailed");
                        break;

                    case LAErrorUserCancel:

                         NSLog(@"点击取消按钮");
                        break;

                    case LAErrorUserFallback:

                         NSLog(@"用户点击输入密码按钮");
                         break;

                    case LAErrorPasscodeNotSet:

                        NSLog(@"没有在设备上设置密码");
                        break;

                    case LAErrorTouchIDNotAvailable:

                       NSLog(@"设备不支持TouchID");
                       break;

                    case LAErrorTouchIDNotEnrolled:

                       NSLog(@"身份验证无法启动,因为Touch ID没有注册手指");
                       break;

                    case LAErrorTouchIDLockout:

                      NSLog(@"touchid 被锁定"); 
                        if ([[UIDevice currentDevice]systemVersion].doubleValue >= 9.0) 
                        {
                            [self touchIdIdentify];
                        }
                        break;
                    default:
                        break;
                }
                return ;
            }

            // 说明验证成功,如果要刷新UI必须在这里回到主线程
            NSLog(@"校验成功");
    }];

大概就是这么写步骤吧。仅供参考。demo下载地址戳这里,真机运行。


本文由【waitig】发表在等英博客
本文固定链接:ios TouchId
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)