WWDC Quick Look 💓 By SwiftGGTeam
AutoFill everywhere

AutoFill everywhere

观看原视频

Highlight

iOS 14 和 macOS Big Sur 把 AutoFill 扩展到 App 中的地址、联系人、密码、验证码和强密码输入,开发者通过 textContentTypecontentType 标注字段语义即可获得系统建议。

核心内容

很多表单失败在输入前半步。导航 App 想让用户输入目的地,支付 App 想让用户输入收款人邮箱,登录页想让用户输入账号、密码、验证码。开发者自己做建议列表,通常要维护数据源、请求权限、设计选择界面,还要承担保存个人信息的风险。

Apple 在这场 Session 给出的路径很小:把每个输入框的语义告诉系统。UIKit 用 UITextContentType,AppKit 在 macOS Big Sur 增加了 NSTextContentType。系统知道字段要收地址、邮箱、电话号码、用户名、密码或一次性验证码后,就能在 QuickType bar 或 AutoFill 中给出匹配建议。

这个设计的重点是边界。联系人建议不会先把通讯录交给 App,用户点选之前没有内容分享给 App。地址建议、密码建议、验证码建议也沿用系统已有的数据源。开发者减少自建选择器和权限弹窗,用户保留对个人信息的控制。

详细内容

地址 AutoFill:用字段语义换系统建议

02:06)导航 App 的地址输入框只需要标注为完整街道地址。用户点进字段时,系统可以根据最近地点、日历事件位置或家庭地址在 QuickType bar 给出建议。

let streetAddressTextField = UITextField()
streetAddressTextField.textContentType = .fullStreetAddress

// Other address granularity:
// .addressCity, .addressCityAndState, .addressState, .countryName
// .postalCode, .streetAddressLine1, .streetAddressLine2, .sublocality

关键点:

  • UITextField() 创建普通文本输入框,AutoFill 的接入点就在输入控件本身。
  • .fullStreetAddress 告诉 iOS 这个字段需要完整街道地址。
  • 地址粒度要按场景选。导航 App 适合完整地址,天气 App 可能只需要城市。
  • 一个 textContentType 不能组合多个值,字段语义越精确,系统建议越可靠。

联系人 AutoFill:避免过早请求通讯录权限

05:18)支付 App 如果要找收款人,可以用 Contact Picker API,让用户主动选择具体信息。iOS 14 进一步把联系人邮箱、电话号码和地址建议放到 QuickType keyboard 中。用户点击建议前,App 不能访问通讯录内容。

// AutoFill contacts' email address
let emailTextField = UITextField()
emailTextField.textContentType = .emailAddress

// AutoFill contacts' phone number
let phoneTextField = UITextField()
phoneTextField.textContentType = .telephoneNumber

// AutoFill contacts' address
let streetAddressTextField = UITextField()
streetAddressTextField.textContentType = .fullStreetAddress

关键点:

  • .emailAddress 让系统把联系人邮箱作为输入建议。
  • .telephoneNumber 让系统把联系人电话号码作为输入建议。
  • .fullStreetAddress 同样适用于联系人地址。
  • App 不需要先申请 Contacts 权限,也不用维护自定义联系人建议 UI。

密码和验证码:登录页要把每个字段说清楚

07:35)有用户名和密码登录的 App,应该分别标注用户名字段和密码字段。系统会从 iCloud Keychain 或密码管理器中建议对应凭据。一次性验证码字段使用 .oneTimeCode

let userTextField = UITextField()
userTextField.textContentType = .username

let passwordTextField = UITextField()
passwordTextField.textContentType = .password

let securityCodeTextField = UITextField()
securityCodeTextField.textContentType = .oneTimeCode

关键点:

  • .username 标记账号字段,是密码 AutoFill 识别登录表单的入口。
  • .password 标记已有密码字段,系统可以给出已保存的密码。
  • .oneTimeCode 标记验证码字段,适合短信验证码输入。
  • 这些属性只描述字段含义,不要求 App 读取用户保存的密码库。

