TJBioAuthenticator 免費的 FaceID、TouchID 驗證工具

在 iOS 的開發過程中,難免會遇到生物識別的開發,之前介紹過「TDTouchID」這個免費的 FaceID、TouchID 驗證工具,不過「TDTouchID」是 Objective-C 版,如果你是用 Swift 開發,應該要下載 TJBioAuthenticator 這個工具,一樣提供了相當完善的封裝,個人覺得用起來很好用,你應該來試試。

 

◎◎軟體小檔案◎◎
軟體名稱:TJBioAuthenticator
軟體版本:20191102
軟體介面:英文
支援系統:iOS 開發
■ 軟體下載:【點我下載】

 

在 TJBioAuthenticator 中,主要是使用以下的函式做為驗證。

  1. func authenticateUserWithBiometrics(reason: String = "", fallbackTitle: String? = "", cancelTitle: String? = "", success successBlock:@escaping AuthenticationSuccess, failure failureBlock:@escaping AuthenticationFailure) {
  2.     let reasonString = reason.isEmpty ? TJBioAuthenticator.shared.defaultBiometricAuthenticationReason() : reason
  3.  
  4.     let context = LAContext()
  5.     context.localizedFallbackTitle = fallbackTitle
  6.     if #available(iOS 10.0, *) {
  7.         context.localizedCancelTitle = cancelTitle
  8.     } else {
  9.         // Fallback on earlier versions
  10.     }
  11.  
  12.     // evaluate policy
  13.     TJBioAuthenticator.shared.evaluate(policy: LAPolicy.deviceOwnerAuthenticationWithBiometrics, with: context, reason: reasonString, success: successBlock, failure: failureBlock)
  14. }

 

要使用臉部辨識或是指紋辨識很簡單,只要用這樣使用就好了。

  1. TJBioAuthenticator.shared.authenticateUserWithBiometrics(success: {
  2.     // Biometric Authentication success
  3.     self.showSuccessAlert()
  4.     }) { (error) in
  5.       // Biometric Authentication unsuccessful
  6.       switch error{
  7.         case .biometryLockedout:
  8.            self.executePasscodeAuthentication()
  9.         default:
  10.            self.presentAlert(withTitle: "Error", message: error.getMessage())
  11.            break
  12.       }
  13.    }

 

因為無論驗證成功或是驗證失敗,都是在 block 中,因此無法更新 UI,所以函式一定要加上 DispatchQueue,讓函式能在 main thread 執行,如下.:

  1. func showSuccessAlert() {
  2.    DispatchQueue.main.async {
  3.       self.presentAlert(withTitle: "Success", message: "Login successful")
  4.    }
  5. }

而要判斷裝置是否支援生物識別,也只這樣使用:

  1. let isBiometricAuthenticationAvailable = TJBioAuthenticator.shared.isBiometricAuthenticationAvailable()

 

最後,來提一下這隻程式的 bug,他有一個函式是驗證是否支援臉部辨識,如下:

  1.  func isFaceIDAvailable() -> Bool {
  2.    if #available(iOS 11.0, *) {
  3.        return (LAContext().biometryType == .faceID)
  4.    }
  5.    return false
  6. }

 

建議將以上的函式改成如下,我們才可以支援此裝置是否支援臉部辨識:

  1. func isFaceIDAvailable() -> Bool {
  2.    if #available(iOS 11.0, *) {
  3.  
  4.        let context = LAContext()
  5.        var error: NSError? = nil
  6.  
  7.        context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error)
  8.  
  9.        return (context.biometryType == .faceID)
  10.    }
  11.    return false
  12. }