在iOS 12中自动填充用户名和密码

时间:2018-09-26 09:48:10

标签: ios swift autofill ios12

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


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


密码文本字段配置

这曾经在iOS 11上可以正常工作,但是将我的开发iPad升级到iOS 12后,该应用会建议发送电子邮件给用户名字段,并且在编辑密码字段时会发生以下情况:


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

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

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


我尝试过的

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

注意

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

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

谢谢!



编辑

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

...在设备上:

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

我的UIViewController在同一屏幕上已注册并登录,但控制器名为RegistrationViewController。我将其更改为LoginViewController进行测试,发现登录部分开始工作,但是注册位的行为就像是登录!即使设置了正确的textContentType,也是如此!

我不得不重新命名UIViewController,但这并不意味着注册或登录后才能真正尊重我的textContentType。糟透了真可怕。

我可以想像,这至少是/正在发生的部分原因是因为您将Welcome一词作为视图控制器的开头,听起来似乎令人难以置信。

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