我正在开发使用触摸 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
}
然后在 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()
}
}
问题是一些测试人员报告说他们根本没有收到 TouchID 警报。它只是立即显示密码屏幕。我添加了错误日志记录,我收到的错误是:
Domain: com.apple.LocalAuthentication Code: -1004 NSLocalizedDescription: User interaction is required.
而且我根本无法重现它。 Touch ID 在我所有的测试设备上都能正常工作,所以我不明白这是为什么。 错误来自 iPhone 6、6S、6s Plus、iOS 9.3.1-9.3.3。
最佳答案
即使您的应用程序位于前台,iOS 10 也会发生这种情况。正如 Android Noob 在其中一条评论中提到的那样。
我做了进一步调查,发现当您有多个应用程序具有相同的产品/可执行文件名称时,就会发生这种情况。
在我的场景中,我有同一个应用程序(代码)的 3 个版本,它们具有不同的包标识符和显示名称。其中只有一个,即最后安装的一个,可以使用 Touch ID。其他人返回“需要用户交互错误”。
关于 OP 的问题。测试人员很可能在他们的设备上安装了另一个具有相同可执行名称的应用程序。这可能是您应用的另一个版本或其他开发者的应用。
要避免此问题,请更改您的可执行文件或产品名称:Targets -> [Your Target Name] -> Build Settings -> Packaging -> Product Name
我的测试和发现:
给定 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 有效
关于ios - TouchID 错误代码 : -1004 NSLocalizedDescription: User interaction is required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38854052/