【发布时间】:2019-08-07 10:41:38
【问题描述】:
我想知道是否可以自定义钥匙串警报?您可以在下面找到图片:
我想要达到的目标:
当使用 FaceID/TouchID 的身份验证失败并在显示的警报上方弹出时,我希望用户点击输入密码并显示我的自定义应用程序密码 UI,而不是设备密码(系统 ui)。基本上,我想自定义回退操作。
背景:
我知道使用LAContext 是可能的,但是由于我们可以绕过它的原因,我在实现它时感觉不舒服,所以我选择了 Keychain accessControlFlags。
快照代码,我目前拥有的:
func data(forAccount account: String, service: String, accessGroup: String?) throws -> Data? {
guard let accessControl = createAccessControl(with: .userPresence) else { return nil }
var query = self.query(forAccount: account, service: service, accessGroup: accessGroup)
var authContext = LAContext()
authContext.localizedFallbackTitle = "Enter Passcode"
authContext.localizedCancelTitle = "Cancel"
query[KeychainConstants.matchLimit] = KeychainConstants.matchLimitOne
query[KeychainConstants.returnData] = kCFBooleanTrue
query[KeychainConstants.authenticationContext] = authContext
query[KeychainConstants.accessControl] = accessControl
var result: AnyObject?
let status = withUnsafeMutablePointer(to: &result) {
securityItemManager.copyMatching(query, result: UnsafeMutablePointer($0))
}
if let error = error(fromStatus: status), error != .itemNotFound {
throw error
}
guard result != nil else { return nil }
guard let resultData = result as? Data else { throw AccessError.invalidQueryResult }
return resultData
}
【问题讨论】:
-
我的理解是你需要使用 LAContext 后备才能做到这一点。呈现此视图时,用户将始终可以使用生物识别或取消。
-
@iDev 感谢您的回复。在这种情况下如何使用 LAContext 回退,你能说得更具体一点吗?
-
我会添加更多描述的答案