FaceID/TouchID成功案例不断提示进一步认证

Posted

技术标签:

【中文标题】FaceID/TouchID成功案例不断提示进一步认证【英文标题】:FaceID/TouchID success case keeps prompting for further authentication 【发布时间】: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,你能找到解决这个问题的方法吗? 【参考方案1】:

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

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

【讨论】:

啊,有趣!谢谢【参考方案2】:

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

【讨论】:

我更新了我原来的问题来解决你的问题

以上是关于FaceID/TouchID成功案例不断提示进一步认证的主要内容,如果未能解决你的问题,请参考以下文章

学会享受孤独是通往成功的第一步(转)

NativeScript Sidekick Publishing IOS 不断提示输入密码

WPF实现新手提示功能

更安全更易用?苹果测试“新版无密码认证功能”

激活win8提示“激活服务器指定的产品密匙已被阻止”。表示密钥和地址都是成功了的,就最后一步提示这个错

缴税刷卡提示未接到TIPS应答