大多数浏览器和
Developer App 均支持流媒体播放。
-
贡献意图并提升您 App 的存在感
了解如何在最需要的时刻让某人在不打开您的 app 的情况下使用其关键部分。了解如何打造意图并贡献给系统,帮助您在 Siri、专注、快捷指令、智能堆叠等功能中显示有关您 app 的相关上下文信息。我们将探索系统如何智能识别信息,并展示构建意图的技术,以帮助提高 app 的参与度和可见性。
资源
相关视频
WWDC21
WWDC20
WWDC18
-
下载
音乐 (捐献意图与扩展App展现)
大家好 欢迎来到WWDC 我叫瑞恩·查普曼 是主动智能团队的一员 今天 我将跟大家探讨 如何通过意图捐献扩展App展现 我们越来越多的设备操作系统 与人们日常使用的App集成在一起 系统与App之间的这种协作 是智能系统体验的核心 它给我们的用户带来了超能力 您的App能够参与这种协作 并在整个系统中扩展 其展现和功能 一种主要方式是捐献意图 在本环节中 我将定义 什么是意图捐献 带您了解意图捐献的整个过程 然后与您探讨如何 成功组织捐献 并最终在整个系统中 扩展App展现 我们先了解一下 什么是意图捐献 三年前我们在iOS 12中 引入了快捷指令 快捷指令允许您将App的功能 展示为操作 它们使人们能够在整个操作系统中 以新的方式和位置使用App的功能 快捷指令是一种强有力的方式 能够吸引用户并 将展现扩展至App之外 通过执行App的关键功能 您展示的每个操作都应是加速的 这意味着App应执行 用户想用它完成的操作 并帮助他们加快完成此类操作 接下来 您展示的每个操作 均为可重复的且是用户持续感兴趣的 这意味着这些操作 应是用户可能想要多次执行的 为用户可能只想做一两次的事情 展示一个操作 这并不是一个好主意 您还应只展示在任何时候都是 无状态且可执行的操作 因为在您的操作投入使用之前 您不能依赖处于 特定状态的某位用户 要了解更多关于什么是出色的操作 请务必查看WWDC 2021的 “为快捷指令 Siri和建议设计 出色的操作”环节 一旦决定了要展示哪些操作 您便可检查快捷指令API了 有两个API可以用来 为您的App采用快捷指令 第一个是 NSUserActivity NSUserActivity是 一种展现App状态的 轻量级方式 它与其他Apple功能集成在一起 如聚焦和接力 第二个是意图 意图是一种详细呈现 App可执行的操作类型的方式 Siri包括一系列出色的内置意图 支持您可以用来 与系统集成的一系列功能 意图还支持您定义自己的自定义意图 以便与快捷指令一起使用 要了解更多关于API 和如何为App采用快捷指令的信息 请务必观看WWDC 2018的 “Siri快捷指令简介”环节 在本环节中 我将重点关注意图 探讨新的和现有的机会 让您在整个系统中提供App的功能 进行意图捐献的第一步是 决定您想采用哪种类型的意图 Siri包括许多出色的内置意图 如消息传递、预订、媒体等 还可以在快捷指令的Xcode中 定义自定义意图 因此 如果您想要构建的操作对应于 默认的内置SiriKit意图之一 那么您应该采用这种操作 您也可以使用Xcode中 的意图定义文件 来定义自己的意图 一旦您决定了要采纳哪个意图 并在App中定义了它 您便可以开始进行意图捐献了 意图捐献是指当有人在您的App中 执行某项操作时 告知系统的行为 系统将存储这些捐献 并使用它们来扩展您的App 在整个系统中的功能和展现 捐献意图的App会 出现在整个系统中 如建议 快捷指令 专注 智能叠放和Siri 既然您已深入理解了意图捐献的含义 接下来我举个例子 来更具体地讲述 意图捐献的过程 如在天气App中 查看天气 使用这个App查看特定位置的天气 是其关键功能 为此我想展示一个操作 这个App已经有了一个小组件 我希望使用我的意图对其进行配置 这样大家就可以在小组件中选择 他们想要查看天气的城市 我们继续学习如何定义查看天气意图 如何将其捐献给系统 以及系统如何使用捐献 在Xcode中定义意图的第一步是 创建意图定义文件 为此 我将添加一个新文件...
...并选择SiriKit 意图定义文件 然后 我将选择任何我想要 在其中使用自定义意图的目标 并确认我想要创建 意图定义文件 一旦创建了意图定义文件 我就可以定义意图了 没有现有的内置系统意图 来查看天气 所以我可以继续添加新的意图 我将此意图称为“查看天气”
从这里,我可以开始定义意图 我将先查看 “意图适用于小组件”选项 因为我想将此意图 配置为App的现有小组件 系统还将能够使用我的意图捐献 来支持Smart Stack 小组件智能化 如果您希望您的意图 也支持Shortcuts App 请选中“用户可以在 Shortcuts App中 配置意图并将其 添加到Siri”选项 在本次演示中 我将取消选中此选项 只关注小组件和建议 我还将选中 “意图有资格 获得Siri建议”选项 因为我希望系统使用我的捐献 来为我的意图提供Siri建议 接下来 我需要定义我的意图的参数 我可以为待查看天气的位置 定义一个参数 接下来我需要选择参数的类型 这个位置代表了 我的App中的一个对象 对应于App中显示天气的城市 所以我将使用一个自定义类型 来表示这个参数 我可以为一个有标识符和 显示字符串的城市 创建一个自定义类型
我们回到位置参数 您可以看到位置的类型 是新的自定义城市类型 我将保留允许用户 在小组件中编辑值的选项 因为我希望这种意图用于小组件配置 由于这个意图不支持 在Siri中运行这个演示 我将取消选中“Siri可以 在运行时询问值”选项 当人们配置小组件时 天气位置列表 将需要由App提供 并将根据 其保存的城市而变化 因此我将选中 “选项是动态提供的”复选框 最后 我只需要 为建议定义支持的参数组合 系统读取意图定义文件 来确定App支持的预测意图 和参数组合 在这种情况下 App支持 带有位置参数集的意图 我将继续添加该参数 作为支持的组合 然后定义建议中显示的摘要 这样就搞定了 我已经定义了自定义意图 以查看小组件和建议可使用的天气 定义了意图之后 当有人在App中 查看特定位置的天气时 我只需将意图捐献给系统 为了捐献意图 我创建了 一个意图类的实例 并设置了它的参数值 创建意图后 我创建了 一个INInteraction 对象的实例 传入意图 然后调用交互对象的捐献方法 将意图捐献给系统 随着时间的推移 系统会在后台存储 这些捐献以及捐献意图时 用户所处的环境 当他们继续在天气App中 查看天气时 App继续进行意图捐献 在这种情况下 他们一直在查看 库比蒂诺和圣地亚哥的天气 系统使用意图参数来确定 意图是否等同 从捐献的颜色可以看出 这两个库比蒂诺捐献是等同的 不同于圣地亚哥的两个捐献 实际上 系统还接收用户设备上 许多其他App的捐献 如果您想随时删除捐献 可以使用我们的删除API来删除 单个捐献或一组捐献 例如 如果用户 从其存储的天气位置中删除了 圣地亚哥天气位置 则您可以删除 与圣地亚哥位置相关联的意图 删除捐献很重要 这样用户就不会在您的App中 获得不相关的操作建议 捐献意图时 可使用INInteraction 标识符和组标识符 来删除您捐献的一个或多个 INInteraction 您可以传入标识符数组 来删除单个交互 也可以传入组标识符 来删除一组交互 那么 系统是如何使用 所有这些意图捐献的呢? 我们来看一下系统内多天 捐献历史的高级视图 在这里您可以看到 一个人三天的捐献和 自其醒来开始 一整天发生的捐献 系统使用机器学习和设备内置智能 来发现数据中的模式 并预测在给定个人当前环境 和过去行为模式的情况下 什么意图是相关的 在这种情况下 您可以 看到用户有一个 与其醒来后查看天气相关的模式 设备内置智能与面向用户的功能集成 向用户展示您的App的 功能和状态 我们看一些相关示例 在此之前 值得注意的是 所有的机器学习和智能 均以保护隐私的方式在设备上进行 这意味着Apple不会收集任何 可用于个人识别用户的数据 说到这里 我们回到刚才的天气示例 我可以使用我定义的 意图来配置App的现有小组件 在配置小组件以使用意图之后 用户将能够选择他们 想要在小组件中查看天气的位置 随着App捐献与小组件配置意图 相匹配的意图 系统现在能够为用户提供 该App的智能叠放 小组件智能 假设用户拥有带 智能叠放的 主屏幕配置 iOS 15中新增了智能支持 小组件建议功能 该功能允许系统在合适的时间建议 将用户叠放中没有的小组件 放在叠放的顶部 为了确定是否应该建议放置小组件 以及提出建议的正确时间 系统利用与您的小组件配置意图 相匹配的意图捐献 在天气示例中 当用户醒来后 智能叠放会在 合适的时间将 天气小组件放在堆栈的顶部 这是用户发现你的小组件 并传递简略信息的好方法 如果他们的叠放中 已经有了天气小组件 那么它将会转至天气小组件 要了解更多关于如何为小组件添加 配置和智能的信息 请观看WWDC 2020大会 您的意图捐献也为Siri建议 背后的设备智能提供支持 这些建议显示在锁定屏幕 聚焦搜索和Siri建议小组件中 这些建议允许用户 一键执行App的关键功能 您的意图也可以在内置的 快捷指令App中使用 作为跨macOS iOS 和watchOS的简单 或复杂多步快捷指令的一部分 捐献也被用来决定 快捷指令App Gallery中的人会 得到什么建议 用户也可以设置一个语音快捷指令 来执行您的自定义意图 只需询问Siri即可 如果您选择使用内置的INSend MessageIntent 您的意图捐献将 通过共享建议来使用 使用户能够轻松 获得对他们最重要的人和组的内容 iOS 15中的新功能 当您在 INSendMessage Intents中捐献时 系统 会使用您捐献中的人 来确定谁与用户当前的 专注模式有强烈关联 这些强关联可用于建议 在某些人收到他们的消息时 将他们添加到其允许通知列表中 在这种情况下 您可以看到 系统建议此用户 考虑根据其过去与Aga的交互 将Aga添加到其工作专注模式的 允许通知列表中 如果您选择使用内置的 INGetReservation DetailsIntent 您的意图捐献将用于根据 当前的交通状况通知用户 什么时候该出发 去预订餐厅 以及什么时候该办理登机手续 当人们打开地图时 也会看到Siri建议 只需轻点一下 即可获得机场方向 iOS 15中的新功能 如果您选择使用内置的 INPlayMedia Intent 您的意图捐献 将显示在锁定屏幕 控制中心和主页App中 的新“正在播放”用户界面中 这是用户开始从您的App中收听 或观看他们喜欢的内容的绝佳方式 用户可能会在您的App中 消费定期媒体内容 如播客 电视节目或电影 在这些情况下 您可以使用 INUpcoming MediaManager API 为系统提供一个用户尚未列出或 观看的可能会感兴趣的内容 的媒体意图列表 系统将过去的媒体捐献 与您的App即将 推出的媒体相结合 以提出更好的媒体建议 您的意图也可以使用INRe levantShortcut API显示在 Siri Watch Face上 INRelevant Shortcut API 使您能够向系统展示相关信息 如时间或位置 以确定快捷指令何时应显示在表盘上 要了解更多关于如何在 Siri表盘上 显示快捷指令的信息 请观看WWDC 2018大会的 “Siri表盘 上的Siri快捷指令” iOS 15中新增了 widgetKind属性 该属性被添加到了 InRelationThread 对象中 因此您可以提示系统何时 在智能叠放中显示 相应的小组件 要了解有关该属性以及 使用方法的更多信息 请观看WWDC 2021的 “小组件智能化”环节 总之 我们已经了解了 意图捐献的原理 并了解了它们是如何用于 将您的App在整个 系统中的展现和功能 扩展到 越来越多的地方 如智能叠放 专注模式建议 快捷指令和Siri 现在 我们已经了解了 意图捐献的原理 接下来我们深入探讨一下 如何成功组织捐献 并最终在整个系统中 扩展App的展现 接下来我们再举个例子 即在咖啡App中订购咖啡 到目前为止 我已经定义了 一个订购咖啡的意图 并展示了两个参数: 咖啡的规格和咖啡款式 在这种情况下 我们有一大杯冰拿铁 让我们看看 如果我在 意图捐献中包含订单日期 会出现什么问题 开始一切正常 出现了 2021年6月7日购买 一大杯冰拿铁的捐献 但是一旦日期改变 意图的日期参数就有了新的值 系统将第二次捐献 视为完全不同的意图 尽管两次捐献都有 相同的款式和规格 随着时间的推移 系统继续以不同的方式对待捐献 您可以看到 根据捐献的颜色 它们在不同的日期是不相同的 如果您查看系统内多天 捐献历史的高级视图 您会发现系统在订购大杯冰拿铁时 找不到有意义的模式 我们来看一下我是如何填写 意图定义文件以了解出错环节的 我为款式、规格和日期 定义了三个参数 并添加了一个支持 这三个参数的参数组合 这一操作告诉系统 它应使用三个参数 来确定如何找到 意图捐献的模式以进行预测 在这种情况下 支持的组合中 包含日期以及款式和规格会使系统 无法正确地找到 捐献的模式 为了解决这个问题 我可以定义一个只包含 规格和款式参数的支持组合 这样一来 系统便知道 在比较意图捐献时 它应该只使用款式和规格参数 来寻找一段时间内的模式 现在 系统将看到一个 大杯冰拿铁的捐献 不再包括日期 然后在第二天 系统看到一大杯冰拿铁 的相同捐献 第三天也一样 如果您再看一遍捐献 历史的高级视图 您会发现现在 有一种模式与刚醒来就 点一大杯冰拿铁有关 为了充分彰显您的捐献的优势 请确保您的意图捐献 可能会重复 且您捐献的意图有效负载 在捐献之间是一致的 这意味着不要包含时间戳 总之 系统逐渐与我们 日常使用的App相集成 意图捐献是一个关键的集成点 通过在整个系统中扩展 App的功能和展现 从捐献意图中获益 感谢您的收听 希望您在WWDC 2021 大会上过得愉快 音乐
-
-
0:01 - Intent donation example
// Donate your intent. let intent = CheckWeatherIntent() intent.location = weatherLocation let interaction = INInteraction(intent: intent, response: nil) interaction.donate { (error) in // Handle the error. }
-
0:02 - Intent deletion example
// Donate your intent. let interaction = INInteraction(intent: intent, response: response) interaction.identifier = "68753A44-4D6F-1226-9C60-0050E4C00067" interaction.groupIdentifier = "san-diego" interaction.donate { (error) in // Handle the error. } // Delete individual donations. INInteraction.delete(with: ["68753A44-4D6F-1226-9C60-0050E4C00067"]) { (error) in // Handle the error. } // Delete group donations. INInteraction.delete(with: "san-diego") { (error) in // Handle the error. }
-
0:03 - Intent donation example 2
// Donate your intent. let intent = OrderCoffeeIntent() intent.item = item intent.size = size intent.date = date let interaction = INInteraction(intent: intent, response: nil) interaction.donate { (error) in // Handle the error. }
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。