аутентификация с touchIDAuthenticationAllowableReuseDuration не работает - PullRequest
0 голосов
/ 03 июня 2019

Я хочу аутентифицировать мое приложение, такое как Google Pay или WhatsApp, когда вы откроете свое приложение, оно запросит аутентификацию touchid / faceid.Проблема в том, что, когда вы возвращаетесь из фона на передний план, мое приложение запрашивает аутентификацию только в первый раз, а затем оно никогда не запрашивает аутентификацию, когда возвращается с фона на передний план.Я использую (touchIDAuthenticationAllowableReuseDuration = 60 секунд), но через 60 секунд он не запрашивает аутентификацию, он просто проверяет аутентификацию.

class ViewController: UIViewController {

    public static let shared = ViewController()
    var authError : NSError?
    var authReason = "To Access secure Data"
    lazy var context: LAContext = {
        let mainContext = LAContext()
        if #available(iOS 9, *){
           mainContext.touchIDAuthenticationAllowableReuseDuration = 60
        }
        return mainContext
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
       evaluateUserWithBiometricsOrPasscode()
    }

    func evaluateUserWithBiometricsOrPasscode() -> Void{
        if context.canEvaluatePolicy(LAPolicy.deviceOwnerAuthentication, error: &authError){
            self.evalute(authReason: authReason)
        }else {
            // error
        }
    }



    func evalute(authReason : String ) -> Void{
        context.evaluatePolicy(LAPolicy.deviceOwnerAuthentication, localizedReason: authReason){[weak self] success, error in
            DispatchQueue.main.async {
                if success{
                    print("Touch ID Authentication Succeeded")
                }
                else{
                    print("Touch ID Authentication Failed")
                }
             }
          }
       }

    }

, вызывая этот метод в "

func applicationWillEnterForeground(_ application: UIApplication)" from AppDelegate.swift: 
ViewController.shared.evaluateUserWithBiometricsOrPasscode()

1-й раз открытьприложение, которое запрашивается для аутентификации: результат - «Аутентификация Touch ID успешно завершена»

2-й раз и т. д. - перейти на задний план, а затем вернулся на передний план: результат - «Аутентификация Touch ID успешно завершена» без запросаtouchid

...