首页 > 系统 > iOS > 正文

iOS 8 SDK Touch ID指纹识别功能

2019-11-09 17:16:36
字体:
来源:转载
供稿:网友

前言

      iOS 8 SDK向开发者公布了Touch ID指纹识别功能,允许App对用户身份进行本地验证。

Touch ID支持系统和机型

      iOS系统的Touch ID指纹识别功能最低支持的机型为iphone 5s最低支持系统为iOS 8.

依赖框架

LocalAuthentication.framework

该框架下只有两个头文件: LAContext.h LAError.h

LAContext

简介

通过该对象可完成指纹识别。

typedef NS_ENUM(NSInteger, LAPolicy){ // 指纹验证 LAPolicyDeviceOwnerAuthenticationWithBiometrics NS_ENUM_AVAILABLE(NA, 8_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAPolicyDeviceOwnerAuthenticationWithBiometrics, // 使用Touch ID或者密码验证,默认是错误两次指纹或者锁定后,弹出输入密码界面 LAPolicyDeviceOwnerAuthentication NS_ENUM_AVAILABLE(10_11, 9_0) = kLAPolicyDeviceOwnerAuthentication};
常用属性
// 回退按钮标题// 默认标题为“输入密码”,当设置成空字符串的时候,该按钮被隐藏@PRoperty (nonatomic, nullable, copy) NSString *localizedFallbackTitle;// 取消按钮标题// 设置验证TouchID时弹出Alert的取消按钮的标题@property (nonatomic, nullable, copy) NSString *localizedCancelTitle;// 允许验证失败最大次数@property (nonatomic, nullable) NSNumber *maxBiometryFailures;@property (nonatomic, nullable, readonly) NSData *evaluatedPolicyDomainState;// 指定TouchID验证的间隔,间隔期之内可以免验证读取Keychain数据@property (nonatomic) NSTimeInterval touchIDAuthenticationAllowableReuseDuration;
核心函数
// 判断设备是否支持Touch ID- (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;

LAError

简介

主要用于Touch ID验证身份失败后的一些错误处理。

核心函数
typedef NS_ENUM(NSInteger, LAError){ // 授权失败 LAErrorAuthenticationFailed = kLAErrorAuthenticationFailed, // 用户取消Touch ID授权 LAErrorUserCancel = kLAErrorUserCancel, // 用户选择输入密码 LAErrorUserFallback = kLAErrorUserFallback, // 系统取消授权(例如其他APP切入) LAErrorSystemCancel = kLAErrorSystemCancel, // 系统未设置密码 LAErrorPasscodeNotSet = kLAErrorPasscodeNotSet, // 设备Touch ID不可用,例如未打开 LAErrorTouchIDNotAvailable = kLAErrorTouchIDNotAvailable, // 设备Touch ID不可用,用户未录入 LAErrorTouchIDNotEnrolled = kLAErrorTouchIDNotEnrolled, // 用户多次连续使用Touch ID失败,Touch ID被锁,需要用户输入密码解锁,这个错误的交互LocalAuthentication.framework已封装过,不需要开发者处理 LAErrorTouchIDLockout NS_ENUM_AVAILABLE(10_11, 9_0) __WATCHOS_AVAILABLE(3.0) __TVOS_AVAILABLE(10.0) = kLAErrorTouchIDLockout, // 与LAErrorSystemCancel相似,都是当前软件被挂起取消了授权,LAErrorAppCancel该错误是用户自己切到了别的应用,例如按Home键挂起。 LAErrorAppCancel NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorAppCancel, // 授权过程中,LAContext对象被释放掉了,造成的授权失败 LAErrorInvalidContext NS_ENUM_AVAILABLE(10_11, 9_0) = kLAErrorInvalidContext}

代码

核心代码

//新建LAContext实例 LAContext *authenticationContext= [[LAContext alloc]init]; authenticationContext.localizedFallbackTitle = @"点,验证其他"; NSError *error; //1:检查Touch ID 是否可用 if ([authenticationContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) { NSLog(@"touchId 可用"); //2:执行认证策略 [authenticationContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"需要验证您的指纹来确认您的身份信息" reply:^(BOOL success, NSError * _Nullable error) { if (success) { NSLog(@"通过了Touch Id指纹验证"); }else{ NSLog(@"error===%@",error); switch (error.code) { case LAErrorAuthenticationFailed:{//授权失败 NSLog(@"Authentication Failed"); break; } case LAErrorUserCancel:{// 用户取消Touch ID授权 NSLog(@"Authentication was cancelled by the user"); break; } case LAErrorUserFallback:{//用户选择输入密码 NSLog(@"User selected to enter custom passWord"); [[NSOperationQueue mainQueue] addOperationWithBlock:^{ // TODO SOMETHING }]; break; } case LAErrorSystemCancel:{//系统取消授权(例如其他APP切入) NSLog(@"Authentication was cancelled by the system"); //切换到其他APP,系统取消验证Touch ID break; } case LAErrorAppCancel:{//与LAErrorSystemCancel相似,都是当前软件被挂起取消了授权,LAErrorAppCancel该错误是用户自己切到了别的应用,例如按Home键挂起。 NSLog(@"app cancle the authentication"); break; } case LAErrorInvalidContext:{//授权过程中,LAContext对象被释放掉了,造成的授权失败 NSLog(@"context is invalidated"); break; } default:{ [[NSOperationQueue mainQueue] addOperationWithBlock:^{ //其他情况,切换主线程处理 }]; break; } } } }]; }else{ //todo goto 输入密码页面 NSLog(@"error====%@",error); NSLog(@"抱歉,touchId 不可用"); }

Demo地址

待填坑


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表