iOS生物识别验证(Touch ID、Face ID)

2018-09-12  本文已影响486人  C_JH

简介

iOS生物识别验证包括Touch ID和Face ID。苹果从iPhone5S开始,具有指纹识别技术,从iOS8.0之后苹果允许第三方 App 使用 Touch ID进行身份验证。而Face ID则是伴随着苹果第一代全面屏手机iPhone X横空出世。生物识别提供3+2共5次识别机会(3次识别失败后,弹出的验证框会消失,同时会报错code = -1,然后会再次弹框可验证两次),如果五次识别全部错误,就需要手动输入数字密码,数字密码可以输入6次,如果6次输入的数字密码都错误,系统会停止验证,一定的间隔后才能再次输入密码验证,而且间隔会随着输入的次数增长。

查看官方接口

使用生物识别验证需要先引入LocalAuthentication.framework

#import <LocalAuthentication/LocalAuthentication.h>

点进去LocalAuthentication.framework我们发现只有4个声明文件和一个.apinotes文件。

LocalAuthentication.framework
LocalAuthentication.h

暴露给开发者的接口文件

LAPublicDefines.h

从文件名字即可知是声明宏定义类。定义了LAError.hLAContext.h将会用到的宏。

LAError.h

定义了一个验证错误返回信息的枚举。

typedef NS_ENUM(NSInteger, LAError)
{
    LAErrorAuthenticationFailed,    // 验证不通过,比如指纹错误
    LAErrorUserCancel               // 用户点击了取消验证
    LAErrorUserFallback             // 用户点击了手动输入密码
    LAErrorSystemCancel             // 系统取消验证,例如切换到别的APP
    LAErrorPasscodeNotSet           // 用户没有开启
    LAErrorTouchIDNotAvailable      // 用户设备不支持
    LAErrorTouchIDNotEnrolled       // 用户没有注册生物识别验证
    LAErrorTouchIDLockout           // 错误次数超过上限,需要手动输入密码
    LAErrorAppCancel                // 系统取消验证
    LAErrorInvalidContext           // 请求验证出错
} NS_ENUM_AVAILABLE(10_10, 8_0);
LAContext.h

唤起识别验证主要使用到的类。文件开头是一个枚举类型LAPolicyLAPolicy有两个可选项。

// 设备所有者使用生物识别方法进行认证。TouchID验证是必须的,如果TouchID不可用或者没有注册,则策略评估将会失败。如果TouchID是锁被锁定,则需要输入密码作为解锁TouchID的第一步。
// TouchID对话框包括一个取消按钮,默认标题为“取消”,可以使用“localizedCancelTitle”属性去修改。有一个fallback按钮默认标题为“输入密码”,可以通过“localizedFallbackTitle”属性去修改。
// fallback按钮最初是隐藏的,并且在首次touchID尝试失败之后显示。
// 点击取消按钮或者输入密码按钮后会导致 evaluatePolicy: 方法调用失败,返回一个不同的错误代码。
// 5次验证失败,生物识别将被锁定。之后,用户必须输入密码才可以解锁验证。
// 设备所有者使用生物识别后者设备密码进行验证。
// TouchID或者密码验证是必须的,如果TouchID可用,注册并且未被锁定,首先使用TouchID验证。否则直接要求输入设备密码。
// 如果密码未被启用,则策略评估失败。
// Touch ID身份验证对话框的行为与LAPolicyDeviceOwnerAuthenticationWithBiometrics使用的行为相似。当点击输入密码按钮的时候,切换验证方法,并允许用户输入设备密码。
// 密码锁定会在6次失败尝试之后被锁定,并且逐步增加退避延迟。

接下来是主要用到的两个实例方法
-(BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError *)error;返回当前设备是否可用生物识别验证功能。

- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply;唤起生物识别验证功能 Face ID or Touch ID
其中localizedReason参数是验证弹出窗的提示信息。replay参数返回一个是否成功和错误信息的回调代码块。

验证弹出窗的提示信息

还可以通过对象属性localizedFallbackTitlelocalizedCancelTitle来分别自定义设置验证弹窗的改为手动输入密码、取消按钮文字。

上一篇下一篇

猜你喜欢

热点阅读