🔒
Locker
使用iOS生物识别特性在密钥链中处理敏感数据(String
类型)的轻量级库。
特性
- 在密钥链中保存数据。
- 使用生物识别ID从密钥链中检索数据。
- 从密钥链中删除数据。
- 还有一些额外的方法可以帮助您保存和检索与生物识别认证有关的一些附加信息。
- 检测生物识别设置的变化。
- 检查设备是否支持特定的生物识别ID。
- 检测并支持模拟器。
- 在不更新库的情况下更新支持设备列表。
要求
- iOS 10.0 +
安装
Locker支持CocoaPods、Swift Package Manager和Carthage。
CocoaPods
如果还未安装,请查看 CocoaPods 安装说明
要将库集成到您的 Xcode 项目中,请指定您的 Podfile
文件中的 pod 依赖
platform :ios, '10.0'
use_frameworks!
pod 'Locker'
运行 pod install
pod install
Swift Package Manager
要从 Swift Package Manager 安装 Locker,请按照以下步骤操作:
- 在 Xcode 11+ 中,选择 文件 → 包 → 添加包依赖
- 输入项目的 URL: https://github.com/infinum/Locker.git
有关更多信息,请参阅 Swift Package Manager.
Carthage
有关 Carthage 的安装和使用说明,您可以查看官方的 快速入门文档。
要将库集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "infinum/Locker"
运行 carthage update
。
使用
Info.plist
以获得使用 Face ID 所需的权限。
0. 设置 Xcode 项目 - 在弹出菜单中添加以下内容到您的 Info.plist:
- 隐私 - Face ID 使用说明
- 添加新字段后,提供有意义的说明
- 例如:
<key>NSFaceIDUsageDescription</key>
<string>** Add your Face ID Usage Description **</string>
setSecret: forUniqueIdentifier: completed:
方法保存数据。
1. 使用 对于 uniqueIdentifier
,传入您后来用于获取数据的 String
值。 completed
是一个闭包,在完成秘密存储时被调用。如果在存储过程中发生错误,信息将通过完成块传递。
// Objective-C
[Locker setSecret:@"passcode" forUniqueIdentifier:@"kUniqueIdentifier" completed: ^(NSError *error) {
//handle error
}];
// Swift
Locker.setSecret("passcode", for: "UniqueIdentifier", completed: { error in
// handle error
})
如果 Locker 在模拟器中运行,则会将数据存储到
UserDefaults
而不是密钥链中。您可以使用isRunningFromTheSimulator
属性检查 Locker 是否在模拟器中运行。
retrieveCurrentSecretForUniqueIdentifier: operationPrompt: success: failure:
获取数据。
2. 使用 operationPrompt
是将作为系统 Touch ID 对话框上的消息显示的 String
值。您将在 success
完成块中获得数据。如果由于某些原因在密钥链中找不到数据,则您将在 failure
完成块中收到错误状态。
// Objective-C
[Locker retrieveCurrentSecretForUniqueIdentifier:@"kUniqueIdentifier"
operationPrompt:@"Touch ID description" success:^(NSString *secret) {
// do sth with secret
} failure:^(OSStatus failureStatus) {
// handle failure
}];
// Swift
Locker.retrieveCurrentSecret(
for: "kUniqueIdentifier",
operationPrompt: "Touch ID description",
success: { (secret) in
// do sth with secret
}, failure: { (failureStatus) in
// handle failure
}
)
deleteSecretForUniqueIdentifier:
方法删除数据。
3. 使用 // Objective-C
[Locker deleteSecretForUniqueIdentifier:@"kUniqueIdentifier"];
// Swift
Locker.deleteSecret(for: "kUniqueIdentifier")
setSecret: forUniqueIdentifier: completed:
方法。此方法首先删除旧值(如果有的话),然后保存新值。
4. 如果您需要更新保存的数据,请先调用 5. 有一些额外的步骤可能有助于您处理生物识别认证。
使用setShouldUseAuthenticationWithBiometrics:forUniqueIdentifier:
方法来保存是否应该使用生物识别ID从密钥链中获取数据。使用shouldUseAuthenticationWithBiometricsForUniqueIdentifier:
方法来获取该信息。
使用setDidAskToUseAuthenticationWithBiometrics:forUniqueIdentifier:
方法保存用户是否被询问是否使用生物识别ID来处理某些数据。使用didAskToUseAuthenticationWithBiometricsForUniqueIdentifier:
方法来获取该信息。
使用setShouldAddSecretToKeychainOnNextLogin:forUniqueIdentifier:
方法保存在下一次用户登录时是否应该将数据保存到密钥链。使用shouldAddSecretToKeychainOnNextLoginForUniqueIdentifier:
方法来获取该信息。
注意:此处的方法是因为它们在一些我们的项目中使用过。你可能想使用前两种,即setShouldUseAuthenticationWithBiometrics: forUniqueIdentifier
和shouldUseAuthenticationWithBiometricsForUniqueIdentifier
。其他的方法如果您的应用有特定的行为将会很有用。
biometricsSettingsDidChange
来检查生物识别设置变化。
6. 您可以使用如果自上次调用此方法或上次保存键值以来生物识别设置已更改,则它将返回true
。
// Objective-C
BOOL biometrySettingsChanged = Locker.biometricsSettingsDidChange;
BOOL usingBiometry = [Locker shouldUseAuthenticationWithBiometricsForUniqueIdentifier:@"kUniqueIdentifier"];
if (biometrySettingsChanged && usingBiometry) {
// handle case when settings are changed and biometry should be used
}
// Swift
let biometrySettingsChanged = Locker.biometricsSettingsDidChange
let usingBiometry = Locker.shouldUseAuthenticationWithBiometrics(for: "kUniqueIdentifier")
if biometrySettingsChanged && usingBiometry {
// handle case when settings are changed and biometry should be used
}
supportedBiometricsAuthentication
和configuredBiometricsAuthentication
计算属性,它们返回BiometricsType
枚举(BiometricsTypeNone
、BiometricsTypeTouchID
、BiometricsTypeFaceID
)。
7. 有supportedBiometricsAuthentication
检查设备是否支持某些生物识别类型。configuredBiometricsAuthentication
检查设备是否支持某些生物识别类型,并且该生物识别是否已在设备设置中启用。
enableDeviceListSync
设置为true
。
8. 存在一个包含具有FaceID或TouchID的每个iPhone和iPad型号的本地JSON文件。这样可以检查用户的设备是否可以使用FaceID或TouchID。如果您想允许JSON文件与服务器同步,可以将当启用enableDeviceListSync
时,如果设备不在本地列表中,它将与服务器列表同步,并将同步后的列表写入本地JSON文件。
贡献
欢迎反馈和代码贡献。只需创建一个带有更改简短描述的拉取请求。通过向此项目贡献,您同意根据相同的许可协议使用您的代码。