大多数浏览器和
Developer App 均支持流媒体播放。
-
自动填充无处不在
探索如何在你的 app 中运用自动填充功能,并且让人们输入信息的过程更加轻松、私密、安全。学习如何帮助系统更好地根据每项 app 的功能提供量身定制的建议:例如,在导航 app 内提供智能定位建议,或者提供更为私密的方式从“快速输入”栏中选择内容进行填充。 在 macOS Big Sur 中,自动填充功能已经从 Safari 浏览器拓展到各类应用。了解你能够利用这一特性做出的小小改变,从而为你的 macOS app 用户提供更方便、更安全以及更流畅的使用体验。 如需获悉各类平台最新的隐私提升详情,请观看“更多隐私,更多信赖”。
资源
相关视频
WWDC21
WWDC20
-
下载
你好 欢迎来到全球开发者大会 (自动填充无处不在) 各位好 我是陈泽恒 是一名键盘工程师 今天我要谈谈自动填充 我会分享一些小窍门 这些窍门能够帮助你的用户 在你的 app 中完成一些日常工作 我将谈谈自动填充最近地址 联系人信息 以及密码和安全码 如果你的 app 需要登陆或新的账户设置 我还将谈到与此相关的一些最佳做法 我们现在从一个自动填充 如何使用最近地址的示例开始 (最近地址) 如果你正在构建一个导航 app 可能会有一个需要填入地址的文本框
只要用户轻点文本框… (输入目的地) …iOS将智能地给出一个合适位置的建议 例如 你刚刚查过一家餐馆的信息… (来自其它 app 的一些最近地址) …现在键盘将在快速输入条栏中 给出一个餐馆地址的建议 所以 你的用户只需要再轻点一次屏幕 就可以输入地址了 如果你有兴趣将你的 app 中的位置 推广到系统中 你可观看 2016 年全球开发者大会讲座 《利用主动建议提高 app 的使用》
另一个例子是 你有一个即将到期的日历事件
那么现在键盘将给出事件位置的建议
或者你可能想要回家 键盘将给出你家地址的建议 (家) 现在你可能有些疑惑 在我的 app 中该怎么做到这样呢? (非常容易采用) 好消息是它非常容易 我示范给你们看看 你可以使用代码来采用 你只需将你的文本框 备注为 UITextContentType API 它为这些文本框向 iOS 提供语义 这里我们将 ContentType 设置为 FullStreetAddress… …这样就可以实现自动填充最近地址 就像前面的示例一样 就是这么简单
你还可以针对 UITextView 或 UITextField 直接在 Xcode 属性检查器中 搜索 Content Type (应尽量精确) 需要注意的一件事是 对于预期的每一个文本框的语义 均应尽可能的精确 你不能对一个 Text Content Type的属性 组合多个数值 所以应考虑你具体的应用场景 并找到合适的值 例如 对于导航 app 完整地址可能是正确的粒度 (库比蒂诺) 但是对于天气 app 精确到城市的地址就可能足够了 (隐私) 我想暂停一下 用一点时间谈谈隐私问题 它是 Apple 的核心价值之一 在我们的生活中 我们的设备 在很多方面都是必不可少的 我们分享的内容和对象 应完全取决于我们自己 我们设计的产品旨在保护我们用户的隐私 使用户控制他们的信息 有时候这并不容易 有时候构建精彩的体验 可能需要访问一定程度的个人信息 让我们看一个示例 (转账) 这里我构建了一个付款 app 允许用户向他们的朋友付款 (电子邮件地址) 我怎样才能帮助我的用户 快速找到他们的目标收款人?
我应该给出一个 Contact Picker 让他们选择 或是在他们输入时提示联系人?
不管哪一种方式 我都可能需要 访问他们的联系人 对吧?
(访问联系人) 但是请求访问联系人是个好主意吗? (“PayAndGo” 请求访问联系人) 如果我请求访问他们的联系人 系统将提醒用户允许访问
这不仅将中断他们的流程 他们甚至会不乐意分享他们的联系人
此外 即使他们选择与我的 app 分享他们的联系人 现在 我的 app 也存在着隐私暴露的更大风险 因为我能够访问他们的个人信息
更好的方法是使用 Contact Picker API 使用这个 API app 不需要访问联系人 系统也不会提醒用户批准许可
不会出现提醒 因为 app 只访问 用户选择与该 app 分享的特定信息
(联系人自动填充) 在 iOS 14 中 当用户输入时 我们在快速输入键盘中提示联络人信息
就像前面的例子一样 app 没有访问联系人 所以系统也不会给出提示
在用户轻触快速输入栏并插入文本之前 没有与 app 分享任何信息
所以 我们怎样实现这一功能? (采用联系人自动填充 UITEXTCONTENTTYPE) 你应该比较熟悉 采用这种新的联系人自动填充功能
与最近地址自动填充一样 你只需将 Content Type 设置为电子邮件 或是电话号码
将联系人自动填充到你的 app (内容访问) 强调一点 如果你的 app 需要访问用户的联系人 首先尝试使用这两种解决方案 (使用CNContactPickerViewController 在键盘中使用联系人自动填充) 在这种方式中 你不需要对保管用户数据 承担潜在的责任 也不需要提醒用户 并且你不需要维护 联系人选择和提示的用户界面 (密码自动填充) 现在我们来谈谈密码自动填充
即使你的 app 采用通过 Apple 登录 这种方法是使用户通过 一个账户快速登录的最好方法 如果你的 app 使用用户名和密码这种登录方式 那么密码自动填充可能非常重要
幸运的是 在你的 app 中 实现密码填充非常容易 (SHINY 用户名 - 密码) 对于密码填充 你只需使用 相应的内容类型:用户名、密码 对用户名和密码框进行标记
键盘将自动提示在 iCloud 钥匙串 或其他密码管理器中 保存的对应的用户名和密码 (确认 提交) 对于安全码 你要使用的 Content Type 应为 OneTimeCode (创建账户 注册) 自动强密码可大大简化 你的 app 的用户引导流程 通过提示唯一的强密码 并将其自动保存在 iCloud 钥匙串中 这不仅使用户快速方便 同样也增强了你的 app 的安全性
采用过程就像这里的示例一样简单 我们使用了新的密码 Content Type
最后一步是将你的 app 和一个域关联 (自动式强密码 和安全码自动填充) 如果要学习如何实现 请查看2018年全球开发者大会上的 《自动式强密码》 我们来谈谈 Mac macOS Big Sur 的新功能 Catalyst app 现在有了安全码自动填充 (确认) 如果在你的 iPad app 中 使用安全码自动填充 它将在 macOS 上完美运行
这也是 macOS Big Sur 的新功能 基于 AppKit 的 app 全面支持 密码和安全码自动填充 (APPKIT app 密码和安全码自动填充) AppKit 现在有一个 Next Text Content Type 它类似于 UI Kit 中 UITextContentType 目前支持的值为用户名 密码和一次性验证码 还有一个更酷的功能 macOS Big Sur 同样支持 将密码管理器 app 作为自动填充的数据源 (下一步 标签地址框 - 标签电子邮件框) (标签电话号码框 标签用户名框) (标签密码和新密码框 一次性验证码框) 最后 如果说你能从本次讨论中有所收获 那就是在你的 app为每个文本框提供标签 标签地址框 标签电子邮件框 标签所有的文本框
谢谢大家 自动填充快乐
-
-
2:06 - Address AutoFill
let streetAddressTextField = UITextField() steetAddressTextField.textContentType = .fullStreetAddress //Other address granularity: // .addressCity, .addressCityAndState, .addressState, .countryName // .postalCode, .streetAddressLine1, .streetAddressLine2, .sublocality
-
6:17 - Contact AutoFill
// 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() steetAddressTextField.textContentType = .fullStreetAddress
-
7:35 - Password AutoFill
let userTextField = UITextField() userTextField.textContentType = .username let passwordTextField = UITextField() passwordTextField.textContentType = .password
-
8:00 - Security Code AutoFill
let securityCodeTextField = UITextField() securityCodeTextField.textContentType = .oneTimeCode
-
8:30 - Automatic Strong Passwords
let userTextField = UITextField() userTextField.textContentType = .username let newPasswordTextField = UITextField() newPasswordTextField.textContentType = .newPassword
-
9:20 - Password and Security Codes AutoFill for AppKit based apps
let usernameTextField = NSTextField() usernameTextField.contentType = .username let passwordField = NSSecureTextField() passwordField.contentType = .password let securityCodeTextField = NSTextField() securityCodeTextField.contentType = .oneTimeCode
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。