【问题标题】:Touch ID Authentication alert display everytime in new UIViewController每次在新的 UIViewController 中显示 Touch ID 身份验证警报
【发布时间】:2016-05-12 05:38:00
【问题描述】:

我在我的应用程序中使用 LocalAuthentication 进行 Touch ID 身份验证,但在每个 UIViewController 中都会显示 Touch ID 警报以进行身份​​验证,那么如何在 UIViewController 中只调用一次?

【问题讨论】:

  • 您的问题对我来说是半清楚的,请分享导致此问题的流程和代码。您是否为此使用任何第三方库?
  • 这是我的代码,我只在一个视图控制器中实现,但显示在每个视图控制器中,dpaste.de/eNd4@Hemang
  • 这段代码是用超类写的吗?正如你所说,它每次都在不同的视图控制器中调用?
  • 只在登录控制器中的viewWillAppear方法中编写此代码,但是当登录完成时,它再次要求在每个视图控制器中进行身份验证..@Hemang

标签: ios objective-c iphone touch-id


【解决方案1】:

您只需创建一个BOOL 变量并将appDelegate 中的值设置为FALSE,然后在一个视图控制器中进行身份验证时,将BOOL 变量的值更新为TRUE。在每个 viewController 中检查 BOOL 变量是否是 TRUEFALSE 并相应地编码。

【讨论】:

    【解决方案2】:

    使用这个为简化您的使用而编写的简单 API:

    import UIKit
    import LocalAuthentication 
    
    typealias completionHandler = (evaluationComplete: Bool) -> ()
    
    
    func showTouchID(Reason reason: String, _ shouldShow: Bool, SuperDone : completionHandler){
    
        guard shouldShow == true else{
            return
        }
    
        let bike = LAContext()
    
        guard bike.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil) else{
    
            SuperDone(evaluationComplete: false)
            return
    
    
        bike.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, localizedReason: reason) {(_, error) in
    
            dispatch_async(dispatch_get_main_queue(), {
    
            guard error != nil else{
                SuperDone(evaluationComplete: false)
                return
            }
    
        SuperDone(evaluationComplete: true)
            })
    }
    }
    

    随心所欲地使用它:

    showTouchID(Reason: "Are", true){ success in
    
        if success{
    
        }
    
        else{
    
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2023-01-26
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多