Highlight
iOS 14 和 macOS Big Sur 把 AutoFill 扩展到 App 中的地址、联系人、密码、验证码和强密码输入,开发者通过
textContentType或contentType标注字段语义即可获得系统建议。
核心内容
很多表单失败在输入前半步。导航 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 登录流程也能获得验证码填充能力。
核心启发
-
给导航和外卖类 App 做地址直填
做什么:把目的地、配送地址、门店地址输入框标注为
.fullStreetAddress或更细的地址类型。为什么值得做:Session 展示了最近地点、日历事件地点和家庭地址可以直接进入 QuickType bar。
怎么开始:从最常用的地址输入页开始,按字段粒度设置
textContentType,再检查是否真的需要自建历史地址选择器。 -
把收款人输入改成隐私友好的联系人建议
做什么:在转账、邀约、分享等流程中,为邮箱和电话字段分别设置
.emailAddress与.telephoneNumber。为什么值得做:iOS 14 的联系人 AutoFill 在用户点选前不会把通讯录内容交给 App。
怎么开始:先用字段语义和 Contact Picker API 覆盖核心路径,只在确有必要时再请求 Contacts 权限。
-
重查登录页的用户名、密码和验证码字段
做什么:把登录页中的账号、密码、短信验证码字段分别标注为
.username、.password、.oneTimeCode。为什么值得做:这些标记让系统给出已保存凭据和验证码建议,减少用户在 App 与短信之间切换。
怎么开始:从转化率最高的登录入口做一次表单审计,优先修正没有
textContentType的字段。 -
让注册页默认进入强密码流程
做什么:新账号页面使用
.newPassword,并完成 App 与网站的关联域名配置。为什么值得做:Automatic Strong Passwords 会建议唯一强密码,并帮助用户保存到 iCloud Keychain。
怎么开始:把注册页的密码字段拆清楚:旧密码用
.password,新密码用.newPassword,再补上 associated domain。 -
把 Mac 登录表单纳入同一套检查
做什么:在 macOS Big Sur 的 AppKit 登录表单中设置
NSTextContentType。为什么值得做:AppKit 现在支持用户名、密码和一次性验证码 AutoFill,Mac App 不再只能依赖 Safari。
怎么开始:检查
NSTextField与NSSecureTextField,把contentType设置为.username、.password或.oneTimeCode。
关联 Session
- One-tap account security upgrades — 继续讲账号安全升级,覆盖 Sign in with Apple、强密码和 iCloud Keychain 密码管理器。
- Get the most out of Sign in with Apple — 深入讲登录请求、凭据状态、服务器通知和现有账号迁移。
- Build trust through better privacy — 这场 AutoFill Session 明确推荐的隐私延伸内容,适合补齐权限、透明度和用户信任原则。
评论
GitHub Issues · utterances