iOS8检查设备是否具有Touch ID [英] iOS8 check if device has Touch ID

查看:174
本文介绍了iOS8检查设备是否具有Touch ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

LAContext有方法检查设备是否可以评估触摸ID并提供错误消息。
问题是系统在两种情况下给出了相同的错误消息LAErrorPasscodeNotSet:

LAContext has method to check if device can evaluate touch ID and gives error message. Problem is that same error message "LAErrorPasscodeNotSet" is given by system in two cases:

1)如果用户有Touch ID,但在设置中将其关闭(带iOS8的iPhone 5s)

1) If user has Touch ID, but turned it off in settings (iPhone 5s with iOS8)

2)如果设备没有Touch ID(带iOS8的iPad)

2) If device doesn't have Touch ID (iPad with iOS8)

问:如何检查设备是否支持Touch ID,但未在设置中打开?

Q: How to check if device supports Touch ID, but haven't turned it on in settings?

更新:

已经为Apple创建了关于此错误的门票(ID#18364575)并收到了答案:

Had created ticket to Apple regarding this bug (ID# 18364575) and received answer:

工程已确定根据以下信息,此问题的行为符合预期:

如果未设置密码,您将无法检测Touch ID的存在设置密码后,canEvaluatePolicy最终将返回LAErrorTouchIDNotAvailable或LAErrorTouchIdNotEnrolled,您将能够检测到Touch ID状态/状态。

如果用户已使用Touch ID在手机上禁用了密码y知道他们将无法使用Touch ID,因此应用程序无需检测Touch ID存在或促进基于Touch ID的功能。

推荐答案

也许您可以编写自己的方法来检查您正在运行的设备,因为如果返回的错误是相同的,那么很难确定是否支持Touch ID。我会这样做:

Maybe you could write your own method to check which device are you running on, because if returned error is the same, it would be hard to figure out exactly if Touch ID is supported. I would go with something like this:

int sysctlbyname(const char *, void *, size_t *, void *, size_t);

- (NSString *)getSysInfoByName:(char *)typeSpecifier
{
    size_t size;
    sysctlbyname(typeSpecifier, NULL, &size, NULL, 0);

    char *answer = malloc(size);
    sysctlbyname(typeSpecifier, answer, &size, NULL, 0);

    NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding];

    free(answer);
    return results;
}

- (NSString *)modelIdentifier
{
    return [self getSysInfoByName:"hw.machine"];
}

拥有模型标识符后,我只检查模型标识符是否等于支持Touch ID的模型之一:

After having the model identifier, I would just check if model identifier equals is one of the models that support Touch ID:

- (BOOL)hasTouchID
{
    NSArray *touchIDModels = @[ @"iPhone6,1", @"iPhone6,2", @"iPhone7,1", @"iPhone7,2", @"iPad5,3", @"iPad5,4", @"iPad4,7", @"iPad4,8", @"iPad4,9" ];

    NSString *model = [self modelIdentifier];

    return [touchIDModels containsObject:model];
}

该数组包含支持Touch ID的所有型号ID,它们是:

The array contains all model ID's which support Touch ID, which are:


  • iPhone 5s

  • iPhone 6

  • iPhone 6+

  • iPad Air 2

  • iPad Mini 3

  • iPhone 5s
  • iPhone 6
  • iPhone 6+
  • iPad Air 2
  • iPad Mini 3

此方法的唯一缺点是,一旦使用Touch ID发布新设备,模型阵列将不得不手动更新。

这篇关于iOS8检查设备是否具有Touch ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