2017-11-09 36 views
2

TouchIDを使用してアプリケーションを認証したい場合、認証が正常に機能しました。 TouchIDが一致しない場合、再試行のアラートが開き、そのアラートに[パスワードの入力]オプションが表示されます。ユーザーがそれを選択すると、システムのパスコード認証が表示されるはずですが、どうすればいいですか?ここでTouchIDが失敗した場合、システムのパスコード認証に転送

私のコードを共有する:

func touchIDAuthentication() { 
    let context = LAContext() //1 
    var error:NSError? 
    guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else { 
     showAlertViewIfNoBiometricSensorHasBeenDetected() 
     return 
    } 
    if context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &errorPointer) { 
     context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason, reply: { (success, error) in 
      if success { 
       DispatchQueue.main.async { 
        print("Authentication was successful") 
       } 
      }else { 
       DispatchQueue.main.async { 
        self.displayErrorMessage(error: error as! LAError) 
        print("Authentication was error") 
       } 
      } 
     }) 
    }else { 
     self.showAlertWith(title: "Error", message: (errorPointer?.localizedDescription)!) 
    } 
} 



func displayErrorMessage(error:LAError) { 
     var message = "" 
     switch error.code { 
     case LAError.authenticationFailed: 
      message = "Authentication Failed." 
      break 
     case LAError.userCancel: 
      message = "User Cancelled." 
      break 
     case LAError.userFallback: 
      message = "Fallback authentication mechanism selected." 
      break 
     case LAError.touchIDNotEnrolled: 
      message = "Touch ID is not enrolled." 

     case LAError.passcodeNotSet: 
      message = "Passcode is not set on the device." 
      break 
     case LAError.systemCancel: 
      message = "System Cancelled." 
      break 
     default: 
      message = error.localizedDescription 
     } 
     self.showAlertWith(title: "Authentication Failed", message: message) 
    } 

それは私のアプリに移動するパスコードを入力すると、この画面を表示する方法。どのようにこれが私を助けてください。ありがとうございます。

答えて

1

deviceOwnerAuthentication

注意してLAPolicyポリシー列挙値deviceOwnerAuthenticationWithBiometricsを置き換えますをユーザーがbiometric(顔IDまたはタッチID)の認証を有効にある場合は、そのデバイスは、生体認証のために最初に聞いてきますし、使用を選択した場合のフォールバックパスワードを入力すると、deviceOwnerAuthenticationにのみパスコード画面が表示されます。

これを試してみて、参照してください。

func touchIDAuthentication() { 
    let context = LAContext() //1 
    var error:NSError? 

    // edit line - deviceOwnerAuthentication 
    guard context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) else { 
     showAlertViewIfNoBiometricSensorHasBeenDetected() 
     return 
    } 

    // edit line - deviceOwnerAuthentication 
    if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &errorPointer) { 

     // edit line - deviceOwnerAuthentication 
     context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason, reply: { (success, error) in 
      if success { 
       DispatchQueue.main.async { 
        print("Authentication was successful") 
       } 
      }else { 
       DispatchQueue.main.async { 
        self.displayErrorMessage(error: error as! LAError) 
        print("Authentication was error") 
       } 
      } 
     }) 
    }else { 
     self.showAlertWith(title: "Error", message: (errorPointer?.localizedDescription)!) 
    } 
} 
+0

パスコードは、私のアプリにリダイレクトする方法をして正常入力した場合。 – saravanar

+0

@ saravanarあなたはalrearyが条件 'を使ってそれを管理しました。パスコードがcorrentで、パスコードビューが自動的に解除され、ブーリアン値として 'sucess'が与えられます。これをさらにアクションに使用することができます。 – Krunal

2

ポリシー.deviceOwnerAuthenticationを使用すると、すぐに[パスワードを入力する]オプションが表示されます。

.deviceOwnerAuthenticationWithBiometricsをそのまま使用すると、最初に失敗した生体認証の試行の後に[パスワードを入力]オプションが表示されます。

ユーザーの認証方法に関係なく、完了クロージャが呼び出されます。

関連する問題