Touch ID 的使用

首先我们得引入“LocalAuthentication”这个库,然后导入#import <LocalAuthentication/LocalAuthentication.h> 就可以正常使用

注意这两个方法:

 //是否可以用 Touch ID 
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error;
//用Touch ID后,返回的结果,是否成功
- (void)evaluatePolicy:(LAPolicy)policy
   localizedReason:(NSString *)localizedReason
             reply:(void(^)(BOOL success, NSError *error))reply;

LAContext *context = [[LAContext alloc] init];
NSError *error;
context.localizedFallbackTitle = @"输入登陆密码";

/**
 注意两者的区别,
 首先支持的版本不同、
 //LAPolicyDeviceOwnerAuthentication  iOS 9.0 以上
 //kLAPolicyDeviceOwnerAuthenticationWithBiometrics  iOS 8.0以上
 其次输入 密码次数有关
 用kLAPolicyDeviceOwnerAuthenticationWithBiometrics 就好拉

 最主要的是,前者  使用“context.localizedFallbackTitle = @"输入登陆密码";”
 上面这个属性的时候,不能按我们设定的要求走,它会直接弹出验证

 所以还是用后者,kLAPolicyDeviceOwnerAuthenticationWithBiometrics 

 */

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
{
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
            localizedReason:NSLocalizedString(@"Home键验证已有手机指纹", nil)
                      reply:^(BOOL success, NSError *error)
    {
                          if (success)
                          {
                              NSLog(@"验证通过");
                          }
                          else
                          {
                              switch (error.code)
                              {

                                  case LAErrorUserCancel:
                                      //认证被用户取消.例如点击了 cancel 按钮.
                                      NSLog(@"密码取消");
                                      break;

                                  case LAErrorAuthenticationFailed:
                                      // 此处会自动消失,然后下一次弹出的时候,又需要验证数字
                                      // 认证没有成功,因为用户没有成功的提供一个有效的认证资格
                                      NSLog(@"连输三次后,密码失败");
                                      break;

                                  case LAErrorPasscodeNotSet:
                                      // 认证不能开始,因为此台设备没有设置密码.
                                      NSLog(@"密码没有设置");
                                      break;

                                  case LAErrorSystemCancel:
                                      //认证被系统取消了(例如其他的应用程序到前台了)
                                      NSLog(@"系统取消了验证");
                                      break;

                                  case LAErrorUserFallback:
                                      //当输入觉的会有问题的时候输入
                                      NSLog(@"登陆");
                                      break;
                                   case LAErrorTouchIDNotAvailable:
                                       //认证不能开始,因为 touch id 在此台设备尚是无效的.
                                      NSLog(@"touch ID 无效");

                                  default:
                                      NSLog(@"您不能访问私有内容");
                                  break;
                              }
                          }
    }];
}
else
{

    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"您的Touch ID 设置 有问题" message:nil delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];

    switch (error.code) {
        case LAErrorTouchIDNotEnrolled:
            alert.message = @"您还没有进行指纹输入,请指纹设定后打开";
            break;
        case  LAErrorTouchIDNotAvailable:
             alert.message = @"您的设备不支持指纹输入,请切换为数字键盘";
            break;
        case LAErrorPasscodeNotSet:
             alert.message = @"您还没有设置密码输入";
            break;
        default:
            break;
    }
    [alert show];


}

附加从设备和系统判断是否是支持TouchID,有点取巧

是否是iOS8.0以上的系统
#define IOS8_OR_LATER    ( [[[UIDevice currentDevice] systemVersion] compare:@"8.0"] != NSOrderedAscending )
是否是5s以上的设备支持
+ (NSString *)platform
{
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
    free(machine);
    return platform;
}

// 判断是否支持TouchID,只判断手机端,ipad端我们不支持
 #define IS_Phone        (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone
+ (BOOL)judueIPhonePlatformSupportTouchID
 {
/*
 if ([platform isEqualToString:@"iPhone1,1"])   return @"iPhone1G GSM";
 if ([platform isEqualToString:@"iPhone1,2"])   return @"iPhone3G GSM";
 if ([platform isEqualToString:@"iPhone2,1"])   return @"iPhone3GS GSM";
 if ([platform isEqualToString:@"iPhone3,1"])   return @"iPhone4 GSM";
 if ([platform isEqualToString:@"iPhone3,3"])   return @"iPhone4 CDMA";
 if ([platform isEqualToString:@"iPhone4,1"])   return @"iPhone4S";
 if ([platform isEqualToString:@"iPhone5,1"])   return @"iPhone5";
 if ([platform isEqualToString:@"iPhone5,2"])   return @"iPhone5";
 if ([platform isEqualToString:@"iPhone5,3"])   return @"iPhone 5c (A1456/A1532)";
 if ([platform isEqualToString:@"iPhone5,4"])   return @"iPhone 5c (A1507/A1516/A1526/A1529)";
 if ([platform isEqualToString:@"iPhone6,1"])   return @"iPhone 5s (A1453/A1533)";
 if ([platform isEqualToString:@"iPhone6,2"])   return @"iPhone 5s (A1457/A1518/A1528/A1530)";
 */

        if(IS_Phone)
        {
            if([self platform].length > 6 )
            {

                NSString * numberPlatformStr = [[self platform] substringWithRange:NSMakeRange(6, 1)];
                NSInteger numberPlatform = [numberPlatformStr integerValue];
                // 是否是5s以上的设备
                if(numberPlatform > 5)
                {
                    return YES;
                }
                else
                {
                    return NO;
                }

            }
            else
            {
                return NO;
            }
        }
        else
        {
            // 我们不支持iPad 设备
            return NO;
        }

  }
参考: http://www.tuicool.com/articles/zEbEjaB
转:http://www.jianshu.com/p/d7b377c99889

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值