2016-07-14 21 views
7

Birçok yerde açıklandığı gibi aşağıdaki LocalAuthentication uygulamasına sahibim. Ben başarıyla benim parmak izi ile kimlik doğrulaması sonraTouchID activateTouchWithResponse, parmak izi istemeden başarıyı döndürür

context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Logging in with Touch ID", reply: { (success : Bool, error : NSError?) -> Void in 
     dispatch_async(dispatch_get_main_queue(), { 

     if success { 
      let alert = UIAlertController(title: "Success", message: "", cancelButtonTitle: "Great!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 

     if let error = error { 
      var message :String 

      switch(error.code) { 
      case LAError..AuthenticationFailed: 
       message = "There was a problem verifying your identity." 
      case LAError..UserCancel: 
       message = "You pressed cancel." 
      case LAError..UserFallback: 
       message = "You pressed password." 
      default: 
       message = "Touch ID may not be configured" 
      } 

      let alert = UIAlertController(title: "Error", message: message, cancelButtonTitle: "Darn!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 
    }) 
}) 

Ama sonra evaluatePolicy (localizedReason :, cevap :) herhangi parmak izi talep etmeden başarı döndürür. Aslında etkinleştirerek veya devre dışı bıraktıktan sonra bu yüzden, bir UISwitch ile TouchID devre dışı bırakma ve etkinleştirme yeniden ediyorum , ben yeniden kimlik doğrulaması ister ve benim parmak izi girmek yeniden istiyorum.

Neden kimlik önbelleğe?

Teşekkür kez değerlendirilen

+0

bir başka sanki hatayı ekleyin ve ne olduğunu görün. – Konsy

+0

Hata sıfır. Politikayı ilk kez değerlendirdiğimde, düğmeye basmaya gerek kalmadan başarı ve hata alıyorum. –

+0

Hata yaparsanız deneyin! = Nil yerine – Konsy

cevap

14

LAContext, bu ayırmanın edilene kadar başarı dönecektir. Bunu el ile geçersiz kılabilir ve sonra döndürülen hata LAError.InvalidContext olur.

Her seferinde bir TouchID onaylaması istenirse, her seferinde bir LAContext oluşturmanız gerekir. Bu IOS 9 yana

context.evaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, localizedReason: "Logging in with Touch ID", reply: { (success : Bool, error : NSError?) -> Void in 
     dispatch_async(dispatch_get_main_queue(), { 

     if success { 
      let alert = UIAlertController(title: "Success", message: "", cancelButtonTitle: "Great!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 

     if let error = error { 
      var message :String 

      switch(error.code) { 
      case LAError..AuthenticationFailed: 
       message = "There was a problem verifying your identity." 
      case LAError..UserCancel: 
       message = "You pressed cancel." 
      case LAError..UserFallback: 
       message = "You pressed password." 
      default: 
       message = "Touch ID may not be configured" 
      } 

      let alert = UIAlertController(title: "Error", message: message, cancelButtonTitle: "Darn!") 
      self.presentViewController(alert, animated: true, completion: nil) 
     } 

     context = LAContext() 
    }) 
}) 
+0

Harika bir cevap, durumu temizledi, teşekkürler. Apple dokümanlarında bu konuyla ilgili bir kelime bulunmuyor ve şu şekilde ifade edilmiyor: "Önceki başarılı bir politika değerlendirmesinin, gelecekteki değerlendirmelerin de başarılı olacağı anlamına gelmediğini varsayın. Politika değerlendirmesi, kullanıcı tarafından iptal etme de dahil olmak üzere çeşitli nedenlerle başarısız olabilir. sistem" gerçekten kafa karıştırıcı. – Dren

3

elde edilebilir bağlamda

dokunun ID kimlik doğrulama yeniden izin olduğu süre için touchIDAuthenticationAllowableReuseDuration vardır. Cihaz başarılı bir şekilde belirlenen bir zaman aralığı içinde dokunun kimliğini kullanarak kimlik doğrulaması varsa , o zaman alıcı için kimlik doğrulama dokunun numarası için kullanıcının uyarılmasından olmaksızın otomatik olarak başarılı olur. Varsayılan değer 0'dır; bu, Touch ID kimlik doğrulamasının yeniden kullanılamayacağı anlamına gelir. Dokunmatik ID kimlik doğrulama yeniden kullanım için izin verilen maksimum süre LATouchIDAuthenticationMaximumAllowableReuseDuration sabiti ile belirtilir. Bu özelliği, bu sabitden daha büyük bir değere ayarlayarak daha uzun bir süre belirtebilirsiniz. Durumu iOS (9.0 ve üstü), MacOS (10.12 ve sonrası) kullanıcı başarıyla dokunuş geçti eğer, 60

context.touchIDAuthenticationAllowableReuseDuration = 60 

Bu otomatik kontrol etmeden başarılı olur örneğin ayarlarsanız

son 60 saniyede kontrol ediliyor.

Böylece, size uygun olan değere ayarlayabilirsiniz. Bunu çok iyi buluyorum ve sadece birkaç saniye önce (örneğin ekranın kilidini açmak için) kullanıcının tekrar dokunmasını istemek can sıkıcı.

0

Aynı sorun bakıyordu ama sonra aşağıdaki gibi süre değeri arttı:

context.touchIDAuthenticationAllowableReuseDuration = Double(5 * 60) // 5 min, 

Bu çözüm benim için çalıştı.

+0

maksimum İzin zaman aralığıdır çünkü. Sabit LATouchIDAuthenticationMaximumAllowableReuseDuration kullanmış olabilir Onun değeri yalnızca 5 dk. –

İlgili konular