【问题标题】:FaceID/TouchID success case keeps prompting for further authenticationFaceID/TouchID成功案例不断提示进一步认证
【发布时间】:2018-01-25 19:25:21
【问题描述】:

我已经在视图控制器上实现了密码/TouchID/FaceID,当我遇到成功案例时,我希望提示停止触发,但它只是一遍又一遍地触发。

在我的 VC 中:

var context: LAContext!

func authenticateReturningUser() {
    context = LAContext()
    var error: NSError?

    if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error) {
        let reason = "Verify that this is your device to continue."

        context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason) { success, error in
            DispatchQueue.main.sync {
                guard success else {
                    guard let error = error else {
                        // show error
                        return
                    }

                    switch error {
                    case LAError.userCancel:
                        // do stuff
                        return
                    default: return
                    }
                }

                print("success")
            }
        }
    }
}

如果用户成功授权,提示应该触发一次,而不是再次触发

编辑

authenticateReturningUser 从 AppDelegate 的 applicationDidBecomeActive 函数中调用:

self.coverVC?.completionHandler = { self.removeBackgroundVC() }
self.coverVC?.authenticateReturningUser()

【问题讨论】:

  • 嗨,Zack,你能找到解决这个问题的方法吗?

标签: ios swift uikit localauthentication


【解决方案1】:

据我所知,当显示 Touch ID 提示时,您的应用会变为非活动状态。因此,当提示消失时,您的应用会再次激活,再次触发 App Delegate 的 applicationDidBecomeActive

您可以考虑引入一个标志来存储应用程序是否因为 Touch ID/Face ID 等或其他原因而变得不活动,并在 applicationDidBecomeActive 中使用它来决定是否应该触发身份验证。

【讨论】:

  • 啊,有趣!谢谢
【解决方案2】:

你在哪里打电话给authenticateReturningUser()?您可能希望创建一个静态布尔值authenticated,如果为 false,则允许调用 authenticateReturningUser(),如果为 true,则跳过调用,并在调用函数一次后设置 authenticated = true

【讨论】:

  • 我更新了我原来的问题来解决你的问题
猜你喜欢
  • 2019-04-03
  • 2022-11-10
  • 1970-01-01
  • 2020-02-14
  • 2020-11-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多