iOS中指纹识别常见问题汇总

2020-01-18 18:25:41刘景俊

LAContext.h

重头戏来了,想在自己的项目中使用TouchID,就要用到LAContext这个类里面的方法首先映入眼帘的是一个NS_ENUM枚举LAPolicy。


typedef NS_ENUM(NSInteger, LAPolicy)
{
LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics,
LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication
} NS_ENUM_AVAILABLE(10_10, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0);

第一个枚举LAPolicyDeviceOwnerAuthenticationWithBiometrics就是说,用的是手指指纹去验证的;NS_ENUM_AVAILABLE(NA, 8_0)iOS8 可用

第二个枚举LAPolicyDeviceOwnerAuthentication少了WithBiometrics则是使用TouchID或者密码验证,默认是错误两次指纹或者锁定后,弹出输入密码界面;NS_ENUM_AVAILABLE(10_11, 9_0)iOS 9可用

首先暴露出来的几个方法,注意这里都是实例方法,所以需要创建一个实例对象去才能调用,使用LAContext *context = [LAContext alloc] init];创建一个LAContext对象。

canEvaluatePolicy:error:方法用来检查当前设备是否可用touchID,返回一个BOOL值

evaluatePolicy:localizedReason:reply:调用验证方法,注意这里的三个参数:

第一个参数policy是要使用上面那个LAPolicy的枚举
第二个参数localizedReason是NSString类型的验证理由
第三个参数reply则是一个回调Block,block内有一个BOOL类型的success判断是否成功验证,还有一个用于判断错误信息的NSError类型的error

invalidate方法用来废止这个context

ios10,指纹识别

第一次touchID 样式

ios10,指纹识别

错误后 touchID 样式


- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error __attribute__((swift_error(none)));
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason
reply:(void(^)(BOOL success, NSError * __nullable error))reply;
- (void)invalidate;

枚举LACredentialType,LAAccessControlOperation,这个东西和下面的几个方法我查了很久也没弄明白用在哪,苹果官方文档也看的不太懂,枚举中只有一个LACredentialTypeApplicationPassword

不过通过这个NS_ENUM_AVAILABLE(10_11, 9_0)还有方法后面的NS_AVAILABLE(10_11, 9_0)知道这个枚举和这两个方法只能在OS X 10.11和iOS 9.0以上版本使用,所以可能是比较新的东西,后面苹果还会对他扩充吧。