2013-09-21 27 views
4

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

回答

0

开发人员文档中没有提到任何关于检测设备上是否存在Touch ID的内容。绝对有一个私人API可以提供这些信息,但使用它会成为Apple不批准你的应用的理由。

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“。

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

7

您正在查找的方法是LAContextcanEvaluatePolicy:error:。 在以下情况下将返回NO:

  • 触控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; 
} 
+0

这本地认证框架可为iOS的8起SDK。 – Raghav

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; 
    
相关问题