是否可以在用户看到 UIView 之前询问用户的 PIN、Face ID 或 Touch ID?
Posted
技术标签:
【中文标题】是否可以在用户看到 UIView 之前询问用户的 PIN、Face ID 或 Touch ID?【英文标题】:Is it possible to ask for the user's PIN, Face ID or Touch ID before he sees a UIView? 【发布时间】:2021-02-06 11:27:29 【问题描述】:我想为除拥有手机的人之外的所有人锁定应用程序的历史记录部分。我不喜欢强迫用户为这个应用程序创建一个帐户或创建一个新的 PIN。我可以使用他已经设置的 PIN、Face ID 或 Touch ID 进行授权吗?
【问题讨论】:
是的。使用本地身份验证框架。 如果您可以通过链接或其他内容将此作为答案,我会接受。 【参考方案1】:Local Authentication 框架会处理这个问题。
这是苹果code sample的一部分:
/// Logs out or attempts to log in when the user taps the button.
@IBAction func tapButton(_ sender: UIButton)
if state == .loggedin
// Log out immediately.
state = .loggedout
else
// Get a fresh context for each login. If you use the same context on multiple attempts
// (by commenting out the next line), then a previously successful authentication
// causes the next policy evaluation to succeed without testing biometry again.
// That's usually not what you want.
context = LAContext()
context.localizedCancelTitle = "Enter Username/Password"
// First check if we have the needed hardware support.
var error: NSError?
if context.canEvaluatePolicy(.deviceOwnerAuthentication, error: &error)
let reason = "Log in to your account"
context.evaluatePolicy(.deviceOwnerAuthentication, localizedReason: reason ) success, error in
if success
// Move to the main thread because a state update triggers UI changes.
DispatchQueue.main.async [unowned self] in
self.state = .loggedin
else
print(error?.localizedDescription ?? "Failed to authenticate")
// Fall back to a asking for username and password.
// ...
else
print(error?.localizedDescription ?? "Can't evaluate policy")
// Fall back to a asking for username and password.
// ...
【讨论】:
以上是关于是否可以在用户看到 UIView 之前询问用户的 PIN、Face ID 或 Touch ID?的主要内容,如果未能解决你的问题,请参考以下文章
如何在调用 requestPermissions 之前知道用户检查“不再询问”