我写了下面的代码片段
if ([contextNew canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error])
{
[contextNew evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:NSLocalizedString(@"",nil) reply:^(BOOL success, NSError *error)
{
if(success)
{
}
else
{
}
}
}
人脸验证后进入成功 block 。我想处理人脸ID权限警报。 我想获得 face id 的 Yes 或 permission granted 方法。 当我们得到像相机的 AVAuthorizationStatus 之类的东西时
最佳答案
不确定,这是否能解决您的问题,但我有以下选项来检测 LAAuthentication
错误类型(在 Swift 中,您需要将其转换为 Objective-C)
laContext.evaluatePolicy(biometricsPolicy, localizedReason: localizedReason, reply: { (isSuccess, error) in
if let laError = error {
// handle error
self.showLAError(laError: laError)
} else if isSuccess {
// handle success
}
})
// function to detect an error type
func showLAError(laError: Error) -> Void {
var message = ""
switch laError {
case LAError.appCancel:
message = "Authentication was cancelled by application"
case LAError.authenticationFailed:
message = "The user failed to provide valid credentials"
case LAError.invalidContext:
message = "The context is invalid"
case LAError.passcodeNotSet:
message = "Passcode is not set on the device"
case LAError.systemCancel:
message = "Authentication was cancelled by the system"
case LAError.touchIDLockout:
message = "Too many failed attempts."
case LAError.touchIDNotAvailable:
message = "TouchID is not available on the device"
case LAError.userCancel:
message = "The user did cancel"
case LAError.userFallback:
message = "The user chose to use the fallback"
default:
if #available(iOS 11.0, *) {
switch laError {
case LAError.biometryNotAvailable:
message = "Biometry is not available"
case LAError.biometryNotEnrolled:
message = "Authentication could not start, because biometry has no enrolled identities"
case LAError.biometryLockout:
message = "Biometry is locked. Use passcode."
default:
message = "Did not find error code on LAError object"
}
}
message = "Did not find error code on LAError object"
}
//return message
print("LAError message - \(message)")
}
Here is list of all types of LAError for Objective-C
编辑:
如果您正在尝试使用模拟器,请在此处查看如何测试 Face-Id:
这是有效的 Objective-C 代码。试试看:
LAContext *laContext = [[LAContext alloc] init];
NSError *error;
if ([laContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
if (error != NULL) {
// handle error
//[self showError:error];
} else {
if (@available(iOS 11.0.1, *)) {
if (laContext.biometryType == LABiometryTypeFaceID) {
//localizedReason = "Unlock using Face ID"
NSLog(@"FaceId support");
} else if (laContext.biometryType == LABiometryTypeTouchID) {
//localizedReason = "Unlock using Touch ID"
NSLog(@"TouchId support");
} else {
//localizedReason = "Unlock using Application Passcode"
NSLog(@"No Biometric support");
}
} else {
// Fallback on earlier versions
}
[laContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Test Reason" reply:^(BOOL success, NSError * _Nullable error) {
if (error != NULL) {
// handle error
} else if (success) {
// handle success response
} else {
// handle false response
}
}];
}
}
关于ios - 如何处理人脸ID权限提醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48866336/