美文网首页
iOS生物识别验证(Touch ID、Face ID)

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

作者: C_JH | 来源:发表于2018-09-12 01:05 被阅读486次

    简介

    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
    • LAContext.h
    • LAError.h
    • LAPublicDefines.h
    • LocalAuthentication.h
    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有两个可选项。

    • 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参数返回一个是否成功和错误信息的回调代码块。

    验证弹出窗的提示信息

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

    相关文章

      网友评论

          本文标题:iOS生物识别验证(Touch ID、Face ID)

          本文链接:https://www.haomeiwen.com/subject/pyjpwftx.html