大多数浏览器和
Developer App 均支持流媒体播放。
-
快捷指令参数简介
各种参数让 Siri 快捷指令变得更加出色,不仅通过跟进问题实现 Siri 互动式语音体验,而且还让用户可以自定“快捷指令”app (现已内建在 iOS 中) 中的快捷指令。详细了解如何设置快捷指令来利用各种参数,并了解在“快捷指令”app 中创建多步骤快捷指令时您的快捷指令如何将输出传递到其他操作。
资源
相关视频
WWDC19
-
下载
大家好 我是 Ari 今天我在这里 非常激动地 要告诉你们一些 在 iOS 13 中快捷指令上的一些更新
在 iOS 12 当中引入快捷指令 API 的时候 我们提供了 SiriKit 它可以把你在 App 中的操作 和 Siri 连接起来
在 App 中被提供出来的捷径操作 可以以三种不同的方式被使用 它们可以被用作建议 可以通过语音被使用 他们也可以被用作为 多步快捷指令的一部分 现在通过建议 Siri 会适时地 在搜索过程中 以及屏幕锁定的情况下 建议用户使用开发者编写好的捷径 这样用户每天在使用你们的 App 的时候 所做的各项操作就可以获得更高效的体验
利用声音 顾客可以 通过询问 Siri 来使用 你们 App 中的任意功能
这个功能真的非常强大 因为快捷指令可以以一种非常简单的方式 让用户通过语音来使用你开发的 App 它可以让用户以一种全新的方式 来运用你的 App 无论用户是正在戴着 AirPods 走路 还是在车里用着车载 CarPlay 或是在家用着 HomePod 又或者只是 在房间的另一侧 一切都只需要一句 "Hey Siri"
最后呢 用户还可以在快捷指令 App 中 创建他们自己的快捷指令 这些快捷指令可以包含多个捷径操作 当然也包括由你们的 App 所提供的捷径操作 今年 我们将从更深的层次 来探讨快捷指令 API 我们有一些非常激动人心的 API 更新来分享给你们 它们可以将 语音控制以及多步骤快捷指令提升至 一个更高的级别
那么让我们来看看都更新了些什么吧
在 iOS 13 中快捷指令 App 被重新设计了 它被嵌入到了 iOS 系统中 所以现在人们可以 用目前最简单的方式来发现和使用快捷指令
在我们去年公布了 快捷指令之后 我们从开发者那里听到最大的需求 就是增加参数 所以我们非常激动地想分享给各位开发者们 在 iOS 13 中 我们引入了对参数的支持 通过支持参数可以实现 一种我们称之为对话型捷径的功能 这项功能基本上可以满足 用户与你的 App 进行对话 并且开发者还可以控制这类对话 这样一来你就可以引导用户 提供你所需要的信息 并且可以根据用户的输入及当时的语境 来进行动态响应 在人们使用 Siri 和 App 的时候 这项功能可以提供给人们 一些全新的用例 我很高兴在稍后 告诉各位开发者有关这一功能的详尽信息 之后 我们还为用户增加了一种全新的方式 来自定义开发者提供的快捷指令 用户可以用到一种新的定制 UI 用户在这个 UI 中的设定 和开发者为语音交互定制参数 可以起到相同的效果 你还可以启用输出和变量 等高级方案
最后我们还为 Siri UI 增加了一项更新 它可以让人们更简单地 开启你编写在 App 内的快捷指令 那么 让我们来看一下 这些新的功能 对 Siri 内部的语音体验有些什么意义吧
我有一个非常棒的新的 Siri 快捷指令 给它起名叫 "Add to Instacart" 它的功能就是把东西添加到购物车 所以 有了对话型快捷指令后 当我说 "Add to Instacart" Instacart 就会通过定制的对话问我 想要把什么添加到购物车 之后我说 香蕉 再之后能就会弹出来 一些香蕉的选项 在消除掉一些歧义的选项后 Instacart 会问我想要具体哪一个香蕉 我说 我想要有机香蕉 所以 如果整个对话的 上下文是顺遂的话 App 可以根据我到目前所说的内容 提出其他问题 在这个用例中 Instacart 会问我 我想要几个香蕉 之后我说 6 个 最后 Siri 会用我给 Instacart 自定义的对话和自定义的视觉效果 来让我知道 这项任务已经完成了
我还有另一个新的快捷指令 这次的指令是来自于 MLB At Bat 这款 App 的效果是 "我只需说一句"Hey Siri 我要看棒球" 之后它就会弹出 我最喜欢的队伍的比赛
不过 现在并没有 Phillies 这支队的比赛 但是在有了 对话型快捷指令之后 MLB App 可以进行适当地检测和恢复 以此来让我知道 现在没有正在进行中的比赛 并且取而代之地给我一些 没准我想看的其他一些比赛的选项
这只是两个粗略的用例 来让大家了解可以用 Siri 做什么 一会儿我们就会深入了解它是怎么实现的 但是首先 让我们来聊聊 在 iOS 13 里快捷指令 App 的一些更新吧
现在快捷指令 App 已经被嵌入到了 iOS 内部 你不需要再从 App Store 里下载它了 就在这个 App 里 用户就可以管理他所有的快捷指令 所以之前在这里设置的一切快捷指令 也都还是在这里面进行设置 在我的快捷指令标签里 用户可以看到所有的快捷指令 这些快捷指令已经被设定好了 用户可以通过点击或对 Siri 说出快捷指令的名字来启动 无需事先录制短语来激活对应的快捷指令 在 iOS 13 里 我们还设定了一个全新的自动化选项卡 用户可以将某些快捷方式设置为 在某些特定情况下 自动地显示甚至是自动地运行 比如说当他们到达特定的地点 或是进入车内 又或者是在早上 闹钟响起来的时候 现在我们都知道了 快捷指令是非常实用的 但是很难从零开始去使用它们 所以我们在快捷指令中心里 事先准备好了一些快捷指令 用户可以从这里开始使用它们 今年 我们还更新了快捷指令中心 在其中加入了一个新的部分 它叫做来自你的 App 的快捷指令 这里面重点介绍给用户的就是 来自第三方的捷径 其中也包含你的 App
所以这是一个非常好的机会 可以将你的 App 的操作 展现给用户 即便是用户并未使用你开发的 App 在快捷指令编辑器内 也更新了一个新的自然语言格式 这是它在编辑器里的效果 用户给 Soup Chef 这款 App 建立了一条快捷指令 注意一下我的 App 是如何来公开这条 描述的 "订购一份蛤蜊浓汤" 用户只需点击其中的一个按钮 就可以随时地 调整这些参数 像是点一下 "一份" 或者是 "蛤蜊浓汤"
在这个编辑器里 还有一个新的操控窗格 你可以通过点击或者拖动 添加第三方 App 提供的功能行动 现在 你的 App 的操作 可以提供输出参数 这意味着它可以 和其他的操作进行链接 以此来创造更强大的快捷指令 举例来看 Soup Chef 这款 App 可以提供一个预计完成时间的参数 所以你可以添加这个参数 到“添加新的提醒”的操作之中 来创建一条新的快捷指令 去提醒你在汤做好的时候去拿它 所以 这就是快捷指令 App 的新内容 我们还有一些针对 Siri 的更新
一直以来 用户很难发现 语音功能该如何使用 因为他们不知道 App 的哪些功能可以通过语音来使用 或通过什么样的语音指令可使用这些功能 添加至 Siri 使这件事得以简化 因为人们已经使用了你的 App 因此 你可以在 App 的相关部分 增加一个"添加至 Siri"按钮 不过前提是用户希望用声音 来使用你 App 里的对应功能 在 iOS 13 里 我们重新设计了 添加至 Siri 弹窗 在这一全新的 UI 中 用户可以设置快捷指令 并且无需录入语音短语 用户可以直接输入一个短语 或者可以直接用一个 开发者建议的短语
之后 只要你说出这个短语 Siri 就会执行这条快捷指令 之后如果用户点一下 Do 下面的这个模块 用户就可以自定义这条快捷指令 和在快捷指令 App 里的操作是一样的 现在 我们来深入了解一下执行 首先 我们要介绍一下 如何让用户可以 自定义开发者编好的快捷指令 然后我们将介绍参数的解析 以及如何使用参数解析 来实现出色的语音体验 之后 我们将会讲解 如何处理其中的那些 互相依赖的参数 最后我们将介绍 动态选项和输出 是如何帮助开发者在快捷指令中 将其操作提升至一个新的层级
那么 我们就从一款我开发的 App 的自定义快捷指令 来开始吧
我真的非常喜欢喝汤 所以我在致力于 开发一款叫 Soup Chef 的 App 人们可以利用这个 App 从自己喜欢饭店里选购汤 我希望这个快捷指令 可以让用户订购汤 并且可以从操作内部 选择要订购几份汤
那么为了实现这个目的 让我们从 Xcode 的 Intent Editor 来开始吧
就像各位所熟知的那样 一个 Intent 就是用户可以在 你的 App 里实现的任务的一个范本 在这个案例当中 主要意图就是订购汤
你应该为用户 完成这项任务 所需要的每条信息 都定义参数 在这儿定义的参数集 既可以用于 Siri 在对话型快捷指令里 提出的问题集之中 也可以用在 快捷指令编辑器内的参数集之中
对于每一个你添加到 Intent 内的参数的类型而言 你可以从系统提供的受支持的类型中 进行选择 或者也可以创建 Enum 枚举类型 在 iOS 13 里 你甚至可以给参数自定义类型 当你选择了某个类型之后 你会看到一些其他设置 这些设置可以让你在这一类型内 自定义一些特定的具体选项 例如 假如我选了字符串类型 我会看到一些新的选项 用来大写或者自动更正
对于这项参数 我打算选一个汤的枚举类型 我已经创建好了 现在 因为我正在更新现有参数 所以我需要 检查 User Facing 复选框 以便可以将这个参数 公开给 Siri 和 快捷指令 App 对于我添加的新参数 默认情况下会对其进行检查 接下来 我需要为我的参数 填写一些新的信息 我打算给这个参数添加显示名称 因为在快捷指令编辑器里 这个参数需要被显示出来 因为这是一个现有的 Intent 我还需要检查 这个 Intend 的 用户可配置这一复选框 这使得 Intent 可以作为一个整体 被 Siri 和 快捷指令 App 所使用 最后 我需要 填写一个参数 summary 我想在这个参数 summary 里 包括数量和汤的类型这两个参数 以便用户 在快捷指令编辑器中 可以轻松调整它们 所以我添加了一个字符串 叫"订购某个数量的汤" 并且我会让 Xcode 将 数量和汤变成变量 仅需这么几步 你就可以将你的捷径操作 像是这样呈现在快捷指令编辑器里 现在 Intent 已经是可配置的了 并且它出现在了 快捷指令 App 之中 它已经是一个现成的参数了 所以 接下来 我们需要做的 就是解析 Intent 的参数 我们来看看怎么操作 在 iOS 12 中 当用户通过 Siri 调用快捷指令时 会经历两个阶段 首先是 Confirm 之后是 Handle
今年 我们又增加了一个阶段 称之为 Resolve 如果你之前 已经使用过 SiriKit API 那么你应该对它很熟悉
在解决这个阶段内 Siri 会遍历你在 Intent 上 定义的每个参数 并要求你的 Intent 处理程序 来解决每个参数 以此来决定是否需要 询问用户一个问题 对于 Soup Chef 这款 App Siri 会先解决汤这个参数 Siri 也许会问一个类似 "你想要哪一款汤"这样的问题
接下来 它会解决数量这个参数 会问一个 类似于 "你想要几份汤"这样的问题 在最后 它会问一个关于在哪儿买汤的问题 比如"你想在哪家餐厅订购你的汤"
在解决掉所有参数后 Siri 将调用 和 iOS 12 中相同的 Confirm 和 Handle 方法 那么让我们来看一下 这在代码中是如何实现的吧 因为 Xcode 会自动地 为你定义的每个 Intent 生成一个 Intent 处理协议 并在 Intent 处理程序中 实现该协议 在 iOS 12 中 Xcode 生成了 Confirm 和 Handle 这两个方法 实现这两个方法就可以 保证你的 Intent 被执行
但是在今年 Xcode 还会为 你标记为可配置的各个参数 生成名叫 Resolve 的方法 Siri 将调用 Resolve 方法 并按照你在 Xcode 中 定义的参数的顺序 来提出问题 你还可以在 Xcode 中 拖放参数 以更改参数被解决的顺序
调用 Resolve 方法的时候 Intent 将作为输入 被传给 Resolve 方法 其中包括当前 正在被解决的参数的值 所以这个参数的值 可以来自几个不同的地方
当 Resolve 方法第一次被调用 此时快捷指令正在运行 这个参数的值 将在用户创建这个快捷指令的时候 被设定上去 在这个例子中 汤这个域是空的 因为用户没准有的时候想订一份蛤蜊浓汤 而有时又想订一份西红柿浓汤 用户想要创建一个快捷指令 可以都每次 询问他们究竟想要哪一款汤
因此 当调用 Resolve 方法时 汤这个参数将先被填充为空 因为对于这个快捷指令中 现在没有填充任何内容 会根据用户的选择 把这个参数的值传给 Intent 后 再传给 Resolve 方法 Resolve 方法的职责 就是提供 一个决议结果 来决定 Siri 接下来要做什么 现在 因为汤这个参数现在是空的 所以 Soup Chef 这个 App 就想从用户那里 获得参数的值 通过传递需求值的解析结果
为实现传递需求值这个目的 Siri 会询问用户 用户用声音回应 Siri 的问题 来给这个参数赋上值
所以 Soup Chef 就会问 "你想要哪一款汤" 用户可以回答 像是"蛤蜊浓汤"这样的答案 这样一来 用户回答的 "蛤蜊浓汤" 就会作为输入 被填充给 Intent 之后这次再调用 Resolve 方法时 它就有了"蛤蜊浓汤"这项输入值 这样 App 就可以决定下一步要做什么了 在上面描述的案例里 蛤蜊浓汤 是一个有效值 因为它是有库存的 所以 Resolve 方法 会返回 success 这样 Siri 就能继续 来询问列表里的下一个参数 用户可能会 在设定这条快捷指令的时候 就把汤的值预设成了 蛤蜊浓汤 因为用户希望他的 快捷指令可以每次不必询问他 就直接订购好蛤蜊浓汤 那么初次传递给 Resolve 方法的 就不会是空值了 而是预设好的值 Resolve 方法会直接返回成功执行的结果 之后 Siri 就 压根不会询问有关这个参数的任何问题了 因此 在 Resolve 被实现的过程中 你需要查看 参数在 Intent 上的当前值 如果参数没有值 你可能需要返回 Needs Value 这个参数 以此来询问用户获得参数值 如果用户已经 在创建快捷指令的时候 预设了参数值 或者是他们回答了 Siri 的问题 这时 可能已经存在了准备好的参数值 在等待被验证 并且等待被顺利地通过 因此 每次调用 Resolve 方法时 都需要提供 对应参数值的解析结果 下面的内容将由 Roman 来介绍 他会告诉各位 如何提供出色的解析结果 以便在 Siri 中 提供完善的语音体验 Roman 谢谢 Ari 大家好 当我在构建语音体验的时候 我希望可以考虑到 用户可能说出的所有情况 以及该如何妥善地处理它们 比方说 如果用户 想要订购的汤的数量超过了我们的库存 我们应该适当地反馈给用户 如果用户想要 从一家距离很远的店里订购汤 我们可以给用户提供一些距离更近的店铺 来供其选择 Resolve 这一步骤 是开发者改进 Siri 行为的一个契机 并且可以由此来决定 Siri 是否需要向用户提出问题 这里就是开发者处理 用户的所有输入情况的地方
为达成这一目的 你需要提供 Result 的值
共有 6 种类型的 Result 可供选择 让我们先从 needsValue 这一类型开始 来看下每一个类型的效果吧
如果用户没有在创建快捷指令的时候 就预设指定的参数值 并且你需要一个参数值才能继续 此时你就可以告诉 Siri 你需要一个值
你需要为每个你可以解决的参数 提供一个你设定的 自定义提示对话框
为此 你需要打开 Intent editor 选择 Siri Dialog 对话框 以此来进行参数的询问 然后在提示文本字段中 输入自定义的提示内容
如果你返回的是 disambiguation Siri 将要求用户 从值的列表中进行选择 如果参数中的值不明确 或者是你只有几个选项 可供用户选择的话 使用这种参数是一个很好的选择
你可以在 Intent editor 中 自定义 disambiguation 项的对话框 返回 unsupported 的结果 将会告诉 Siri 你的 App 不支持提供的值
比方说 如果用户尝试订购超出库存的汤 我们可以通过告诉用户 没有足够的库存 来做出合理的回应 之后 Siri 会重新 提示用户录入合理的值 我们可以 在 Xcode 的 Validation Error 部分下 定义要像用户显示的错误信息
Xcode 将自动地为开发者 在 Intent editor 中 指定的最小值和最大值 提供默认行为 返回 confirmation Required 时 Siri 将会要求 用户确认参数值
如果不清楚用户是否真的 想要这个参数值 或者是你有一个十分强烈的猜测 且仍想与用户确认参数值 那么就使用这个项吧
同样的 你也可以在 Intent editor 里的 Parameter Confirmation 选项中进行自定义 返回 success 意味着 获得了一个合理的参数值 Siri 便将会去询问下一个参数 返回 notRequired 意味着 你的 App 在这个参数上 这一次并不需要参数值 因此 Siri 将会跳过这个参数 并去询问下一个参数
在 Siri 和快捷指令 App 中 快捷指令被执行时 都会调用 Result 方法 因此 你需要确保 你的代码在这两个环境下 都能正常运行
现在 让我们来看看 执行流程是什么样的 这就是新的快捷指令 App 在我的快捷指令中 你可以看到我创建的 或是从快捷指令中心中添加的所有快捷指令 我们现在要创建一个新的快捷指令 点击创建快捷指令按钮 在快捷指令编辑器里 我需要把操作添加到快捷指令里 为此 我们点击 添加操作按钮 我日常会使用 Soup Chef 来订购 美味的汤 所以这里已经给了我订购汤的建议选项
所有需要做的就是给它起个名字
这就是我的快捷指令 所有我需要做的就是 给它一个名字再把它存到“我的快捷指令”中 为实现这件事 我需要点击“下一步”按钮 我们就给这个快捷指令命名为 "Order Soup"
现在 我们来调用 快捷指令和 Siri 试下效果 "Hey Siri 点汤"
"你想要什么汤" 今天有 3 种汤可供选择 蛤蜊浓汤 西红柿浓汤 或者是鸡肉面条汤 蛤蜊浓汤 有两家餐馆离你比较近 你想从哪一家订购 38801 S Sheridan Blvd 或者是 7401 S Lewis Ave 第一家吧 准备好订购了么 是的 好的 订购中 总共花费 3.75 美元 你订购的蛤蜊浓汤将在 10 分钟后准备完成 就这样 我就用快捷指令和 Siri 订购好了汤 现在 我们来试着在快捷指令 App 内 编写一个一样的快捷指令吧 不过在此之前 我想先自定义一下这个快捷指令
我打算点一下汤这个位置 之后再选某个汤 选一个我日常从 Soup Chef 里订购的汤吧 我打算选蛤蜊浓汤
现在我要点击完成 来保存这个快捷指令
我们尝试一下只靠简单点击 在快捷指令 App 中 编写一个快捷方式 所以在这里我得到了一个 消除了歧义项的商店的选项列表 和在 Siri 里的也是一样的 我打算选第一个选项
然后完成 这样我就又点了一份汤 我猜可能我今天特别饿吧
现在 我们来看一下 如何让我们的快捷指令更进一层
要是不用走出家门 就能有汤送货上门 岂不是更好
所以 我要在在汤店送货上门 这一过程中加点新东西 在快捷指令编辑器里 我希望用户可以在 到店自取和送货上门中进行选择 如果用户选择送货上门 我们就给他展示一个模块 让他们可以决定把汤送到哪儿 比方说 送到现在用户所在的位置
如果他们选择到店自取 就给用户展示另一个模块 让他们来决定订购哪一家店的汤
为了达成这一目标 我们需要在 Intent editor 里 设置并表达好参数的联动 那么让我们先来 看一下这其中涉及的所有参数 我们设定一个 orderType 参数 它包含两个值 delivery 和 pickup 对于送货上门的 deliverLocation 和 到店自取的 storeLocation 也创建好参数 现在 让我们来看看 参数的联动这一部分
现在对于 deliverLocation 这个参数 我把他的 Parent Parameter 设定成 orderType 类型的 我想仅当 Parent Parameter 参数的值 是 delivery 的时候 才展现出 deliveryLocation 的参数值 对于 storeLocation 参数 也想实现相同的效果 就是只在 Parent Parameter 的 orderType 的值 是 pickup 的时候再显示 storeLocation 参数
所以现在我的用户 可以简单地选择不同的点单方式
我们来看下怎么在 Xcode 里进行实现
这里我先打开 Soup Chef 项目 我们来选择 Intent definition 文件 这里是定义所有的 Intent 的地方
对于订购汤我已经写好了一些 Intent 我们来看一下这些参数 我们有 soup quantity toppings store location 这 4 个参数 现在我们向下滚动到 Xcode 中称之为 Shortcuts App 的新部分
在这儿 你可以看到 快捷指令 App 支持的 所有的参数组合 以及相应的 summary 你还可以在这个 App 里 查看它的外观预览
所以现在我们 有 storeLocation 这个参数 并且有 summary 来呈现实际的效果 其效果就是"从 storeLocation 这个地点订购某个数量的汤" 我没把 toppings 这个参数 放到我的 summary 里 所以它出现在 More Options
现在我们继续 添加一组参数来支持送货上门 我们点击一下 (+) 按钮并添加一个新的参数 叫做 orderType 我要为这个参数 指定一个显示的名称
所以 如果我向下滚动到 Shortcuts App 的部分 就可以看到 Order Type 现在出现在了 More Options 下面 并且它还被还自动地 添加到了 Support Parameter 组合当中 我们现在滑动到上面 让我们为 Order Type 参数 指定一个新类型 我想要添加一个新的枚举型
我们就把它称之为 Order Type 枚举型吧
我也会为这个类型 指定一个显示名称 现在我们添加了两个用例 delivery 和 pickup 我们先来看 delivery 我们点一下这个 (+) 按钮
输入 delivery 我将指定显示名称 我们再为 pickup 添加一个用例
也给它提供一个显示名称 由于用户在和 Siri 交谈时 可能会把 pickup 说成是 take out 我们可以把这个添加成 一个可以匹配的语素 所以我要点击一下 (+) 按钮 再添加一个 take out
现在我们返回到 Intent 现在我们需要添加一个新参数 叫做 Delivery Location
我们给它也设定一个显示名称 就叫 Delivery Location
现在我们滑动下来 看看我们在下面有了什么新的东西 我们仍然只有一个单独的参数组合 而其中包含着所有的参数
但是同时包含 Store Location 和 Delivery Location 是没有意义的 我们来修复它 我们向上滑动到 参数这个部分
选中 Store Location 这个参数 展开 Relationship 这个部分 再把它的 Parent parameter 设置成 orderType 我希望只有当 Parent Parameter 的 oderType 的值是 pickup 的时候 才显示我的 Store Location 参数
同样的 我们把 Delivery Location 参数也设置成这样 我们把 Parent Parameter 这里 设置成 orderType.
仅当 parent 值是 delivery 时才显示
接下来我们滑动到 Shortcuts App 的部分 看一下其中的变化 Xcode 自动地为我们创建了 两个新的参数组合 我们给它们分别 加上一个合适的 summary 即 订购某数量的某种汤
以某种提货方式送达 现在我们试想下 我们的用户在快捷指令 App 里 点击了 orderType 这个模块 并且选择了 pickup 的提货方式 这样的话 用户看到的就是包含有 storeLocation 即门店地址的参数组合
所以我已经有了 这个参数组合的 summary 摘要 但现在的状况是只有 pickup 一个值 我们现在把这个参数 转变成 orderType
最后我们需要更新 包含有 deliveryLocation 的 参数组合 我们来编写它的 summary 订购某数量的汤 以某种提货方式送到送货地点
我们回退一下 来看一下我们刚都做了些什么 首先我们在 Intent 里定义好 Parent 参数 和 Child 参数 之后 我们给 Parent 参数 和 Child 参数 两者之间建立了关联 之后 在最后我们更新了 每个参数组合的的 summary 使它们在快捷指令 App 里 的呈现更好的效果
现在 我们来看下怎么实现动态选项
大多数的参数如 String 型 或 Number 型 都有明显的输入 机制 快捷指令 App 中的一个输入字段
我们会要求用户 在这里指定某个具体的值
对于某些参数的值 开发者也许会希望用户 在创建快捷指令时 可以从一组固定的值中进行挑选 而这些固定的值是由 你的 App 动态提供的
对于我的 Store Location 这个参数 我希望用户可以 选择一家理他比较近的门店
为了达到这个目的 我需要检查一下 Location parameter 的 Dynamic Options 的复选框是否被选中
当我这么操作之后 Xcode 会生成两个额外的 Intent 协议处理方法 第一种提供的是商店的 位置的选项 而另一种方法提供的是 默认的值
在你的 provide options 这个方法里 你需要在 completion 当中 返回当前可能的值的集合
在勾选了 Dynamic Options 之后 你也可以给这个参数 提供一些默认值
当你设置了 Dynamic Options 的参数 被快捷指令执行的时候 并且你在 Reslove 方法 completion 处理器中 会把需要的值 给成功地返回了出来 Siri 会自动地以 消除歧义项的格式 把你返回过来的选项列表 给显示出来
最后 我希望用户可以 在单个快捷指令当中 进行多种操作
比方说 一个用户 在创建下订单的快捷指令的时候 可以把他所下的订单的 详细信息发送给 经常帮他取货的朋友那里
在 Xcode 11 中 我们引入了定义自定义选项卡的功能 你可以在 Intent 和 Intent responses 当中使用这一功能 所以 现在我要重新定义一个类型 就叫做 Order Details 其中包含的就是 我想传递个下一个操作的 适当的信息集合
在这个例子中 我打算定义两个属性 订单的估计时间和总计的钱数
你也许之前听说过一个 Intent response 其实就是执行尝试的 逻辑结果 它包含有一些属性 这些属性可以把结果传达给用户
为了增加一个输出 我需要给我自定义的这个 orderDetails 类型 定义一个新的属性
之后 我需要把这个属性 指定成输出
当用户点击快捷指令编辑器中的 Order Details 变量的时候 他们会看到一些选项 这些选项就是我定义在 我自定义的 orderDetails 这个类型中的 属性当中的值
你也可以在 Siri 的相应模块中 使用你自定义类型当中的 成员变量 所以这个相同的数据 可以作为输出被同时使用
今天你们可以学到 如何让你的用户 在全新的快捷指令 App 内 定制想要的快捷指令 你还了解到了 如何在 Siri 中提供对话型快捷指令
只要你为每个 Intent 选择好 正确的参数 你的 App 就能够在 每一个步骤中正确的相应并回馈用户
你还可以在快捷指令 App 中 利用其他 App 的输出 来增强你的快捷指令 我们的另一场讲座在星期五 我的同事将和大家谈论 如何设计和建立良好的快捷指令 在这一整个星期内 你也可以来实验室找我们
十分感谢你们的到来 希望你们享受接下来的会议
[掌声]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。