大多数浏览器和
Developer App 均支持流媒体播放。
-
通过 Siri 事件建议增加你的生活便利
无论你希望在 App、网站还是电子邮件广告中包含活动信息,Siri 事务建议都能在保证用户隐私的前提下帮助你的受众追踪想要前往的活动事宜。我们将会向你展示如何设置自动在日历 App 中显示的活动事务、管理复杂信息输入、将不同预约类型与活动相关联、以及如何在 iOS 上使用 Siri 事务建议 API 或在网站与邮件中使用 Markup。
资源
- Integrating Your App with Siri Event Suggestions
- Register with Apple for Siri Event Suggestions Markup
相关视频
WWDC23
WWDC20
WWDC19
-
下载
(你好 WWDC 2020)
大家好 欢迎参加WWDC
(通过 Siri 事件建议 增加你的生活便利) 大家好 我叫 Sofiane 在 Apple 主动智能部门工作 今天 我和我的同事 Romain 和 Magnus 将给大家讲讲我们是怎样 轻松实现各种预订与系统的整合 以及这个功能带来的所有好处的 去年在 iOS 13中 我们首次推出了 Siri 事件建议API 过去一年来 我们注意到你们的 app 使用 API 的数量已经显著增加了 我们也听取了你们的反馈意见 做了大量改进 那我们就直奔主题吧 那么 Siri 事件建议是什么呢? 从本质上说 这一功能能把 app 中的预订 极为轻松地添加到日历之中 (订餐:EPIC 牛排) 一个人只需在 app 中预订 就像他们平常订餐一样 然后 这个预订就会 神奇地出现在日历中 就这么简单
系统然后使用设备端智能技术 简化每天涉及预订的相互沟通 例如 在锁定的屏幕上 Siri 会根据当地的交通状况 通知你何时该前往预定餐厅 当你打开地图时 就会收到一条 Siri 的建议 (距离 SFO 32 分钟) 所以 获得前往机场去赶飞机的指示 就这么简单 只需轻轻一按
Siri 还可以主动建议打开“勿扰模式” 这样你就可以专注于重要的事情 如你要看的电影 Siri 甚至可以提供建议 在锁定的屏幕上为你办理登机手续 今天我们将讨论 一些我们所做的增强功能 使你的生活像开发者一样更为简单 也将讨论一些 我们在用户体验方面所做的改进
我们将把演讲分成四个主要部分
我们来看看 预订类别所做的一些激动人心的更新 以及我们是怎样扩展到更多平台的 (新类别和新平台) 接下来 我的同事 Romain 将介绍 一种全新的使用网络标记的方法 用以整合你的网站 和电子邮件中的 Siri 事件建议 (使用网站和电子邮件标记) 在过去的一年里 我们也从大家那里 收获了很好的反馈意见 所以 Magnus 将就一些大家感兴趣的 通知的最佳做法谈谈看法 (通知的最佳做法) 最后是一小段 我们将分享一些 要诀和技巧 使调试更容易些 (调试要诀) 好吧 我们有很多精彩的内容 让我们开始吧 我们已为各种各样的预订类别提供支持 从餐馆到航班 再到各种事件预订 而且今年 我们将增加出行支持力度 准备把巴士和轮船预订纳入其中 和预订火车票一样 它们不是用来预定公共汽车票日票 而是为了预订某一特定时间段车程的 除了支持更多的预订类别之外 我们也在向新的平台扩张 今年 我们很高兴为 macOS Big Sur 带来 Siri 事件建议 你可以使用 Intents.framework 在你的 app 中通知你的预订 包括使用 Mac Catalyst 构建的 app
正像 iOS 一样 所有你需要做的事 只是将你的预订通知系统 就这样 人们将获得与他们今天使用的 一样的设备端智能技术 如在日历中进行一次预订 获得 Siri 建议等
如果你安装了 iOS 和 macOS app 你仍然应该将你的预订 通知到所有平台上 只要你提供的数据是一致的 系统将会使跨平台体验无缝对接 使用端到端加密 自动同步所有设备的预订 应大众要求 我们还通过允许你 使用模拟器使开发比以往更简单 只需把模拟器选定为目标 然后构建并和平常一样运行 app 即可 Siri 事件建议 API 是作为 intents.framework 的一部分提供的 适用于 iOS 上的 app 现在也适用于 Mac 上的
你可以查看一下去年的培训课程 “整合 Siri 事件建议” 该培训深入探讨了这一话题 也是开始使用该 API 的 一种很好的方式
我们真诚希望每个人 都能从同一设备端智能技术中受益 (新的通知方式) (标记) 不管他们怎样编制或访问 他们的预订信息 我们知道大家通过许多渠道与客户互动 有人可能从网站上预订开始 然后使用 app 修改 也许通过确认电子邮件予以核实 这就是为什么我们激动地宣布 我们将要推出整合了邮件 和 Safari 浏览器的全新方法的原因 你所需要做的就是在你的网站 或电子邮件的 HTML 内嵌入网页标记 这个功能就能运行
现在我想邀请我的同事 Romain 来给大家讲讲怎样使用标记在网站 和电子邮件中整合 Siri 事件建议 Romain? 大家好 我叫 Romain 将给大家讲解一下如何将标记添加到 Siri 事件建议的 网站和电子邮件中的问题
这是 iOS 14 和 macOS Big Sur 中的新功能
现在 当你看到 在 Safari 中有一项预订时 系统会查找已添加的标记 并自动将预订添加到日历中
在邮件中 预订被智能地添加到后台的日历中 甚至都不用打开邮件 app
我们甚至在顶部显示了一个有用的 横幅广告 让最重要的信息一目了然 我们利用一个 名为 schema.org 的网络标准 (Siri 事件建议标记) Schema.org 是一个标准化的 标记词汇表 能轻松实现 在网站和电子邮件中标注预订信息 而且因为它是一个标准 所以可以被任何电子邮件客户端 或网络浏览器使用 甚至用在其他平台上 添加标记很容易 我们支持 JSON 和 Microdata 我们创建了我们支持的特定类别 和属性的说明文档 以及一些 帮助大家通过 developer.apple.com 网站入门的示例
让我们看看 如何添加标记到你的电子邮件和网页
这里有一个餐厅预订确认电子邮件的示例 这封电子邮件包含很多有用的信息
例如 我们知道了餐厅的名称 预订的日期和时间 而且还知道了餐厅的电话号码和地址
这就是完整的 JSON-LD 标记的样子 所以 大家在标记中提供的详细信息越多 我们可以为您提供的用户体验就越好 例如 知道预订的地址 就意味着 我们可以在该出发的时候通知用户
再看同一个标记 这次使用的是 Microdata
当用户更改或取消预订时 更新标记就非常重要
对于修改来说 标记应该显示 更新过的预订信息 只要你还在使用 同样的 reservationID Siri 就会自动更新日历事件
在我们的示例中 用户把预订时间 从晚上7:30改成了6:30 于是 我们在 startDate 属性中 反映了这一点 同时保留相同的 reservationID
如果用户取消预订 将 reservationStatus 改为 ReservationCancelled 这时 Siri 会自动取消日历事件
现在 你已拥有了所有你需要的 添加标记到网站和电子邮件的工具 太棒了! 接下来 让我给你讲讲我们的要求
首先 你必须在 Apple 上注册你的域 为此 我们在 developer.apple.com 创建了一个简单的表单 你可以在这里提交你的域和标记样本
我们还要求你的网站使用 HTTPS 你的电子邮件 提供一个有效的 DKIM 签名
有了这些 Safari 浏览器和邮件 将会把你的预订通知给系统
我们还添加了两个禁用此要求的设置 目的是使开发中测试标记变得非常容易
首先 启用你的域进行测试 打开“开发者设置” 在 iOS 上启用“允许”任何域 或在 Mac 上使用下面的命令
同样 对于本地开发 你可以在 iOS 上的开发者设置中 启用未经验证的软件源 或者在 Mac 上使用另一个命令
现在 让我来告诉大家 这些是如何整合到一起的
如前所述 要在我的开发环境中 测试 schema.org 标记 我需要做一些准备工作 首先 设置下项为默认 SuggestionsAllowAnyDomainForMarkup 这将允许未注册的域
好 接下来 因为我的本地环境 没有使用 HTTPS 我将设置 SuggestionsAllow UnverifiedSourceForMarkup 启用未验证的软件源验证检查
搞定
在这个示例中 我将使用一个处理餐厅预订的网站 该网站已经嵌入了 schema.org 标记 我们找一家餐馆吧 这家看起来不错
我们预订本星期五晚上 7:30 的晚餐吧 两位 我准备订餐了
这个网站让我检查是否所有信息都正确 因为预订目前还没有被确认 该信息还不会被添加到日历 信息看起来都对 那我就去确认预定了
因为我的标记中现在包含了确认预订 Safari 浏览器 便把这个预约通知给了系统 我会因此收到这样一份便利的日历通知
我们现在看看 Siri 刚刚创建的日历事件
通过点击通知 我可以看到我需要的所有信息了
我们把这些信息添加到日历吧
如果标记包含 URL 系统可以将其作为日历中的链接提供 因此 我可以快速回到我的网站 访问和管理预订 点击这个链接时 就会直接返回到那个特定页面
我们看一下这个页面上的标记 使用 Safari 浏览器 Web 检查器 查看源代码
在这里你可看到 JSON-LD 标签 其中包含关于预订的所有信息
你可以看到预订已经确认了 reservationID 还有我们刚才看到的 “在 Safari 浏览器中显示”链接的 URL
还有开始预订的时间 采用的是 ISO8601 格式 包括预订发生地的时区
现在假设用户改变了注意 想取消预订
在标记中反映这一变化非常重要 ReservationStatus 更新为 ReservationCancelled
就这样 日历事件会在日历中自动取消
这一特性在邮件中也表现不俗 来自演示网站的自动确认电子邮件中 包含了相同的 schema.org 标记 我们现在在 iOS 上看看这个特性
我刚刚收到一封确认电子邮件 是关于我取消预订的 正在打开 在顶部你可以看到 Siri 检测到了这个事件 但它也知道该预订被取消了 只需轻轻一点 就可直接从横幅广告中删除日历事件
看 没了 这里的关键点是 保留相同的 reservationID 以进行确认、更新和取消 使用 macOS 和 iOS 上的标记 整合 Siri 事件建议就是这么简单 既然你已经了解了 Siri 事件建议标记的工作原理 我想强调几个要点 (指导方针) 尊重开发者说明文档中定义的 每个属性的格式和类型 这很重要
现举例如下
首先 请使用适当的 reservationStatus 例如 只有在预订获得确认后才可使用 ReservationConfirmed 状态 某些情况下 这可能意味着要确保支付已完成
对于日期和时间 我们都知道这可能会很棘手 所以 在这里 使用 ISO8601 格式就显得非常重要 包括预订地点的时区
确保预订的所有标记 都使用相同的 reservationID 如果该预订被修改或取消 这将允许 Siri 更新用户的日历事件 既然您已准备好与 Siri 事件建议整合了 那我们就来讨论一下接下来的步骤 (后续步骤) 同样 请确保添加 能够准确反映你的预订详情的标记 包括正确的状态
使用 Developer Settings 在本地测试标记
最后 一旦经验证你的标记是有效的 就请在 Apple 注册你的域名 这样人们就可以开始享受 一种与你的预订互动的更丰富的体验 现在我将把画面切换给我的同事 Magnus 让他来谈谈通知的最佳做法 多谢 Romain 自从去年发布 API 以来 我们的市场反响良好 也从大家那里 听到了一些有益的反馈信息 有关于大家想让我们添加什么功能的 也有采用这个 API 后遇到的一些挑战的 本节中 我将讨论 一些提供良好用户体验的最佳做法
让我们先快速回顾一下 API 的工作原理 与 Siri 事件建议整合 从 app 中的预订细节开始 作为一个例子 我将使用这款虚构的餐厅预订 app 来走一遍一个典型的通知流程
要向 Siri 发送通知 App 首先将其预订细节映射到 itemReservation 对象 itemReservation 对象 在这里用绿色表示 包含了 app 中显示的预订的详细信息
为了保持简单 我们在本例中只显示 itemReference
itemReservation 对象 被添加到 intent 响应中 与 intent 一道 共同形成 app 通知 Siri 的互动
通知后 Siri 可以创建一个或多个日历事件 并通知用户预订已被添加 至他们的 Siri 事件建议日历
现在用户可以 在日历中访问一些最重要的细节
获取更多细节 或管理预订 我们希望人们 能够轻松地回到大家的 app 我们在日历中加入了一个 "在 App 中显示"按钮来简化此过程
点击"在 App 中显示"按钮 系统将构造一个 INGetReservationDetailsIntent 其中包含用户想要查看的预订信息
intent 使用用于创建事件的 来自通知的容器和项目引用
然后这个 app 与用户的事件 和与 intent 的交互一起被推到前台 这个 app 使用这些信息 向用户显示正确的预订
正如我们所看到的 容器和项目引用是用来启动 app 的 我们从一个类似的 INReservation 属性 预订号来看看这两者有何不同的更多细节 Siri 使用这个预订号码 来识别在所有来源中预订的更改 例如 如果你既支持 你的 app 中的 Siri 事件建议 API 又支持你的电子邮件中 或网站上的 Siri 事件建议标记 那就得确保 所有地方的预订号码都是一样的
与此类似 如果预订因新增信息而被更新或取消 Siri 会使用预订号码 来识别要更新的日历事件
我们之前说过 容器和项目引用是用来启动 app 的 在您的 app 中 项目引用能够 确定一个预订 编号具有唯一性 这个预订可由一个或多个部分组成 例如 在一个有多个航段的预订中 每个航段都是预订的一部分 必须以一个唯一的项目引用 表示为一个单独的 INReservation 对象
项目引用必须具有唯一性的原因 是系统可能会启动你的 app 来显示一次预订的单独部分 就像这个航班预定中的两个航段中的一个
因为我们已经了解了 容器和项目引用的用途 让我们来看一些具体的预订示例 以及我们如何为它们选择比较好的数值 我将使用上一节中 我们看到过的 app 作为示例 在这个 app 中 用户可以像在屏幕上显示的一样预订餐厅 在这个预订中 预订号码标识出了预订的所有部分 在这个例子中只有一个部分 所以我把它作为 containerReference (单一部分预订) 当预订中只有单一部分预订时 我可以让 itemReference 与 containerReference 相同
我还将为这个参考 设置一个描述性的 spokenPhrase 本例中 就叫它“ACME 饭馆的餐桌”吧 如果需要显示引用 这将会被用到 比如用户想通过快捷键启动预订 同样 两个引用我用了相同的值 (往返旅行) Next up 是一个预订出行的 app 就像这里显示的往返火车预订
本次预定包括两部分 每一段行程为一部分
和之前的示例一样 预订号码会标识出所有细节 本例中 预订分为两部分 我将使用它作为 containerReference 确保我设置一个 spokenPhrase 这也对本次预订的所有部分进行了描述
对于两段行程的旅程 我将创建两个 TrainReservation 对象 因为有两段行程 但只有一个预订号码 我就不能像在第一个例子中那样 使用预定号码作为 itemReference 相反 我必须选择一个标识符 每段行程都独一无二的标识符
在这个例子里 我将使用 与本次旅程每一段行程有关的票号 这样如果我的 app 启动 只显示一段行程 它很容易就会确定显示哪段行程 我还设置了 一个 spokenPhrase 来描述每段行程 最后 有些 app 允许用户进行多个不同类别的预订 比如提供交通、住宿 等捆绑服务的旅行社 app 在本例中 预订包括三个部分: 两段航程和一次酒店住宿 (多重预订) 除了有三个部分外 预订还使用三个预订号码 一个是两段航程的 一个入住酒店的 还有一个是整个旅程的 containerReference 应该能够识别预订的所有部分 因此 在本例中 我将使用预订号码来管理旅行
对于航班 我将为每个航段创建一个航班预订
和前面的例子一样 两个航段共用一个同样的预订号码 所以 itemReference 不能用这个预订号码 这种情况下 我将创建一个新的标识符 把预订号码和航班号结合起来 并将其用于 itemReference 你可以在这里选择任何你喜欢的标识符 只要这个标识符是唯一的 而且它能使你找到预订的特定部分 以便在启动时显示信息
对于该预订的酒店部分 我将创建一个 LodgingReservation 对象 酒店的预订号码 仅可用于酒店预订 因为它是唯一的 所以我将把它用作 itemReference
现在我们已经看了 几个如何设置容器和项目引用的示例 所以你的 app 将能提供良好的用户体验 ,并在启动时显示正确的预订内容 接下来 让我们看看 下列情况下这种体验会如何变化 假使日历事件显示在 未安装你的 app 的设备上的话
今年 我们为 INReservation 类 添加了一个新的 URL 属性 如果从你 app 的通知中创建的日历事件 被显示在没有安装你的 app 的设备上 并且你所通知的预订包含一个 URL 我们就会在日历中 显示一个“在 Safari 浏览器中显示”按钮 点击这里就可打开你在 Safari 浏览器中 设置的 URL 而不是启动你的 app 这样用户就可 在你的网站上查看他们的预订细节 (新的 URL 属性) 请确保你采用这个新的 URL 属性 因为日历事件将同步到所有用户的设备 其中有一些可能没有安装你的 app 这样你仍然可以提供很好的用户体验 提供很好的用户体验 也意味着在你的 app 中 在适当的时间和地点发送通知 如果显示通知 这将给用户提供必要的环境 这将确保系统中获得最新的预订细节 今年 我们对通知的显示方式 做了一些改变 这样你的 app 就可以通知包含预订的多元互动 现在当短时间内多次发送通知时 系统会智能地对通知进行分组 这样做的理想环境 是当你的 app 显示即将到来的预订列表时 (发现4个事件) 我们还建议您在查看单个预订时通知
在查看预订的特定部分时通知 例如这部电影的两张票中的一张 系统只在第一次获得通知时显示预订通知 另一次通知的好机会 是对 app 之外的预订更改的反应 (对变化做出的反应) 这样做意味着 你的用户数据尽可能保持了最新状态 通过通知 Siri 无论在 app 中还是在系统中 实现这一目标有两种互补的方式 Apple 为这两种情况都提供了 很棒的 API 你的 app 可以使用后台 App 刷新 API 定期检查更新 在后台通知 Siri
你的 app 也应该采用声音推送通知 这样 它就能在情况发生变化时做出反应 收到声音推送通知后 你的 app 可以刷新其预订详情 并通知 Siri 有关这些 API 的更多信息 以及其他与后台执行相关的信息 请参考去年的 “关于 App 后台执行的改进”培训会 这就是通知的最佳做法 接下来 我想谈谈 在通知 Siri 预订详情时如何调试问题 当你的 app 通知预订详情时 这些详情 可能会被系统的不同部分异步处理 所以 如果有什么地方出错了 并不总能让你的 app 知道 为了帮助您在开发过程中调试问题 我们为其中一些 我们常见和你们反馈回来的问题 添加了额外的日志记录 您可以在 Mac OS 的控制台 app 中 查看这些日志
若要仅显示与通知相关的日志 请将搜索过滤器设置为 “siri-event-suggestions”类别 让我给大家 快速演示一下这个功能是如何实现的
我现在进入的是样本 app 我想试试 我们今年增加的新的巴士预订类型 所以 我添加了 一个 createBusReservation 的方法
到目前为止 我编制了一些辅助方法 来创建两次我即将预订的巴士旅行
在这里 我将创建预订对象
最后 我将把它们 添加到 app 中的预订列表
我们运行一下这个 app 看看它的实际效果 iOS 14 新增了在 iOS 模拟器中对使用 Siri 事件建议 API 的支持 我要用用
要在模拟器中运行 app 只需从目标旁的 设备列表中选择一个 iOS 模拟器
并点击 “运行” 即可
看样子我的巴士预订在 app 中能看到了 挺好 我将点击一下预订来显示更多信息 这个操作还会把预订通知给 Siri 所以我应该会看到一个 告诉我 Siri 创建了一个事件的通知
我没有看到通知 所以一定是哪里出了问题 但我不确定是什么原因 从 iOS 14 和 macOS Big Sur 开始 我们增加了额外日志记录 来帮助调试类似的通知 要了解发生了什么 我将首先打开控制台
在控制台 app 中 我可以选择从哪个设备查看日志 以及如何过滤这些日志 我想看我的模拟器中的日志 于是我就从设备列表中进行了选择
系统中有很多日志 所以我们创建了 一个 Siri 事件建议日志分类 通过在控制台将其设置为过滤器 我将只能看到与我的通知有关的信息
要使用这个功能 我得进入搜索栏 输入“siri-event-suggestions”
我还把搜索的类型从“任意”改成了“类别”
最后 我点击“开始串流”
我们返回到 app 再试一次
在控制台 我现在看到一条日志信息
我们点击它来了解更多详细信息
这条信息显示两个 或多个预订在使用相同的 itemReference
正像我们在通知的最佳实践 一节中所说的那样 我的预订的所有部分 都必须拥有一个唯一的 itemReference 这样我的 app 才能在启动时正确显示
编写此代码时 我复制粘贴了这部分以创建第二个预订 忘记修改 itemReference 了 两个编号现在都是“ABC-001” 为了解决这个问题 我将把第二个 对象的 itemReference 改为“ABC-002” 请记住 在生产 app 中 你可能会从数据库或服务器获得这些值 但就这个例子而言 我要使用一些简单的硬编码值 我们再运行一次这个 app
仍没看到通知 但看样子控制台里有一个新日志条目
我们看一下详细信息
这条日志说 我还没有确认日历屏幕中的“最新动态” 用户完成这些操作之前 Siri 不会向日历添加事件 我以前没在这个模拟器上用过日历 那么我们打开日历 执行这个操作
这样就可以了 我会返回到 app 再试一次
好了 现在我看到了一个通知 对我说 Siri 已经把预订 添加到我的日历里了 如果我点击通知 我可以看到两部分的预订 都发到我的日历收件箱里了 好极了 控制台 app 中的调试问题 不仅对 Siri 事件建议 API 有用 而且还可用于 Romain 之前说过的新标记支持 我们来看一个简单的例子 打开 Safari 浏览器 这是本培训课程前面提过的预订网站 我要在这家餐厅订两个人的座位并确认 因为这个页面包含已确认预订的标记 我期待看到一则告诉我 Siri 已经把预订添加到我的日历的通知 但是像刚才一样 我没看到 我也不知道为什么 为了调试这个问题 我将再次打开控制台 app
这次 我需要在我的 Mac 中设置设备
更换设备时 我还必须再次在搜索字段中设置过滤器
并点击“开始“
我将返回网页 重新加载 这样 Siri 就能再次读取标记
然后 我会切换回控制台 看看那里是否有什么异常 帮我了解实际情况
我现在看到一些日志条目 我将点击最近的一个 这个日志说已超过预订的结束时间
如果预订已终止 Siri 将不会在日历中添加事件 我会返回到网站 果然 看起来我曾尝试过为昨天进行预订 现在更新到明天…
然后确认
好了 现在我看到一个通知 通知说 Siri 已经把预订 添加到了我的日历 这就是如何调试 Siri 事件建议的方法 用以捕捉一些最常见的问题 不管你是使用你的 app 中的 API 还是使用你的电子邮件中或网站上的标记 现在我把时间交给 Sofiane 让他总结一下 谢谢大家 谢谢 Magnus 今天 我们讨论了 大量很棒的更新 现在让我们总结一下 我们增加了对巴士和轮船预订的支持 并且我们已让你 可以在 macOS 上通知你的预订 以期获得良好的跨平台体验 (新类别和新平台支持) 我们介绍了一种新的方法 可以在你的网站上和电子邮件中添加标记 这将实现人们喜爱的智能用户体验 而不管人们 采用怎样的方式访问他们的预订信息 (邮件与Safari的标记支持) 最后 我们还增强了开发人员的体验 让使用控制台进行调试和 使用模拟器进行测试变得更加容易 (改善开发人员的体验) 我们讨论了 如何最大限度地通知你的互动交流 以及即使你的 app 尚未安装 新的 URL 属性如何提供很棒的体验 我们非常迫切地想看到 大家使用所有这些改进的情况 谢谢大家
(你好 WWDC 2020)
-
-
6:31 - JSON-LD
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "FoodEstablishmentReservation", "reservationStatus": "http://schema.org/ReservationConfirmed", "reservationId": "IWDSCA", "partySize": "2", "reservationFor": { "@type": "FoodEstablishment", "name": "EPIC Steak", "startDate": "2020-06-26T19:30:00-07:00", "telephone": "(415)369-9955" "address": { "@type": "http://schema.org/PostalAddress", "streetAddress": "369 The Embarcadero", "addressLocality": "San Francisco" "addressRegion": "CA", "postalCode": "95105", "addressCountry": "USA" } } } </script>
-
6:45 - Microdata
<div itemscope itemtype="FoodEstablishmentReservation"> <link itemprop="reservationStatus" href="http://schema.org/ReservationConfirmed"/> <meta itemprop="reservationId" content="IWDSCA"/> <meta itemprop="partySize" content="2"/> <div itemprop="reservationFor" itemscope itemtype="FoodEstablishment"> <meta itemprop="name" content="EPIC Steak"/> <meta itemprop="startDate" content="2020-06-26T19:30:00-07:00"/> <meta itemprop="telephone" content="(415)369-9955"/> <div itemprop="address" itemscope itemtype="PostalAddress"> <meta itemprop="streetAddress" content="369 The Embarcadero"/> <meta itemprop="addressLocality" content="San Francisco"/> <meta itemprop="addressRegion" content="CA"/> <meta itemprop="postalCode" content="95105"/> <meta itemprop="addressCountry" content="USA"/> </div> </div> </div>
-
6:58 - Modified Reservation JSON-LD
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "FoodEstablishmentReservation", "reservationStatus": "http://schema.org/ReservationConfirmed", "reservationId": "IWDSCA", "partySize": "2", "reservationFor": { "@type": "FoodEstablishment", "name": "EPIC Steak", "startDate": "2020-06-26T18:30:00-07:00", "telephone": "(415)369-9955" "address": { "@type": "http://schema.org/PostalAddress", "streetAddress": "369 The Embarcadero", "addressLocality": "San Francisco" "addressRegion": "CA", "postalCode": "95105", "addressCountry": "USA" } } } </script>
-
7:21 - Cancelled Reservation JSON-LD
<script type="application/ld+json"> { "@context": "http://schema.org", "@type": "FoodEstablishmentReservation", "reservationStatus": "http://schema.org/ReservationCancelled", "reservationId": "IWDSCA", "partySize": "2", "reservationFor": { "@type": "FoodEstablishment", "name": "EPIC Steak", "startDate": "2020-06-26T19:30:00-07:00", "telephone": "(415)369-9955" "address": { "@type": "http://schema.org/PostalAddress", "streetAddress": "369 The Embarcadero", "addressLocality": "San Francisco" "addressRegion": "CA", "postalCode": "95105", "addressCountry": "USA" } } } </script>
-
8:13 - SuggestionsAllowAnyDomainForMarkup default
defaults write com.apple.suggestions SuggestionsAllowAnyDomainForMarkup -bool true
-
8:25 - SuggestionsAllowUnverifiedSourceForMarkup default
defaults write com.apple.suggestions SuggestionsAllowUnverifiedSourceForMarkup -bool true
-
8:49 - SuggestionsAllowAnyDomainForMarkup default
defaults write com.apple.suggestions SuggestionsAllowAnyDomainForMarkup -bool true
-
9:03 - SuggestionsAllowUnverifiedSourceForMarkup default
defaults write com.apple.suggestions SuggestionsAllowUnverifiedSourceForMarkup -bool true
-
10:32 - Reservation Confirmation JSON-LD
<script type='application/ld+json'> { "@context": "http://schema.org", "@type": "http://schema.org/FoodEstablishmentReservation", "reservationId": "IWDSCA", "reservationStatus": "http://schema.org/ReservationConfirmed", "url": "http://localhost:3000/reservations/6", "underName": { "@type": "http://schema.org/Person", "name": "John Appleseed" }, "broker": { "@type": "http://schema.org/Organization", "name": "Apple Reservations" }, "startTime": "2020-06-26T19:30:00-07:00", "partySize": "2", "reservationFor": { "@type": "http://schema.org/FoodEstablishment", "name": "EPIC Steak", "telephone": "(415)369-9955", "address": { "@type": "http://schema.org/PostalAddress", "streetAddress": "369 The Embarcadero", "addressLocality": "San Francisco" "addressRegion": "CA", "postalCode": "95105", "addressCountry": "USA" } } } </script>
-
11:04 - Reservation Cancelled JSON-LD
<script type='application/ld+json'> { "@context": "http://schema.org", "@type": "http://schema.org/FoodEstablishmentReservation", "reservationId": "IWDSCA", "reservationStatus": "http://schema.org/ReservationCancelled", "url": "http://localhost:3000/reservations/6", "underName": { "@type": "http://schema.org/Person", "name": "John Appleseed" }, "broker": { "@type": "http://schema.org/Organization", "name": "Apple Reservations" }, "startTime": "2020-06-26T19:30:00-07:00", "partySize": "2", "reservationFor": { "@type": "http://schema.org/FoodEstablishment", "name": "EPIC Steak", "telephone": "(415)369-9955", "address": { "@type": "http://schema.org/PostalAddress", "streetAddress": "369 The Embarcadero", "addressLocality": "San Francisco" "addressRegion": "CA", "postalCode": "95105", "addressCountry": "USA" } } } </script>
-
13:10 - Registration URL
developer.apple.com/contact/request/siri-events
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。