2017-09-25 167 views
1

它有點早問,但我打算專門爲FaceID添加功能,所以在此之前,我需要驗證任一設備是否支持FaceID? 需要建議和幫助。 在此先感謝。如何檢測設備是否支持FaceID?

+3

你有耐心閱讀蘋果文檔? https://developer.apple.com/documentation/localauthentication/labiometrytype –

+0

我在Google上搜索並搜索了Stackoverflow,但沒有找到正確的答案,所以在閱讀Apple文檔併發布答案後,我希望這會幫助其他人來到這裏(當他們的時間短的時候找到快速解決方案:)。 https://stackoverflow.com/a/46402895/671060 – Aleem

回答

3

謝謝阿什利米爾斯,我創建了一個函數來檢測設備中的FaceID。

- (BOOL)canAuthenticateByFaceID { 
LAContext *context = [[LAContext alloc] init]; 
if (context.biometryType == LABiometryTypeFaceID && @available(iOS 11.0, *)) { 
    return YES; 
} else { 
    return NO; 
} 
} 

希望這會對其他人有幫助。快樂編碼!

+0

嗨Aleem, 您是否有任何關於如何使用face id從我們的應用程序認證用戶的參考。我在網上查過,但沒有找到任何。 – Sid

+2

在swift中,我在模擬器中的任何設備上獲得0:context.biometryType.rawValue(iPhoneX,iPhone8)。不應該返回2和1(typeFaceID,typeTouchID) – mica

+1

雲母我發現問題是在政策沒有被首先評估,張貼在一個普通的日子更徹底的答案Swift! –

6

我發現你必須先調用canEvaluatePolicy才能正確獲取生物特徵類型。如果你不這樣做,你會一直得到0的原始價值。

所以像這樣的Swift 3中,測試和工作在Xcode 9.0 & beta 9.0.1。

class func canAuthenticateByFaceID() -> Bool { 
    //if iOS 11 doesn't exist then FaceID doesn't either 
    if #available(iOS 11.0, *) { 
     let context = LAContext.init() 

     var error: NSError? 

     if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthenticationWithBiometrics, error: &error) { 
      //As of 11.2 typeFaceID is now just faceID 
      if (context.biometryType == LABiometryType.typeFaceID) { 
       return true 
      } 
     } 
    } 

    return false 
} 

你當然可以寫只是爲了看看它或者生物識別並與布爾一起返回類型,但是這應該是綽綽有餘對於大多數人過的工作。

+1

我們發現此代碼適用於手機具有臉部ID且已註冊且正常。 但是,如果臉部ID未註冊,或者如果它通過識別太多不正確的臉部而「鎖定」,則此函數返回false(導致我們的代碼至少沿着觸摸ID的路徑不正確)。 有沒有人知道一種方法來檢測設備是否具有Face ID功能,無論它是否被註冊或鎖定? –

2

的Objective-C版本

- (BOOL) isFaceIdSupported{ 
    if (@available(iOS 11.0, *)) { 
     LAContext *context = [[LAContext alloc] init]; 
     if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:nil]){ 
      return (context.biometryType == LABiometryTypeFaceID); 
     } 
    } 
    return NO; 
}