是否可以在用户看到 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 之前知道用户检查“不再询问”

Android Marshmallow - 如何知道“不再询问”之前检查过

从 LaunchIntent 向用户询问输入

iPhone横向UIView幻灯片过渡

如何询问用户是不是希望在 CloudKit JS 中被发现?