2013-09-21 35 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; 
    
相關問題