强密码:注册页要用 newPassword

08:30)注册或新账号设置流程中,Automatic Strong Passwords 可以建议唯一强密码,并把它保存到 iCloud Keychain。演讲强调,最后还需要把 App 与域名关联,相关细节可参考 WWDC 2018 的 Automatic Strong Passwords and Security Code AutoFill。

let userTextField = UITextField()
userTextField.textContentType = .username

let newPasswordTextField = UITextField()
newPasswordTextField.textContentType = .newPassword

关键点:

  • .username 仍然标记账号字段,让系统理解注册表单的账号身份。
  • .newPassword 表示这里要创建新密码,系统可以建议强密码。
  • 强密码建议降低用户复用弱密码的概率。
  • 关联域名让系统知道 App 和网站属于同一个凭据范围。

macOS Big Sur:AppKit 也获得密码和验证码 AutoFill

08:56)macOS Big Sur 把 AutoFill 从 Safari 扩展到 App。Catalyst App 获得验证码 AutoFill;AppKit App 可以通过 NSTextContentType 支持用户名、密码和一次性验证码。

let usernameTextField = NSTextField()
usernameTextField.contentType = .username

let passwordField = NSSecureTextField()
passwordField.contentType = .password

let securityCodeTextField = NSTextField()
securityCodeTextField.contentType = .oneTimeCode

关键点:

  • NSTextField 使用 contentType,语义上对应 UIKit 的 textContentType
  • .username.password 让 AppKit 登录表单接入密码 AutoFill。
  • NSSecureTextField 适合密码字段,仍然通过 contentType 标注语义。
  • .oneTimeCode 让 macOS 登录流程也能获得验证码填充能力。

核心启发

  1. 给导航和外卖类 App 做地址直填

    做什么:把目的地、配送地址、门店地址输入框标注为 .fullStreetAddress 或更细的地址类型。

    为什么值得做:Session 展示了最近地点、日历事件地点和家庭地址可以直接进入 QuickType bar。

    怎么开始:从最常用的地址输入页开始,按字段粒度设置 textContentType,再检查是否真的需要自建历史地址选择器。

  2. 把收款人输入改成隐私友好的联系人建议

    做什么:在转账、邀约、分享等流程中,为邮箱和电话字段分别设置 .emailAddress.telephoneNumber

    为什么值得做:iOS 14 的联系人 AutoFill 在用户点选前不会把通讯录内容交给 App。

    怎么开始:先用字段语义和 Contact Picker API 覆盖核心路径,只在确有必要时再请求 Contacts 权限。

  3. 重查登录页的用户名、密码和验证码字段

    做什么:把登录页中的账号、密码、短信验证码字段分别标注为 .username.password.oneTimeCode

    为什么值得做:这些标记让系统给出已保存凭据和验证码建议,减少用户在 App 与短信之间切换。

    怎么开始:从转化率最高的登录入口做一次表单审计,优先修正没有 textContentType 的字段。

  4. 让注册页默认进入强密码流程

    做什么:新账号页面使用 .newPassword,并完成 App 与网站的关联域名配置。

    为什么值得做:Automatic Strong Passwords 会建议唯一强密码,并帮助用户保存到 iCloud Keychain。

    怎么开始:把注册页的密码字段拆清楚:旧密码用 .password,新密码用 .newPassword,再补上 associated domain。

  5. 把 Mac 登录表单纳入同一套检查

    做什么:在 macOS Big Sur 的 AppKit 登录表单中设置 NSTextContentType

    为什么值得做:AppKit 现在支持用户名、密码和一次性验证码 AutoFill,Mac App 不再只能依赖 Safari。

    怎么开始:检查 NSTextFieldNSSecureTextField,把 contentType 设置为 .username.password.oneTimeCode

关联 Session

评论

GitHub Issues · utterances