使用PIN后备触摸ID API

时间:2014-09-25 16:28:38

标签: ios objective-c ios8 keychain touch-id

我们正在开发一个应用程序,我们使用Touch ID从钥匙串中读取秘密。

我们发现,当您在上一次读取后立即从 中读取时,如果第一次使用PIN码读取密码,则读取将不会第二次返回字符串值。如果用户第一次使用指纹,则第二次显示Touch ID对话框,另一次读取成功。

以下是一个示例应用程序:https://github.com/cnandreu/KeychainTouchIdError

以下是使用KeychainTouchIdError演示应用程序的一些场景。这些必须在运行iOS 8且带有触摸ID传感器的真实设备上执行。使用模拟器时,所有方案都按预期工作,因为从不显示Touch ID对话框。

情景1(正常工作)

  • 将值存储在受保护的钥匙串中 kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly。
  • 从钥匙串读取, 使用指纹解锁。
  • 没有延迟。
  • 从钥匙串中读取,使用 指纹或PIN码解锁。

场景2(在设备上已损坏):

  • 将值存储在受kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly保护的钥匙串中。
  • 从钥匙串中读取,使用PIN解锁。
  • 没有延迟。
  • 从钥匙串中读取。使用设备时,不显示触摸ID对话框,并从钥匙串返回空字符串。但是,使用模拟器时,会正确检索存储在钥匙串中的值。

场景3(正常工作):

  • 将值存储在受kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly保护的钥匙串中。
  • 从钥匙串中读取,使用PIN解锁。
  • 等待500ms。
  • 从钥匙串中读取。向用户显示一个对话框,可以在使用指纹或PIN后再次读取密码。

演示应用程序中可用的按钮

保存 - 为受kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly保护的钥匙串写一个秘密。

阅读 - 从钥匙串中读取一个秘密。

删除 - 从钥匙串中删除秘密。

快速 - 用于执行方案1和2.

快速延迟 - 用于执行方案3.

评论

我们最好的猜测是PIN解锁的动画,即向下滑动并持续约250毫秒,正在干扰第二次读取。使用指纹解锁时没有动画。这只是猜测。

有关我们为何遇到方案2问题的任何想法?是否需要做任何事情来等待钥匙串再次“可读”?

0 个答案:

没有答案