LAContext evaluatePolicy并不总是提示用户

时间:2016-01-29 21:14:23

标签: xcode7 touch-id

在我的iOS 7 iPad应用程序中LAContext:evaluatePolicy有时返回SUCCESS而不提示用户触摸ID按钮。 Apple文档称“评估策略可能涉及提示用户......”。

我的身份验证策略设置为LAPolicyDeviceOwnerAuthenticationWithBiometrics,这是我看到的唯一选择。为什么每次调用evaluatePolicy时都不会提示用户触摸ID按钮?有没有办法可以要求这种行为?

4 个答案:

答案 0 :(得分:4)

我遇到过类似的问题。 您可能正在声明一个类似

的全局变量
let authenticationContext = LAContext()

然后在类方法和函数中使用authenticationContext。

我已经开始在我使用它的每个函数中声明常量,如

func someAuthFunc() {
let authenticationContext = LAContext()
...

我的问题解决了。 每次我请求evaluateForContext时都会被问到......

我希望这会有所帮助。

干杯

答案 1 :(得分:2)

针对有相同问题的人

它仅在iOS 13及更高版本上发生。解决方案尝试像这样两次调用evaluate函数:

let systemVersion = UIDevice.current.systemVersion
// Trick here: Try to do a pre-evaluate
if systemVersion.compare("13.0", options: .numeric) != .orderedAscending {
    context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to open the app", reply: { (_, _) in
         //Ignore callback here
     })
}

context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: "Authenticate to open the app", reply: { (success, error) in
    // Handle callback here
})

到目前为止,已针对所有iOS 13.x.x版本进行了测试并正常运行。

答案 2 :(得分:0)

iOS13更新后,我遇到相同的问题。这不是一个很好的解决方法,但是两次调用评价策略为我解决了这个问题

print(dd.loc[set(dd.index) - set(dd.query('prop1 == False and prop2 == False and prop3 == False ').index), :])

    file  prop1  prop2  prop3
0  file1   True  False  False
1  file2  False  False   True
3  file4  False  False   True
5  file6  False  False   True
7  file8  False   True  False
8  file9  False  False   True

答案 3 :(得分:0)

这似乎是iOS 13、13.1上的错误,并计划在13.2中修复。我建议您在iOS 13.2 Beta上尝试您的代码,看看它是否更好。

来源:iOS 13 Touch ID Delay/Bug