Touch ID 使用

介绍

Touch ID是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术。iOS8后苹果开放了Touch ID的API给开发者。

Face ID 是iPhone X 专属功能,也是iOS 11中的新功能,用于取代Touch ID,他们的作用都是为了让我们不在需要每次都使用密码进行身份验证,只需要指纹或者人脸就可完成相关认证。

Touch ID 和 Face ID 都属于生物特征认证,下文所提到的认证都包括这两种认证。

使用

使用Touch ID 和 Face ID 我们需要导入LocalAuthentication.framework框架,该框架只包含LAContext一个类,完成认证的所需接口就包含在这个类里面,下面就是这个类的主要方法和属性。

判断认证是否可用

- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;

该方法会返回认证方式是否可用,policy表示认证策略,该枚举有两个可选值,

1、LAPolicyDeviceOwnerAuthenticationWithBiometrics    使用生物识别认证设备持有者身份

2、LAPolicyDeviceOwnerAuthentication  使用生物识别或者密码去认证设备持有者身份

两者的区别是 LAPolicyDeviceOwnerAuthentication 是iOS 9才开始有效的,在用户认证失败后会弹出密码输入框。点击fallback按钮将跳到密码输入界面,而不是执行回调block。

开始认证

- (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply;

localizedReason 认证原因,会在弹出框上显示,reply认证结果回调block,error的错误原因有一下几个:

typedef NS_ENUM(NSInteger, LAError) {

//用户验证没有通过,比如提供了错误的指纹或人面

LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed,

// 用户取消了认证

LAErrorUserCancel = kLAErrorUserCancel,

//用户不想认证,想进行其他操作,比如输入密码等

LAErrorUserFallback = kLAErrorUserFallback,

// 系统终止了验证,比如app进入后台

LAErrorSystemCancel = kLAErrorSystemCancel,

// 用户没有设定密码

LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet,

// 设备不支持Touch ID,为了适配Face ID iOS 11之后废除

LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable NS_ENUM_DEPRECATED(10_10,10_13,8_0,11_0,"use LAErrorBiometryNotAvailable") = kLAErrorTouchIDNotAvailable,

// 设备没有进行Touch ID 指纹注册,为了适配Face ID iOS 11之后废除

LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled NS_ENUM_DEPRECATED(10_10,10_13,8_0,11_0,"use LAErrorBiometryNotEnrolled"),

//由于失败太多次,并且认证被锁定,要求用户输入密码来解锁。使用LAPolicyDeviceOwnerAuthenticationWithBiometrics策略多次失败后,不会自动弹出密码输入界面,并且调用验证方法会直接返回错误,我们需要转换验证策略为LAPolicyDeviceOwnerAuthentication,再调用认证方法,这时系统会弹出密码输入框让我们解锁,为了适配Face ID iOS 11之后废除

LAErrorTouchIDLockout = kLAErrorTouchIDLockout NS_ENUM_DEPRECATED(10_11,10_13,9_0,11_0,"use LAErrorBiometryLockout"),

//被app取消,比如,在认证过程中调用了invalidate方法

LAErrorAppCancel  = kLAErrorAppCancel NS_ENUM_AVAILABLE(10_11,9_0),

//LAContext对象已经失效了,比如,在认证前调用了invalidate方法

LAErrorInvalidContext = kLAErrorInvalidContext NS_ENUM_AVAILABLE(10_11,9_0),

//生物识别不可用,iOS 11之后可用

LAErrorBiometryNotAvailable = kLAErrorBiometryNotAvailable NS_ENUM_AVAILABLE(10_13,11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0),

//未设置人脸或指纹,iOS 11之后可用

LAErrorBiometryNotEnrolled = kLAErrorBiometryNotEnrolled NS_ENUM_AVAILABLE(10_13,11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0),

//由于失败太多次,并且认证被锁定,要求用户输入密码来解锁。使用LAPolicyDeviceOwnerAuthenticationWithBiometrics策略多次失败后,不会自动弹出密码输入界面,并且调用验证方法会直接返回错误,我们需要转换验证策略为LAPolicyDeviceOwnerAuthentication,再调用认证方法,这时系统会弹出密码输入框让我们解锁

LAErrorBiometryLockout = kLAErrorBiometryLockout NS_ENUM_AVAILABLE(10_13,11_0) __WATCHOS_AVAILABLE(4.0) __TVOS_AVAILABLE(11.0),

//被禁止弹出识别UI,无法验证,比如:LAContext的interactionNotAllowed属性被设为YES

LAErrorNotInteractive = kLAErrorNotInteractive API_AVAILABLE(macos(10.10), ios(8.0), watchos(3.0), tvos(10.0))

} NS_ENUM_AVAILABLE(10_10, 8_0);

使当前认证上下文对象无效

- (void)invalidate;

touchIDAuthenticationAllowableReuseDuration 该属性可以设置一个时间间隔,在时间间隔内是调用认证方法时可以不需要认证,直接通过。默认是0秒,最长可以设置5分钟。

localizedFallbackTitle  回退按钮标题,允许用户其他操作,设为空字符将被隐藏

localizedCancelTitle       取消按钮标题

maxBiometryFailures   最大认证失败次数

evalueatedPolicyDomainState 这个属性可以检测你的指纹数据库的变化,增加或者删除指纹这个属性会做出相应的反应,只有验证成功之后才会别赋值,注意:这个值得变化只能说明指纹库发生了变化,并不能知道发生了什么变化。

localizedReason   认证原因,会在弹出框上显示

interactionNotAllowed  设为Yes将不会弹出验证UI,直接回调错误

biometryType  认证类型,该属性只有在canEvaluatePolicy方法返回成功后,才会被赋值,该属性是有三个可选值:

LABiometryNone无生物验证方式

LABiometryTypeTouchID touchid认证

LABiometryTypeFaceID  Face ID认证,该属性是iOS 11新添加

你可能感兴趣的:(Touch ID 使用)