我正在使用此代码安全性在我的应用程序中添加解锁屏幕:
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实际上只是一种更方便的方式来认证用户,而不需要他们输入密码。此密码与解锁设备时使用的密码不同,而是解锁应用程序的密码。这意味着,如果您的应用程序中已经有某种类型的身份验证系统,则可以添加TouchID以防止用户每次都手动登录。
另一方面,密钥链是用来存储敏感信息(如用户登录凭据)的。在Keychain中,您可以指定Keychain项的安全级别(Read more here)。一个例子是kSecAttrAccessibleAfterFirstUnlock
常量,这意味着您只允许在用户解锁后提取密钥链信息。对于那些在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中添加解锁屏幕或在安全性中使用Touch ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26912623/