2015-03-10 3 views
1

Я работаю над интеграцией touchID в свое приложение. Процесс был довольно простым, но даже просто используя мои фиктивные данные, он занимает около 5 секунд после того, как он аутентифицировал мой отпечаток, прежде чем он выполнит свою задачу.swift - touchID занимает много времени, чтобы загрузить

Вот мой код:

func requestFingerprintAuthentication() { 
    let context = LAContext() 
    var authError: NSError? 
    let authenticationReason: String = "Login" 

    if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError) { 
     context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: authenticationReason, reply: { 
      (success: Bool, error: NSError?) -> Void in 
      if success { 
       println("successfull signin with touchID") 
       self.emailInputField.text = "[email protected]" 
       self.passwordInputField.text = "password" 
       self.signIn(self.signInButton) 
      } else { 
       println("Unable to Authenticate touchID") 
      } 
     }) 
    } 
} 

даже с фиктивными данными, она занимает waaay слишком долго.

Когда я вхожу в систему обычно, введя адрес электронной почты и пароль в свои поля ввода, функция signIn() запускается мгновенно.

Чтобы узнать, есть ли проблемы с этим. Я попытался заменить это, используя 2 строки, которые просто приводят меня к правильному viewController. Но это все еще занимает несколько секунд после того, как он аутентифицировал мой отпечаток.

Я знаю, что это не телефон, а touchID. Потому что он немедленно запускает мой println («успешный вход с touchID»). Это то, что приходит после этого, что по какой-то причине занимает несколько секунд для его запуска?

Любая помощь, объясняющая это, была бы очень признательна!

ответ

6

В документации говорится:

Этот метод асинхронно оценивает политику аутентификации.

Вы используете UI-код в потоке, который не является основным. Оберните ваш код, чтобы заставить его выполнить в основном потоке:

func requestFingerprintAuthentication() { 
let context = LAContext() 
var authError: NSError? 
let authenticationReason: String = "Login" 

if context.canEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, error: &authError) { 
    context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: authenticationReason, reply: { 
     (success: Bool, error: NSError?) -> Void in 
     if success { 
      NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
       println("successfull signin with touchID") 
       self.emailInputField.text = "[email protected]" 
       self.passwordInputField.text = "password" 
       self.signIn(self.signInButton) 
      }) 
     } else { 
      println("Unable to Authenticate touchID") 
     } 
    }) 
} 

}

+0

Спасибо ооочень большое за вашу помощь Гари !, он работал отлично. – MLyck

+0

Спасибо Гэри. Очень круто. –

Смежные вопросы