大多数浏览器和
Developer App 均支持流媒体播放。
-
使用 App 快捷指令突出你的 App
了解如何使用 App 快捷指令在 Spotlight 中或通过 Siri 显示 App 中的常用功能。了解如何为你的 App 配置搜索结果,并了解创建出色的 App 快捷指令最佳实践。我们还将向你展示如何构建出色的视觉和语音体验,并将其扩展到 Apple Watch 和 HomePod 等其他 Apple 设备。 有关 App 快捷指令和 App 意图的更多信息,请查看 WWDC23 的“探索 App 意图的增强功能”和“为 Spotlight 设计快捷指令”。
资源
相关视频
WWDC23
-
下载
♪ ♪
Jerry:大家好 我叫 Jerry 是 Siri 和 App 快捷指令 的工程经理 今天 我将和大家分享 如何使用 App 快捷指令 让你的 App 脱颖而出 首先 我会说明 为什么要采用 App 快捷指令 创建能在整个操作系统中使用的 常用、快速操作 然后我会介绍创建 App 快捷指令的基本知识 之后 我会说明 如何让 App 快捷指令 在视觉和语音方面 都有出色的使用表现 并介绍一些已经在 iOS 17 中改进的新方法 最后再总结一些新方法 以将 App 快捷指令扩展到 iPhone 以外的 其他 Apple 设备上 首先 App 快捷指令 能让用户轻松地发现 并使用你 App 的功能 App 安装好后 快捷指令就自动可用 而且不需要用户设置 与 iOS 15 及之前的版本不同 我们不需要使用快捷指令 App 或 Add To Siri 按钮来设置一个 App 快捷指令才能使用 我们现在可以通过对 Siri 说触发短语 来运行 App 快捷指令 在聚焦中搜索时 这些快捷指令就会出现在 搜索结果的显著位置 此外 我们还可以在快捷指令 App 里找到这些快捷指令 在这里 它们是强大的用户快捷指令 和自动化操作的一部分
App 快捷指令可以提高 App 功能在整个系统中 中的可见度 成为为了某项功能而打开 App 或用户为了维持注意力 而仅在后台运行的绝佳起点 这是一种快捷、 让人印象深刻的方法 能够降低使用 你 App 核心功能的阻力 并使得这些功能适用于更多的情况 比如只使用语音操作 App 或在家里使用 HomePod 针对 App 最重要的功能 创建一个让人印象深刻的快捷指令 能够帮助用户发现、记住你的 App 并养成使用你 App 的习惯 例如 在本次讲座里 我会使用一个 名叫 Demo 的 App 来管理我的待办事项清单 我想让系统调用一个新功能 帮我总结我的清单 通过快捷指令或者询问 Siri 我就能快速得到待办事项的数据 这种快速、轻便的功能 非常适合 App 快捷指令 这些快捷指令让用户 能够无缝获得自己需要的信息 并继续自己的旅程 我会快速说明一下 如何构建一个 App 意图 来总结待办事项清单 然后再创建一个 App 快捷指令 这样用户就可以 通过口头命令总结清单 并在聚焦中突出显示
App 快捷指令由 App Intents 框架构建而成 这是从头建立的 纯 Swift 框架 来让用户更快、更方便地 在 Swift 源代码中 构建意图 所有 App 快捷指令的建立 都要先在源代码中定义意图 意图是你的 App 能够完成的单个任务 比如创建待办事项清单 总结内容 或者核对事项 App 意图创建完成之后 你就可以用它创建 App 快捷指令 从而让用户能够通过聚焦 或 Siri 使用这些快捷指令 它把你的意图 和 Siri 的触发短语、 标题和需要的符号联系在了一起 了解了这两个概念的定义后 你要做的就是 构建并测试运行你的 App 我从创建一个 非常简单的快捷指令说起 通过这个快捷指令 我可以直接在聚焦中输入 或者对 Siri 说出待办事项名称 来创建一个新的空待办事项列表 创建这个快捷指令 只需要简单的两步: 定义 App 意图 以及定义 App 快捷指令 我们先导入一个 App Intents 框架 然后再构建一个 符合 AppIntent 协议的 新结构体 我把意图的实际功能放在了 系统将调用的执行方法中
最后我采用了 一个 AppShortcutsProvider 结构 每个 App 最多能有一个 符合这个协议的结构 在 AppShortcutsProvider 结构中 我能指定我的 App 支持的 所有快捷指令 这里 我添加了 “创建清单”App 快捷指令 每个 App 快捷指令 都由这几个部分组成: 触发调用的意图 Siri 需要识别 并执行这个快捷指令的短语 每个 App 快捷指令 可以有多个上述组成部分 我们要有一个短标题和 系统图片名称来向系统反馈 如何直观地显示这些快捷指令 以上就是创建一个简单的快捷指令 所需要的所有步骤 通过运行 App 我可以立刻 通过 Siri 或快捷指令 App 创建代办事项清单 所需要做的所有事 就是在代码里创建两个结构
但是我想尝试一下 更高级的快捷指令 有了这个快捷指令 我可以通过 提供一个待总结的特定列表 来快速总结我的任务 这就要提及一下 App Intents 的两个重要概念: 实体和查询 我们来试试 我先导入一个 SummarizeList App Intent 框架 和之前一样 我还要创建一个符合 AppIntent protocol 协议的结构 我留下了一个存根实现 来创建 TodoList 结构 我会再回到这里的 App 里已经有了一个 返回列表摘要的方便函数 所以我就使用这个函数 我可以把这个摘要 作为自定义对话框返回 作为 App 意图结果的一部分 这个结果会由 Siri 说出来或者展示出来
每个意图都需要一个 系统可以显示的标题
意图可以通过简单地声明变量 并使用 @Parameter 属性包装器 注释这些变量来获取输入信息 在这个例子中 我引用了一个 ToDoList 结构 就像前面提过的 目前这个结构只是一个桩代码
现在我给大家介绍一下 对很多 App 意图 都很重要的两个概念:实体和查询 实体是用户想要引用的概念 和你的 App 有关 我的 App 需要有一个待办事项列表实体 因为这是用户 在 App 里执行任务时 想要参考的逻辑对象 在其他 App 里 你可能有用户、文件、指令等实体 当这些意图 使用实体作为输入参数的时候 可以在 App 意图中 使用 App 内的实体 在我的 App 里 “SummarizeList”意图 把待办事项清单实体作为参数 系统依赖查询 找到适合 App 意图参数 的实体实例 运行时 系统实例化并调用查询对象 根据不同的搜索参数来查找实体 查询向系统返回这些相关实体实例 运行意图时 系统会使用这些实体 在我的 App 里 我需要使用待办事项清单实体 和查询来帮助系统 搜索相关待办事项清单 回到我在研究的 列表摘要 App 快捷指令 遵照 AppEntity 我会拓展 桩代码 ToDoList 的实现 我会采用 typeDisplayRepresentation 属性 向系统反馈如何描述这个实体类型 同样地 我会采用 displayRepresentation 属性 向系统反馈如何描述这个特定实例 注意 如果我想让实体显示在 聚焦或者快捷指令的顶层 实体在展示时要有图片或符号 最后我介绍一下实体的默认查询 我已经给待办事项清单实体 采用了一个简单的查询 我的查询至少要能通过标识符 检索待办事项清单 我也想采用 suggestedEntities 这样 我的 App 就能控制那些 我认为对用户最重要的待办清单 系统会使用这些建议的实体 自动填充我的 App 快捷指令 只需要 SummarizeList 意图 和相关实体 以及查询结构 我就可以在快捷指令 App 里面 使用这个功能 并把它作为自动化的一部分 但是我还没有完成 我想确保 这个功能可以通过 Siri 访问 并能在聚焦里功能正常 要做到这一点 我需要创建一个 App 快捷指令
先从我之前拓展过的 AppShortcutsProvider 结构开始 我会在现有的 App 快捷指令里 添加一个新的 我也会添加一批能通过 Siri 调用 App 快捷指令的 口语短语 注意 我没有直接在字符串里 使用 App 名称 而是使用了一个特殊的 token 这样 Siri 不仅能识别 App 的主要名称 也能识别我定义的任何同义名称 我已经把意图的“list”参数 添加到了一些短语中 App 快捷指令支持使用预定义参数 扩展触发短语 这样用户就可以在调用 Siri 时 立即提供参数 在这个例子里 系统会调用 ToDoListQuery 的 suggestedEntities 方法 来获得一系列可能的值 注意我也提供了一个 不包含“list”参数的短语 总体上来说这是一个好方法 这样做 如果我的 App 快捷指令没有清单 Siri 或者快捷指令就会提示用户选择一个 如果参数不可选 App 快捷指令就会在执行意图前 自动提示一个值 如果想让参数可选 你可以在执行方法中 手动提示一个值 和之前一样 我们要有一个短标题和系统图片
选择一个不错的短标题 和系统图片非常重要 因为它们是用户在聚焦中 搜索 App 时首先看到的东西 App 快捷指令支持 一套大家熟悉的 参数值的参数 这套值你可以提前向 Siri 指定 它们不支持开放式值 比如“在我的 App 里搜索 X” 这里的 X 可以是 用户的任何输入信息 你可以使用 App Enums 参数 在这种情况下 我们可以提前知道这个参数的值 或者你可以使用 App Entities 参数 实现完全动态 你只需要和我的 App 一样 使用 suggestedEntities 在查询中返回一个实体列表
最后一步是把 updateAppShortcutParameters 调用到 AppShortcutsProvider 对象上 调用这个方法会向系统发出信号 表明你的 App 快捷指令参数 已经发生了更改并导致系统 在任何相关的查询上 都会调用 suggestedEntities 来重新获取参数 每次待办事项清单发生变化的时候 我都会这么做 包括添加、删除以及重命名等突变 比如 如果我 App 实体的 displayRepresentation 的任何部分发生了变化 我都需要调用这个方法
请记住 在你的 App 首次启动时 调用这个功能也很重要 直到系统首次成功地获取实体 引用实体参数的 App 快捷指令短语 才能发挥作用
这也是我要为我的“摘要列表” App 快捷指令做的事情 现在使用 App 的时候 我可以说 “嘿 Siri 用 Demo 总结我的杂货清单” 而且立刻就能得到语言和视觉回复 只需要少量代码 用户就可以更容易地快速、 无缝获得他们需要的信息 在你创建了一个 优秀的、成熟的 App 快捷指令后 让你的用户 发现这个快捷指令也很重要 在整个过程中 有两种有力的方式能让用户 在使用设备时 发现你的 App 快捷指令 那就是聚焦和 Siri 提示 聚焦是一个用户启动 iPhone 和 iPad App 最受欢迎的方法 聚焦的 Top Hits 部分不仅显示 App 也显示 App 快捷指令 这是让用户发现你快捷指令 的一个极佳方式 用户可以在搜索 App 的时候 立即发现你的 App 快捷指令 并且你的 App 会出现在顶端 或者用户可以通过搜索 快捷指令本身来找到它们 比如这里的“总结清单” 除了聚焦 Siri 提示也是用户使用 App 时发现 App 快捷指令 的一个好方法 这里 我已经在列表视图中 添加了一个提示 因为用户会发现 这个视图中的提示很有用 Tip View 在 SwiftUI 和 UIKit 中 都可用 而且我们提供了很多种样式 这样它们在任何 App 中都很美观 Siri 提示 最好根据上下文放置 以便与屏幕上的内容相关联 除了聚焦和 Siri 提示 你的用户也可以使用一些方法 在 App 内外 找到有关 App 快捷指令的信息
如果你想深入了解 App Intents 和 App 快捷指令的相关信息 请查看 WWDC22 的两个讲座 “深入研究 App Intents”是概述 App Intents 框架的极佳方法 “使用 App Intents 创建 App 快捷指令”探索了多种 用户通过 App 快捷指令 获得的用户体验 例如 消除多个可能的参数值的歧义
现在 我已经创建了我的 第一个 App 快捷指令 我想向你介绍今年的新功能 让你能充分利用 App 快捷指令 以及 iOS 17 优秀的新功能
我们已经 在 iOS 17 中更新了 App Intents 和 App 快捷指令 的显示方式 这种新设计能让用户 更容易发现 App 的意图 以及提供了用于 App 最重要作用 的一键式访问 App 快捷指令现在也在 聚焦中占据了显著位置 不仅仅包括这里显示的 常用 App 快捷指令 我们今年也添加了新的 API 让你的 App 快捷指令 在视觉上更独特 我们还引入了聚焦 来凸显用户的感兴趣实体
快捷键自动化设置已经 进行了重新设计 变得更容易使用 你的 App 快捷指令 也包括在了里面 所以用户使用起来会更方便
为了利用所有新功能 并让用户注意你的 App 快捷指令 我们围绕颜色推出了新的 API 实体缩略图以及带有符号的短标题 所有 App 快捷指令 都需要这些新的 API 并且这些 API 能帮你的 App 真正脱颖而出
从颜色开始 你可以在 App 的 Info plist 文件 里设置两种颜色 这是 App 出现在 聚焦或者快捷指令中时 系统会使用的颜色 考虑采用和你 App 内部风格 相似的颜色 这样你就可以 把一些 App 内部体验 带到系统的其他部分 接下来 你 App 的每个实体实例 都可以有一个可选的缩略图 这是既有 DisplayRepresentation API 的扩展 你的缩略图可以是 图片所在的 URL 地址 代表图片的数据对象 已命名的捆绑图片资源 或者系统图片名称 为你的实体选择一个 独特而鲜明的图片 这会使你在聚焦中的外观更有魅力 最后 每个 App 快捷指令 都要有一个短标题和系统图片 出现在聚焦或者快捷指令中时 短标题和系统图片 被用于样式化操作 选择一些独特的 能够代表 App 快捷指令功能的图片
除了这些让 App 快捷指令 在系统中有视觉特色的新方法 我们今年对 App 快捷指令 与 Siri 的配合使用 作了重大改进 在 iOS 16 中 Siri 只能完全按照 你在源代码和字符串文件中 定义过的词组来识别 App 快捷指令触发词组 但是使用你 App 的用户 在尝试访问你的 App 快捷指令时 可能会使用不同的词语和短语 例如 在我的 App 里 我把口述 “使用 Demo 总结我的杂货清单 ” 作为访问 App 快捷指令 的触发短语 但是和这个短语很相似 也很合理的一些短语 比如 “用 Demo 告诉我杂货清单的摘要” 就不起作用 在 iOS 17 中 你能更自然地说话 来触发 App 快捷指令 它利用了设备端的机器学习 让那些与你在 App 快捷指令中 定义过的相似的短语 也能访问快捷指令 这得益于新的 Semantic Similarity Index
有了这项新的灵活匹配功能 用户可以用更自然的方式 调用 App 快捷指令 而且你不需要提供 每一种可能的不同措辞 最重要的是 这种灵活的匹配功能 不需要改变任何代码 只需使用 Xcode 15 重建你的 App 与你既有的短语 相似的短语就可以发挥作用了 如果你还没准备好 采用灵活匹配功能 你可以通过禁用 “Enable App Shortcuts Flexible Matching” 构建设置来选择退出这个功能 并还原为只在 App 快捷指令中 采用精准匹配功能
为了进一步拓宽 App 快捷指令短语的自然度 我们还新增了一个同义词 API 这是对 DisplayRepresentation API 的一个小补充 这样你就可以为 AppEntities 和 AppEnum 案例定义额外的同义词 更自然地与 Siri 对话 能够进一步扩宽 App 快捷指令的使用范围 例如 在我的 App 里 我可以通过触发短语中的替换名称 调用我的列表
如果我没有预先指定列表 在 Siri 提示我指定列表的时候 同义词也能起作用 这些同义词 和实体的每个实例相关联 如果发生变化的话 你应该再次调用 updateAppShortcutParameters
我们还新增了一个新的否定短语 API 来支持灵活匹配功能 只有在你发现 不属于你的 App 快捷指令的短语 仍错误地调用了你的 App 的时候 你才需要使用这个 API 在这个例子中 “把 Demo 摘要发送到我的杂货店 ” 可能会错误地触发 我的 App Shortcut 所以我要把这个短语加到 否定短语中
最后 用 Siri 测试 App 快捷指令 会比较缓慢 每次都需要你构建并运行你的 App 并与 Siri 对话 如果你想在多个区域测试的话 尤其费时间 为了让 App 快捷指令的编写 更快更简单 我们在 Xcode 中 引入了一个强大的新工具 叫做 App Shortcuts Preview 你需要注意的是 App Shortcuts Preview 只有在 macOS Sonoma 上运行 Xcode 15 时 才可用 我们来看个示例 这里是我的 Demo App 项目 我已经预先 创建好了 App 快捷指令 我可以通过启动 App 并与 Siri 对话来测试我的 App 快捷指令 但是我想向你展示一种更快速的方法 来快速预览短语的效果 我们可以在 App Shortcuts Preview 的产品栏找到这个新功能 这个方法需要先构建 App 以便生成 Semantic Similarity Index 构建完成后 我只需要在左侧选择我的 App 然后立即开始输入 我认为用户会对 Siri 说的短语 我们来试几个我知道会生效的短语 因为我在代码中定义过了 “用 Demo 总结购物清单” 这与我的 SummarizeList 意图 完美匹配
我们再来试一个和这个短语相似 但是我没定义过的短语 “用 Demo 给我购物清单摘要”
得益于灵活匹配功能的存在 这个短语也和同样的意图相匹配 而我不需要做任何额外工作
现在我们再来试试第三个短语 这个短语可能有点不同 无法准确识别 “用 Demo 给我购物清单要点” 这个短语在 App 里 没有任何匹配的快捷指令 快速在 App 快捷指令中 添加一个新短语 重建并再一次测试这个短语
“用 Demo 给我购物清单要点” 这个时候就有匹配的快捷指令了 而且不需要运行 App 就能验证这一点 现在我想用普通话 测试我的 App 不需要切换语言 运行 App 或者询问 Siri 我只需要在 Preview 中 使用区域设置 这样就能让我立即测试新短语 “产生一个新的清单”
看这里 我不需要使用开发设备 这个普通话短语就能起作用
App Shortcuts Preview 是一种更快捷的办法 能够手动测试你的 App 快捷指令 与 Siri 的协同程度 而且能让 App 快捷指令的开发 变的更轻松 在 iOS 17 中 我们也改进了你本地化 App 快捷指令触发短语的方式 以及新的字符串目录格式 之前 每个区域 App 快捷指令触发短语 的数量有限 比如 如果你在 Swift 代码中定义了 5 个 App 快捷指令触发短语 那么你每个区域就只能使用 5 个 在 iOS 17 中 有了字符串目录的存在 这一限制没有了 这样你就可以在每个区域 根据自然而然的需要 拥有尽可能多的触发短语 请注意 这个功能只适用于 iOS 17 及以后版本的 App 利用这个新功能很简单 如果你在今年前还没有在 App 中 采用 App 快捷指令 你只需要创建一个名叫 “AppShortcuts”的字符串目录
重建 App 后 你会看到你在 AppShortcutsProvider 中 定义的短语自动填充
在你编辑 Swift 源代码并重建时 新的字符串目录格式也会跟着 自动增加或删除一些短语 或者 如果你在今年之前 已经采用了 App 快捷指令 你只需要把 AppShortcuts.strings 文件迁移到字符串目录
只需要在 Xcode 中点击这个文件 然后跟随迁移助理操作即可 完成迁移和重建后 你就会看到你的触发短语自动填充 并且保留了任何 你可能已经完成的本地化
一旦文件迁移到字符串目录 你就可以不受限制地为每个区域 增加额外的触发短语
灵活匹配功能 新的 App Shortcuts Preview 和字符串目录让 App 快捷指令和 Siri 的配合更加流畅 这里是一些 让你的触发短语更出色的贴士: 选择让人印象深刻的短语很重要 因为你 App 用户的手机上有很多 其他支持 App 快捷指令的 App 而且实际上 他们也没办法确切地记住 如何启用他们的快捷指令 利用 App 名称的同义词 这将拓宽用户 调用你 App 快捷指令的方式 不要在 Swift 源代码中使用 非供人识读的占位符 如果你在你的短语中 引用了任何参数 那么这些参数必须由我之前演示的 插值字符串占位符定义 这是运行时 正确加载和填充这些占位符 所必须的 此外 在 App 里采用 App 快捷指令时 你要注意 App 快捷指令 的一些限制 你的 App 最多能有 10 个 App 快捷指令 整个 App 最多有 1000 个触发短语 注意这个数字包括所有的参数组合 举个例子 如果一个参数有 10 个可能的值 那么有效触发短语的数量 就会扩大 10 倍 你可以通过确保短语中的任何参数 都没有太多可能的值 来避免达到这个限制 使用 App Shortcuts Preview 测试 也有助于确保你不会定义 可能已经被 灵活匹配覆盖的多余短语 所有的触发短语都必须包含 你 App 的名称或者名称的同义词 如果你想了解更多关于如何定义 其他 App 同义名称的相关信息 请参阅与本视频相关的链接
打开 App 的 App 快捷指令现在 可以在聚焦里显示了 如果你有一个 通过实体打开 App 的 App 意图 这个意图要符合 OpenIntent 协议
我已经介绍了如何 创建优秀的 App 快捷指令体验 接下来再谈谈 如何在 iPhone 以外的更多设备上 创造同样出色的体验 App 快捷指令现在可以在 Apple Watch 上使用 但是你要注意一些限制 才能获得最佳体验 Apple Watch 上的 App 快捷指令必须来自 设备本身安装的 watchOS App 配对的 iOS 设备上的 App 快捷指令 不能在 Watch 上运行 这意味着 如果你在 iPhone 上安装了 iOS App 但是没有安装 相应的 watchOS App 那么你的 App 快捷指令 就无法在 watchOS 上运行
我们无法在 Apple Watch 上 通过 Siri 使用灵活匹配功能 所以必须准确地说出触发短语 watchOS 9.2 引入了 对 Apple Watch 的支持 所有运行这个版本或更高版本的设备 都可以使用 Apple Watch
我们现在在 Apple Watch 上 也能发现 App 快捷指令了 和 iOS 一样 watchOS 上的 快捷指令 App 突出显示了 设备支持的 App 快捷指令
此外 HomePod 现在也支持 App 快捷指令 这就需要 在配套的 iOS 或 iPadOS 设备上 安装支持 App 快捷指令的 App 和在 iOS 或 iPadOS 上运行不同 在 iOS 或 iPadOS 上运行 可以启动 App 但是在 HomePod 上 App 快捷指令 可能根本就无法启动 App 例如 只要在 iPhone 上安装我的 Demo App 我就能对 HomePod 说 “嘿 Siri 用 Demo 总结我的杂货清单” HomePod 从 16.2 及更新版本 开始支持 App 快捷指令
为 HomePod 设计 App 快捷指令时 要考虑到它是一台纯语音设备 确保你通过 Siri 返回了清楚、简洁的对话 因为这台设备 不会产生任何相应的视觉效果 IntentDialog 类 有一个初始化程序 能接受“full” 和“supporting”字符串 HomePod 使用“full”对话框 而 iPhone 等可视化设备则 使用备用的“supporting”对话框 这样在用户可以参考可视化输出时 你可以更简要地描述 在不能查看屏幕的时候 你可以保持完整地描述
如果你想了解更多关于 如何设计 App 快捷指令的信息 以及了解更多纯语音使用案例 请查看 WWDC22 “设计 App 快捷指令”讲座
最后 我想重申一些关键要点 App 快捷指令有助于提高 你的 App 功能 在整个系统中的可见性 并降低在习惯性使用 App 过程中 遇到的阻力
聚焦的突出位置 有助于提高 App 的使用率 更多的样式选择 让你的 App 脱颖而出 这让用户更容易发现 你的 App 快捷指令
灵活匹配功能让通过 Siri 启用的 App 快捷指令得到了极大改进 用户可以更轻松地通过声音 触发 App 快捷指令 借助 Xcode 中的 新 App Shortcuts Preview 工具 开发和测试 App 快捷指令 变的更快 更简单
如果你想更深入地研究 App 意图和 App 快捷指令 今年还有两个讲座 你可以查看一下
有了这些改进 我想 App 快捷指令会非常适合 你的 App 和你的用户 期待能看到你创建的 所有优秀的 App 快捷指令 ♪ ♪
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。