2017-11-09 35 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가'if success {'조건을 사용하여 그것을 관리했습니다. 패스 코드가 corrent이고 패스 코드보기가 자동으로 닫히고 추가 작업을 위해 사용할 수있는 부울 값으로'sucess'를 제공합니다. – Krunal

2

정책 .deviceOwnerAuthentication을 사용하는 경우 "암호 입력"옵션이 즉시 표시됩니다.

.deviceOwnerAuthenticationWithBiometrics을 사용하는 경우, "비밀번호 입력"옵션은 처음 생체 인증 시도가 실패한 후에 만 ​​표시됩니다.

사용자가 인증하는 방법에 관계없이 완료 폐쇄가 호출됩니다.