首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在用户拒绝faceID后检测LAPolicy.deviceOwnerAuthentication禁用

在用户拒绝faceID后检测LAPolicy.deviceOwnerAuthentication禁用
EN

Stack Overflow用户
提问于 2021-10-24 21:37:47
回答 2查看 580关注 0票数 1

是否有方法检测用户在使用"LAContext().evaluatePolicy(.deviceOwnerAuthentication,localizedReason: someReason后是否拒绝了生物识别技术(faceID)“?

例如,

biometrics

  • User

  • 用户第一次登录时,如果应用程序可以使用其
  1. 生物特征,则提示用户输入密码
  2. 用户拒绝密码

在关闭并重新打开应用程序之前,"LAContext().canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,error: nil)似乎canEvaluatePolicy返回true )。

我希望能够提醒用户,他们可以在他们的应用程序设置中打开faceID。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-25 02:49:38

似乎没有办法确定你在问题中所描述的情况。

我注意到,canEvaluatePolicy的文档声明:

不存储此方法的返回值,因为它可能由于系统中的更改而发生更改。例如,用户在调用此方法后可能会禁用Touch ID。但是,在应用程序进入后台之前,报告的值确实保持一致。

然而,在测试中,即使将应用程序放到后台也不会改变canEvaluatePolicy返回的值。

正如您在问题中所指出的,在重新启动应用程序之前,返回的值不会改变。您还会看到,如果您进入首选项并切换您的应用程序的生物特征设置,那么您的应用程序实际上是重新启动的。同样的过程也发生在其他与隐私相关的设置上。

您可以在随后的发布中提供生物识别认证,如果您确定它已被拒绝,但当用户已经做出决定时,您应该谨慎地注意窃听用户。

您可以使用的另一种方法是尝试LAContext().evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "reason"),如果由于生物特征识别被拒绝而失败,请使用LAContext().evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "reason")重试身份验证,这将立即提示输入密码。

票数 1
EN

Stack Overflow用户

发布于 2021-10-24 22:42:45

代码语言:javascript
运行
复制
// Declare You're own Error type to handle possible errors
enum BiometryError: Swift.Error, LocalizedError {
    case unavailable, // Biometry unavailable
         failed,      // Can't verify
         cancel,      // User pressed cancel
         failback,    // User choose password
         locked,      // Biometry is locked
         enrolled,    // Biometry not setup
         succsess     // Success

    init(error: LAError) {
        switch error {
        case LAError.authenticationFailed:
            self = .failed
        case LAError.userCancel:
            self = .cancel
        case LAError.userFallback:
            self = .failback
        case LAError.biometryNotAvailable:
            self = .unavailable
        case LAError.biometryNotEnrolled:
            self = .enrolled
        case LAError.biometryLockout:
            self = .locked
        default:
            self = .unavailable
        }
    }
    
    public var errorDescription: String? {
        switch self {
        case .unavailable:
            return "Unavailable"
        case .failed:
            return "Failed"
        case .cancel:
            return "Cancel"
        case .failback:
            return "Failback"
        case .locked:
            return "Locked"
        case .enrolled:
            return "Enrolled"
        case .succsess:
            return "Succsess"

        }
    }
}



    // Authenticate method
    func authenticateBiometry(reply callback: @escaping (Bool, BiometryError?) -> Void) {
            
        LAContext().evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "reason") { success, error in
            if let error = error as? LAError, !success {
                // Here in this callback You can handle error and show alert if You want
                callback(false, BiometryError(error: error))
            } else  {
                // Success
                callback(true, nil)
            }
        }

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69700953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档