2017-09-13 16 views
5

Tôi đang chạy Xcode 9 GM mới nhất (13/09/2017) và đã đặt Hardware > Face ID > Enrolled trong trình mô phỏng cũng như Deployment Target 11.0. Tuy nhiên tôi nhận được mã lỗi -6 LAErrorTouchIDNotAvailable.iOS 11 Simulator không cho phép LAContext và FaceID

Có một số cài đặt tôi bị thiếu không?

let myContext = LAContext() 
let myLocalizedReasonString = "You are pretty" 

var authError: NSError? 
if #available(iOS 8.0, macOS 10.12.1, *) { 
    if myContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &authError) { 
     myContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: myLocalizedReasonString) { success, evaluateError in 
      if success { 

       print("// User authenticated successfully, take appropriate action") 
      } else { 
       print(" // User did not authenticate successfully, look at error and take appropriate action") 
      } 
     } 
    } else { 
     print(" // Could not evaluate policy; look at authError and present an appropriate message to user") 
    } 
} else { 
    print(" // Fallback on earlier versions") 
} 
+0

sử dụng thư viện này, nó hỗ trợ faceid và touchid cả . https://github.com/tejas-ardeshna/TJBioAuthentication –

Trả lời

8

ID khuôn mặt không hoạt động trong Xcode 9 GM do lỗi khuôn khổ. Xcode 9.1 khắc phục sự cố này.

Bạn có thể thử nghiệm ứng dụng của mình trong trình mô phỏng iPhone 8 và đảm bảo ứng dụng hoạt động chính xác với Touch ID hoặc chạy phiên bản Xcode 9.1 beta và kiểm tra hỗ trợ Face ID tại đó.

1

XCode 9.1 beta ra mắt hôm nay, trong đó mã gốc sẽ hoạt động hoàn hảo trong trình mô phỏng!

1

Theo tài liệu của Apple cho LAContext, chúng ta cần thêm khóa NSFaceIDUsageDescription với lý do sử dụng String, vì điều này sẽ hiển thị yêu cầu ủy quyền cho việc sử dụng FaceId trên thiết bị.

Ví dụ thêm video này vào Info.plist:

NSFaceIDUsageDescription 

thiết lập nó để gõ String, và thêm một văn bản mà bạn muốn được hiển thị, trong yêu cầu nhanh chóng để truy cập vào camera Face ID.

"Your app" request your permission to use Face ID, for you to login to your account/unlock your notes/what ever reason in the end. 

Bằng cách thêm điều này, bạn có thể đi tới trình mô phỏng cho iPhone X và bạn sẽ được nhắc nhập ID khuôn mặt, nhấn chấp nhận và mọi thứ sẽ hoạt động hoàn hảo.

Hãy nhớ để ghi danh hỗ trợ sinh trắc học cho giả lập bằng cách vào Simulator -> Hardware -> Face ID/Touch ID -> Enrolled

Sau đó, bạn chỉ cần nhấn Match/Non-Matching Touch/Face ID, để kiểm tra xử lý của bạn

Để biết thêm chi tiết và kiểm tra tài liệu của Apple: https://developer.apple.com/documentation/localauthentication/lacontext

---- Chỉnh sửa ----

Điều này làm việc cho tôi trong cả Xcode 9.0 và 9.1

2

ID khuôn mặt hiện đang hoạt động với Xcode 9.1. Làm theo các bước sau để kiểm tra nó trong Simulator.

Thêm tuyên bố bảo mật trong tệp info.plist của mục tiêu của bạn.

enter image description here

nhập LocalAuthentication khuôn khổ dự án của bạn và thêm đoạn mã sau để điều khiển xem của bạn và thử với FaceID

import LocalAuthentication 

class ViewController: UIViewController { 


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



    func localAuthentication() -> Void { 

     let laContext = LAContext() 
     var error: NSError? 
     let biometricsPolicy = LAPolicy.deviceOwnerAuthenticationWithBiometrics 

     if (laContext.canEvaluatePolicy(biometricsPolicy, error: &error)) { 

      if let laError = error { 
       print("laError - \(laError)") 
       return 
      } 

      var localizedReason = "Unlock device" 
      if #available(iOS 11.0, *) { 
       if (laContext.biometryType == LABiometryType.faceID) { 
        localizedReason = "Unlock using Face ID" 
        print("FaceId support") 
       } else if (laContext.biometryType == LABiometryType.touchID) { 
        localizedReason = "Unlock using Touch ID" 
        print("TouchId support") 
       } else { 
        print("No Biometric support") 
       } 
      } else { 
       // Fallback on earlier versions 
      } 


      laContext.evaluatePolicy(biometricsPolicy, localizedReason: localizedReason, reply: { (isSuccess, error) in 

       DispatchQueue.main.async(execute: { 

        if let laError = error { 
         print("laError - \(laError)") 
        } else { 
         if isSuccess { 
          print("sucess") 
         } else { 
          print("failure") 
         } 
        } 

       }) 
      }) 
     } 


    } 
} 


xác thực FaceID sẽ nhắc bạn cho lần đầu tiên cho phép FaceID phát hiện ứng dụng của bạn.

enter image description here


Bây giờ cho phép tuyển sinh ID khuôn mặt và chạy ứng dụng của bạn để kiểm tra Face ID nghiệm mô phỏng.

enter image description here

Dưới đây là kết quả mô phỏng cho phù hợp và không phù hợp với khuôn mặt.

Kết quả cho phù hợp với khuôn mặt:

enter image description here


Kết quả cho khuôn mặt không phù hợp:

enter image description here

+1

Nó hoạt động hoàn toàn tốt –

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