简介
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文件。
- LAContext.h
- LAError.h
- LAPublicDefines.h
- LocalAuthentication.h
LocalAuthentication.h
暴露给开发者的接口文件
LAPublicDefines.h
从文件名字即可知是声明宏定义类。定义了LAError.h
和LAContext.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
唤起识别验证主要使用到的类。文件开头是一个枚举类型LAPolicy
,LAPolicy
有两个可选项。
- LAPolicyDeviceOwnerAuthenticationWithBiometrics
// 设备所有者使用生物识别方法进行认证。TouchID验证是必须的,如果TouchID不可用或者没有注册,则策略评估将会失败。如果TouchID是锁被锁定,则需要输入密码作为解锁TouchID的第一步。
// TouchID对话框包括一个取消按钮,默认标题为“取消”,可以使用“localizedCancelTitle”属性去修改。有一个fallback按钮默认标题为“输入密码”,可以通过“localizedFallbackTitle”属性去修改。
// fallback按钮最初是隐藏的,并且在首次touchID尝试失败之后显示。
// 点击取消按钮或者输入密码按钮后会导致 evaluatePolicy: 方法调用失败,返回一个不同的错误代码。
// 5次验证失败,生物识别将被锁定。之后,用户必须输入密码才可以解锁验证。
- LAPolicyDeviceOwnerAuthentication
// 设备所有者使用生物识别后者设备密码进行验证。
// 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参数返回一个是否成功和错误信息的回调代码块。
还可以通过对象属性localizedFallbackTitle
和localizedCancelTitle
来分别自定义设置验证弹窗的改为手动输入密码、取消按钮文字。
网友评论