xcode - 如何在 Swift 中添加解锁屏幕或使用 TouchID with Security?

标签 xcode swift ios8

我正在使用此安全代码在我的应用中添加解锁屏幕:

 self.keyChainQuery = [
        kSecClass              : kSecClassGenericPassword,
        kSecAttrService        : serviceIdentifier,
        kSecAttrAccount        : accountName,
        kSecMatchLimit         : kSecMatchLimitOne]
  var extractedData: Unmanaged<AnyObject>? = nil

  let status = SecItemCopyMatching(self.keyChainQuery, &extractedData)

如果设备有解锁码,则使用此解锁码。如果设备有 TouchID,则检测 TouchID。

如何设置我想在 TouchID 和 PassCode 之间使用的类型?

谢谢!

最佳答案

TouchID 和设备密码彼此非常不同。 TouchID 实际上只是一种更方便的用户身份验证方式,无需他们输入密码。此密码与解锁设备时使用的密码不同,而是解锁您的应用程序时使用的密码。这意味着如果您的 App 中已经有某种类型的身份验证系统,则可以添加 TouchID 以防止用户每次都手动登录。

另一方面,钥匙串(keychain)是您用来存储敏感信息(如用户登录凭据)的工具。在钥匙串(keychain)中,您可以指定钥匙串(keychain)项的安全级别 (Read more here)。一个例子是 kSecAttrAccessibleAfterFirstUnlock 常量,这意味着您只能在用户解锁后才能提取钥匙串(keychain)信息。对于那些在 iOS 7 之后实现后台通知并注意到当设备已重新启动但尚未解锁时他们无法再将凭据发送到服务器的开发人员来说,这是一个很大的问题。

要使用 touchID,您需要一个 LAContext 实例:

let context = LAContext()
if( context.canEvaluatePolicy(.DeviceOwnerAuthenticationWithBiometrics ,error:nil) {        
    //go ahead with TouchID
} else {
   //log in the user with the login UI
}

不要忘记,如果您支持 iOS 7.1 或更低版本的部署目标,则需要添加适当的可用性检查(应由编译器推断):

if #available(iOS 8.0, *) {
    //it is safe to use touchID
    let context = LAContext()
}

有关更多信息,请尝试 this tutorial

关于xcode - 如何在 Swift 中添加解锁屏幕或使用 TouchID with Security?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26912623/

相关文章:

xcode - 不应该出现在 iPad 应用程序中的图像

ios - 关于从网络数据中提取信息的建议(Swift)

Swift 如果您在设置中指定非零格式字典,则您的委托(delegate)必须响应选择器 captureOutput :didFinishProcessingPhoto

ios - 在 swift 4 中从 base64 字符串创建 UIImage 时出错

ios - 如何在iOS中解压缩异步方式的zip文件?

xcode - Swift 属性 - 避免对 n 个类进行多个声明?

objective-c - Cocoa Programming,设置委托(delegate)

xcode - swift a func 在仍在执行时返回 nil

ios - 为什么 nib 文件中的 UITableViewCell(加载并添加到堆栈)在 viewDidAppear 中为零,但在 viewDidLoad 中没问题?

iOS8 Handoff - 示例项目