【问题标题】:AutoFill username and password in iOS 12iOS 12 中的自动填充用户名和密码
【发布时间】:2019-03-02 01:23:06
【问题描述】:

我在 iOS 11 中成功为存储的用户名和密码建议实施了自动填充。
我的登录视图控制器中有两个文本字段,一个用于电子邮件,一个用于密码。内容类型定义如下:


电子邮件/用户名文本字段配置


密码文本字段配置

这曾经在 iOS 11 中运行良好,但在将我的开发 iPad 升级到 iOS 12 后,该应用会建议用户名字段的电子邮件,并且在编辑密码字段时会发生以下情况:


在我的创建帐户视图控制器中,我有 3 个文本字段:电子邮件、密码、重复密码。它们的内容模式设置如下:

  • 电子邮件 → 电子邮件地址
  • 密码→新密码,规则:minlength:8;
  • 重复密码→新密码,规则:minlength:8;

编辑电子邮件地址字段时,它会正确建议一个电子邮件地址。但是,对于密码和重复密码字段,它会建议存储密码,而不是建议新密码。


我尝试了什么

  • (不合逻辑地)翻转内容模式设置,因此登录密码字段设置为new password,创建帐户密码字段设置为password
    • 没有成功;事实上,行为根本没有改变
  • 将内容模式设置为none 以进行登录并创建帐户字段,以便自动填充可以尝试自动处理它
    • 没有成功;事实上,行为根本没有改变

注意

  • 自动填充已在服务器上正确设置。创建帐户字段中建议的存储密码证明
  • 该功能仍在 iOS 11 iPad 上运行
  • 使用新用户名登录时,应用程序会要求用户将此用户名和密码添加到 Keychain,即使在 iOS 12 上也是如此

知道我需要更改什么以便存储的用户名和密码建议再次在 iOS 12 中工作吗?

谢谢!



编辑

根据下面@kralex 的要求,这是我在情节提要中登录视图控制器的视图层次结构:

...在设备上:

【问题讨论】:

    标签: ios swift autofill ios12


    【解决方案1】:

    我遇到了类似的问题,发现 Apple 的启发式方法正在利用 视图控制器的类名来确定是建议新密码还是使用现有密码。似乎即使我在我的UITextFields 上设置了正确的textContentType,它仍然会使用控制器的名称。

    我的UIViewController 在同一屏幕上同时注册和登录,但控制器名为RegistrationViewController。我把它改成LoginViewController进行测试,发现登录部分开始工作了,但是注册位的行为就像是登录一样!即使设置了正确的textContentTypes!

    我最终不得不重命名我的UIViewController 一些并不意味着注册或登录的东西,以真正尊重我的textContentTypes。太可怕了。真的很糟糕。

    我想这至少是/正在发生在你身上的部分原因是因为你有 Welcome 这个词作为你的视图控制器的开头,听起来难以置信。

    顺便说一句,我尝试了RegistrationLoginViewController(它选择了注册设置)和LoginRegistrationViewController(它选择了登录设置),但都没有成功。如果您想将两者都放在同一个控制器上,则必须避免使用 Apple 的启发式方法。

    【讨论】:

    • 奇怪,我的登录视图控制器的类名是LoginViewController。也许按钮名称具有更高的优先级 - 这是有道理的,因为人们经常使用 LoginViewController 让用户登录或注册,所有这些都在一个 vc 中,因此按钮的标题应该更重要。
    • 不过很有趣!我觉得苹果至少应该记录这些事情。另外,为什么他们甚至会覆盖 contentType 设置...如果根本没有设置,我明白了,但是当它设置时??
    • 很奇怪,我的按钮被称为signInButton,似乎没有任何区别。我完全同意,这个需要文档和一种覆盖他们正在做的事情的方法。狂野的西部在这里大声笑。
    • 说真的,Apple 需要停止认为它知道人们想要什么。没有选择退出的启发式?不用了。
    【解决方案2】:

    Apple 正在做一些启发式方法来最好地猜测您可能需要什么:自动填充或新密码。但是在某些情况下它可能会失败。

    在您的情况下,问题与“创建帐户按钮”有关。它使系统认为它是一个注册表单。

    最简单的解决方法:用 UILabel 替换注册 UIButton 并添加 tapRecognizer 来处理点击。

    【讨论】:

    • 感谢您的回答。有趣的是:我实际上使用的是一个包含可点击标签而不是按钮的视图。
    • 从视图层次结构看来,注册实际上是一个 UIButton,但登录是一个可能带有 UILabel 的 UIView。如果登录是UILabel,尝试使其成为UIButton,它应该也可以解决问题。
    • 哦,你的意思是较低的。我知道了。我说的是登录按钮,对不起。我会试试看。感谢您的建议。
    • 这确实有效。一方面,Apple 能够检测到这样的东西很酷。另一方面,它并不那么酷,因为他们将启发式方法置于手动分配的内容类型之上。非常感谢!
    • 你能告诉我如何让创建帐户视图控制器中的文本字段建议一个新密码吗?他们不再建议存储的用户名和密码,但也不建议使用新密码。我试图添加一个(隐藏的)按钮,上面写着“创建帐户”来触发算法,但这不起作用......
    猜你喜欢
    • 1970-01-01
    • 2019-04-05
    • 1970-01-01
    • 2016-05-10
    • 2014-12-07
    • 2010-11-29
    • 2012-06-20
    • 2019-01-27
    • 2019-04-11
    相关资源
    最近更新 更多