gpt4 book ai didi

ios - Face ID 评估过程无法正常工作

转载 作者:搜寻专家 更新时间:2023-10-30 22:07:15 24 4
gpt4 key购买 nike

我正在尝试获取 Face ID 或 Touch ID 在下面的功能中是否成功

func authenticate() -> Bool{

let context = LAContext()
var error: NSError?

guard context.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error) else {
return false
}
var returnValue = false
let reason = "Face ID authentication"
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: reason)
{
isAuthorized, error in
guard isAuthorized == true else {
return print(error)
}
returnValue = true
print("success")
}
return returnValue
}

但即使此代码成功,它也会跳过稍后传递的 returnValue = true,这会导致返回错误。为什么会这样?以及如何修复此代码以使其像预期的那样工作?

以上代码来自this link以防万一有人在看,谢谢。

最佳答案

Touch ID & Face ID LocalAuthentication 工作代码

(swift 4.0 & 5.0+代码)

Note : Privacy - Face ID Usage Description key add in Info.plist

使用

self.Authenticate { (success) in
print(success)
}

本地认证功能

import LocalAuthentication

func Authenticate(completion: @escaping ((Bool) -> ())){

//Create a context
let authenticationContext = LAContext()
var error:NSError?

//Check if device have Biometric sensor
let isValidSensor : Bool = authenticationContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, error: &error)

if isValidSensor {
//Device have BiometricSensor
//It Supports TouchID

authenticationContext.evaluatePolicy(
.deviceOwnerAuthenticationWithBiometrics,
localizedReason: "Touch / Face ID authentication",
reply: { [unowned self] (success, error) -> Void in

if(success) {
// Touch / Face ID recognized success here
completion(true)
} else {
//If not recognized then
if let error = error {
let strMessage = self.errorMessage(errorCode: error._code)
if strMessage != ""{
self.showAlertWithTitle(title: "Error", message: strMessage)
}
}
completion(false)
}
})
} else {

let strMessage = self.errorMessage(errorCode: (error?._code)!)
if strMessage != ""{
self.showAlertWithTitle(title: "Error", message: strMessage)
}
}

}

使用消息处理错误代码

//MARK: TouchID error
func errorMessage(errorCode:Int) -> String{

var strMessage = ""

switch errorCode {

case LAError.Code.authenticationFailed.rawValue:
strMessage = "Authentication Failed"

case LAError.Code.userCancel.rawValue:
strMessage = "User Cancel"

case LAError.Code.systemCancel.rawValue:
strMessage = "System Cancel"

case LAError.Code.passcodeNotSet.rawValue:
strMessage = "Please goto the Settings & Turn On Passcode"

case LAError.Code.biometryNotAvailable.rawValue:
strMessage = "TouchI or FaceID DNot Available"

case LAError.Code.biometryNotEnrolled.rawValue:
strMessage = "TouchID or FaceID Not Enrolled"

case LAError.Code.biometryLockout.rawValue:
strMessage = "TouchID or FaceID Lockout Please goto the Settings & Turn On Passcode"

case LAError.Code.appCancel.rawValue:
strMessage = "App Cancel"

case LAError.Code.invalidContext.rawValue:
strMessage = "Invalid Context"

default:
strMessage = ""

}
return strMessage
}

显示警告消息

//MARK: Show Alert
func showAlertWithTitle( title:String, message:String ) {
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)

let actionOk = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(actionOk)
self.present(alert, animated: true, completion: nil)
}

关于ios - Face ID 评估过程无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52092990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com