上一篇说了一下KeyChain 这次来说一下 TouchID,灰常简单。
iOS系统的指纹识别功能最低支持的机型为iPhone 5s,最低支持系统为iOS 8,虽然安装iOS 7系统的5s机型可以使用系统提供的指纹解锁功能,但由于API并未开放,所以理论上第三方软件不可使用。
需要包含类库 LocalAuthentication.framework
下面说说 怎么使用。总共涉及一个类 LAContext 这个类里面有 两个方法 一个属性。
一个属性为 NSString * localizedFallbackTitle。 这个属性为另一个选项Button的文字, 默认为@"输入密码", 如果不需要的话可以 设成@"",此时只有一个 取消的按钮
方法一判断 是否可以使用指纹验证。
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;
实现代码例子
- (BOOL)canEvaluatePolicy
{
LAContext *context = [[LAContext alloc] init];
NSError *error;
return [context canEvaluatePolicy: LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];
}
方法二 使用指纹验证。
- (void)evaluatePolicy:(LAPolicy)policy
localizedReason:(NSString *)localizedReason //这个是弹出框的 提示信息
reply:(void(^)(BOOL success, NSError *error))reply;
实现的代码例子
- (void)evaluatePolicy
{
LAContext *context = [[LAContext alloc] init];
context.localizedFallbackTitle = @"输入**密码";
// localizedReason 为弹出框的提示信息。
[context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"**需要获取您的指纹认证", nil) reply:
^(BOOL success, NSError *authenticationError) {
if (success) {
// 成功
} else {
if (authenticationError.code == kLAErrorUserFallback) {
// 其他选择
}
if (authenticationError.code == kLAErrorUserCancel) {
// 取消
}
}
}];
}
最后说一下 指纹验证不可使用,和验证失败的错误情况
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,
} NS_ENUM_AVAILABLE(10_10, 8_0);