2016-07-14 19 views
7

Tôi có cài đặt LocalAuthentication sau đây như được mô tả ở nhiều nơi.TouchID activateTouchWithResponse trả về thành công mà không yêu cầu dấu vân tay

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) 
     } 
    }) 
}) 

Nhưng sau khi tôi đã xác thực thành công bằng vân tay của mình, sau đó đánh giáPolicy (, localizedReason :, reply :) trả về thành công mà không yêu cầu bất kỳ vân tay nào. Tôi thực sự đang bật hoặc tắt TouchID bằng UISwitch, vì vậy sau khi tắt và bật lại, tôi muốn xác thực lại và nhập lại vân tay của mình.

Tại sao bộ đệm ẩn trong xác thực?

Cảm ơn

+0

thêm lỗi làm người khác nếu và xem điều gì xảy ra. – Konsy

+0

Lỗi là không. Lần thứ hai tôi đánh giá chính sách tôi nhận được thành công và lỗi mà không được nhắc chạm vào nút. –

+0

Hãy thử làm nếu lỗi! = Nil thay vì – Konsy

Trả lời

14

LACextext, once evaluation, will return success cho đến khi nó được deallocated. Bạn có thể tự vô hiệu hóa nó và sau đó lỗi trả về sẽ là LAError.InvalidContext.

Nếu bạn muốn được nhắc với xác nhận TouchID mỗi lần, bạn cần phải tạo LAContext mỗi lần. Điều này có thể đạt được

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

Câu trả lời tuyệt vời, nó xóa tình hình, cảm ơn. Không có bất kỳ từ nào về tài liệu này trong tài liệu của Apple và cụm từ: "Đừng cho rằng đánh giá chính sách thành công trước đó có nghĩa là các đánh giá trong tương lai cũng sẽ thành công. hệ thống." thực sự khó hiểu. – Dren

3

Kể từ ios 9 có touchIDAuthenticationAllowableReuseDuration cho bối cảnh

Thời gian mà tái sử dụng xác thực Touch ID là cho phép. Nếu thiết bị được xác thực thành công bằng cách sử dụng ID cảm ứng trong khoảng thời gian được chỉ định, khi đó xác thực cho người nhận sẽ tự động thành công mà không cần nhắc người dùng chạm vào ID. Giá trị mặc định bằng 0, nghĩa là không thể sử dụng lại xác thực ID cảm ứng. Thời lượng tối đa cho phép để tái sử dụng xác thực ID Touch được xác định bởi hằng số LATouchIDAuthenticationMaximumAllowableReuseDuration. Bạn không thể chỉ định thời lượng dài hơn bằng cách đặt thuộc tính này thành giá trị lớn hơn hằng số này. iOS Availability (9.0 và mới hơn), hệ điều hành MacOS (10.12 và sau đó)

nếu bạn đặt cho ví dụ để 60

context.touchIDAuthenticationAllowableReuseDuration = 60 

Nó sẽ tự động thành công mà không kiểm tra, nếu người dùng đã thành công thông qua các liên lạc kiểm tra id trong 60 giây qua.

Vì vậy, bạn có thể đặt thành giá trị mà suite bạn. Tôi tìm thấy nó rất tốt và nó gây phiền nhiễu để yêu cầu người dùng chạm vào một lần nữa trong khi ông chỉ làm điều đó một vài giây trước đây (để mở khóa màn hình ví dụ).

0

tôi đã phải đối mặt với cùng một vấn đề nhưng sau đó tôi tăng giá trị thời gian như sau:

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

Giải pháp này làm việc cho tôi.

+0

Bạn có thể đã sử dụng hằng số LATouchIDAuthenticationMaximumAllowableReuseDuration vì nó là khoảng thời gian cho phép tối đa. Giá trị của nó chỉ là 5 phút. –

Các vấn đề liên quan