查看iPhone 5s上是否启用了Touch ID

时间:2013-09-21 03:28:11

标签: ios ios7 touch-id

我知道iPhone 5S上的Touch ID不能被任何其他应用程序通过SDK使用,但我想知道应用程序是否有可能至少看看设备上是否启用了Touch ID。这可以作为应用程序的额外安全因素,以查看是否已在iPhone 5S上启用Touch ID。我知道MDM产品可以做到这一点,应用程序需要使用特殊的API来确定这些信息吗?

4 个答案:

答案 0 :(得分:7)

您要查找的方法是LAContext canEvaluatePolicy:error:。 在以下情况下它将返回NO:

  • 设备上没有Touch ID。
  • 设备上未设置密码。
  • Touch ID没有已注册的手指。

此处有更多信息:Local Authentication Framework Reference

- (BOOL) isTouchIDAvailable {
    LAContext *myContext = [[LAContext alloc] init];
    NSError *authError = nil;

    if (![myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {

        NSLog(@"%@", [authError localizedDescription]);
        return NO;
    }
    return YES;
}

答案 1 :(得分:2)

由于TouchID仅出现在iPhone 5s中,因此您可以使用以下代码来确定硬件型号:

- (NSString *) checkiPhone5s {
  // Gets a string with the device model
  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); 

  if ([platform isEqualToString:@"iPhone6,1"]) {
     // it is iPhone 5s !!!
  }
}

请注意,iPhone 5s可能有新型号,因此未来平台字符串可能是“iPhone6,2”,“iPhone6,3”。

或者,如果为iPhone 5s更新了该类,UIDeviceHardware类可能会提供有用的信息。目前它显示iPhone 5的“未知iPhone”。

答案 2 :(得分:2)

我在下面的阶段检查这个。

  1. iOS< 8.0:

    self.touchIdAvailable = NO;
    
  2. 然后检查设备是否可用touchId。

    - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError **)error
    
        if ("canEvaluatePolicy return YES"):{
            self.touchIdAvailable = YES;
            self.osTouchIdStatus = TouchIdSetOK;
        }
    
  3. 检查错误块

    中此设备未启用touchID的原因
        case LAErrorPasscodeNotSet:
        case LAErrorTouchIDNotEnrolled:
    
            self.touchIdAvailable = YES;
            self.osTouchIdStatus = TouchIdNotSet;
    
        break;
    
        default:
            self.touchIdAvailable = NO;
            self.osTouchIdStatus = TouchIdNotSupported;
        break;
    

答案 3 :(得分:0)

开发人员文档中似乎没有提及有关检测设备上是否存在Touch ID的内容。绝对是一个私有API可以为您提供该信息,但使用它将是Apple不批准您的应用程序的理由。