Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 查看iPhone 5s上是否启用了触摸ID_Ios_Ios7_Touch Id - Fatal编程技术网

Ios 查看iPhone 5s上是否启用了触摸ID

Ios 查看iPhone 5s上是否启用了触摸ID,ios,ios7,touch-id,Ios,Ios7,Touch Id,我知道iPhone 5S上的触摸ID不能通过SDK被任何其他应用程序使用,但我想看看应用程序是否可以至少查看设备上是否启用了触摸ID。这可以作为应用程序的额外安全因素,以查看iPhone 5S上是否启用了触摸ID。我知道MDM产品可以做到这一点,应用程序是否需要使用特殊的API来确定此信息?开发者文档中似乎没有提到任何关于检测设备上是否存在触摸ID的内容。绝对有一个私人API可以为您提供这些信息,但使用它将成为苹果不批准您的应用程序的理由。由于TouchID仅出现在iPhone 5s中,您可以使

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

开发者文档中似乎没有提到任何关于检测设备上是否存在触摸ID的内容。绝对有一个私人API可以为您提供这些信息,但使用它将成为苹果不批准您的应用程序的理由。

由于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 !!!
  }
}
请注意,iphone5s可能有新型号,因此未来平台字符串可能是“iPhone6,2”、“iPhone6,3”


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

您正在寻找的方法是
LAContext
canevaluation策略:错误:
。 在以下情况下,它将返回NO:

  • 触摸ID在设备上不可用
  • 设备上未设置密码
  • 触摸ID没有注册的手指
更多信息请点击此处:


我将分以下几个阶段对此进行检查

  • iOS<8.0:

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

    - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError **)error
    
        if ("canEvaluatePolicy return YES"):{
            self.touchIdAvailable = YES;
            self.osTouchIdStatus = TouchIdSetOK;
        }
    
  • 检查此设备在错误块中未启用touchID的原因

        case LAErrorPasscodeNotSet:
        case LAErrorTouchIDNotEnrolled:
    
            self.touchIdAvailable = YES;
            self.osTouchIdStatus = TouchIdNotSet;
    
        break;
    
        default:
            self.touchIdAvailable = NO;
            self.osTouchIdStatus = TouchIdNotSupported;
        break;
    

  • 此本地身份验证框架在iOS 8以后的SDk中可用。
        case LAErrorPasscodeNotSet:
        case LAErrorTouchIDNotEnrolled:
    
            self.touchIdAvailable = YES;
            self.osTouchIdStatus = TouchIdNotSet;
    
        break;
    
        default:
            self.touchIdAvailable = NO;
            self.osTouchIdStatus = TouchIdNotSupported;
        break;