TouchID错误代码:-1004 NSLocalizedDescription:需要用户交互

A. *_*sha 2 ios touch-id swift

我正在使用触摸ID登录的应用程序.它应该仅在首次启动时询问触摸ID(即,当应用程序从后台输入前景时,我不要求触摸ID身份验证).以下是我展示touchID的方法:

AppDelegate.swift:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
   let loginViewController = storyboard.instantiateViewControllerWithIdentifier("login") as! LoginViewController
   rootViewController = loginViewController
   let navigationController = UINavigationController(rootViewController: rootViewController)
   window!.rootViewController = navigationController
}
Run Code Online (Sandbox Code Playgroud)

然后在LoginViewController的viewDidAppear()中我要求触摸如下:

LoginViewController.swift:

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    let context = LAContext()
    if context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics, error: nil) {
       context.evaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics,
                                       localizedReason: NSLocalizedString("Login To Your Account", comment: ""),
                                       reply: { [weak self] (success, error) in
          dispatch_async(dispatch_get_main_queue(), {
             if success {
                self?.loginUser()
             } else if error!.code != LAError.UserCancel.rawValue {
                self?.focusOnPassword()
             } else 
          })
       })
    } else {
       loginUser()
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是一些测试人员报告他们根本没有获得TouchID警报.它只是显示密码屏幕立即显示.我添加了错误记录,我收到的错误是:

Domain: com.apple.LocalAuthentication Code: -1004 NSLocalizedDescription: User interaction is required.
Run Code Online (Sandbox Code Playgroud)

我根本无法重现它.Touch ID在我的所有测试设备上都能正常工作,所以我无法理解.从iPhone 6,6S,6s Plus,iOS 9.3.1-9.3.3收到错误.

Ste*_*ert 12

即使您的应用程序位于前台,这也会发生在iOS 10上.正如Android Noob在其中一篇评论中提到的那样.

我做了进一步调查,发现当你有多个具有相同产品/可执行文件名称的应用程序时会发生这种情况.

在我的场景中,我有3个版本的相同应用程序(代码),具有不同的包标识符和显示名称.其中只有一个,即安装的最后一个,使用Touch ID.其他人返回了"用户交互必需错误".

关于OP的问题.测试人员可能在其设备上安装了另一个具有相同可执行文件名称的应用程序.这可能是您的应用程序的另一个版本或其他开发人员的应用程序.

要解决此问题,请更改您的可执行文件或产品名称:目标 - > [您的目标名称] - >构建设置 - >包装 - >产品名称

我的测试和发现:

鉴于3个具有相同代码和产品名称但不同的捆绑ID和显示名称的应用程序:CI,UAT和Prod.

安装CI:

  • CI - Touch ID有效

安装UAT:

  • UAT - Touch ID有效
  • CI - Touch ID因"需要用户交互"错误而失败

安装产品:

  • 产品 - Touch ID有效
  • UAT - Touch ID因"需要用户交互"错误而失败
  • CI - Touch ID因"需要用户交互"错误而失败

卸载产品:

  • UAT - Touch ID有效(但似乎丢失了上下文,因为它没有显示应用名称)
  • CI - Touch ID有效(但似乎丢失了上下文,因为它没有显示应用名称)

卸载UAT和CI,重新安装CI:

  • CI - Touch ID有效

更改UAT产品名称并安装UAT:

  • CI - Touch ID有效
  • UAT - Touch ID有效