如何处理来自 Toast 通知的激活 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
注意 不使用 JavaScript?请参阅如何处理来自 Toast 通知的激活 (XAML)。
本主题演示为了响应用户单击从你的应用发送的 Toast 通知,你应该采取的操作。你的应用应当通过显示特定于 Toast 的 UI 来进行响应。你的应用通常应当在与 Toast 的内容相关的上下文或视图中启动。 这可以通过此 Toast 负载中包含的激活字符串来实现,该字符串随后会作为激活事件中的参数传递给你的应用。基本数据流如下所示:
- 该应用或 Web 服务创建并发送了 Toast 负载,包括启动字符串
- 该 Toast 将引发并/或发送到操作中心
- 用户选择该 Toast(单击或触摸)
- 将引发激活的事件
- 该应用的激活事件处理程序将读取启动字符串
- 将使用启动字符串提供的参数启动该应用
注意 通过 Microsoft Visual Studio 测试 Toast 通知代码功能时,你必须在 Windows x86、x64 或 Windows 运行时计算机上使用本地计算机或远程计算机调试设置。你无法使用 Visual Studio 模拟器调试功能选项—你的代码将在该模拟器中进行编译和运行,但不会显示 Toast。
你需要了解的内容
技术
- Windows Runtime
先决条件
要理解本主题,你将需要:
- 了解 Toast 通知术语及概念。有关详细信息,请参阅Toast 通知概述。
- 在应用的清单中,“支持 Toast”选项必须设置为“true”(在 Visual Studio 清单编辑器中为“是”)才能发送或接收 Toast 通知。有关详细信息,请参阅快速入门:使用 Visual Studio 清单编辑器创建默认磁贴和如何接受 Toast 通知。
- 熟悉 XML 及其通过文档对象模型 (DOM) API 的操作。
- 熟悉 Toast XML 架构。有关详细信息,请参阅 Toast 架构。
- 能够使用 Windows 运行时 API 创建使用 JavaScript 的基本 Windows 应用商店应用。有关详细信息,请参阅创建第一个采用 JavaScript 的 Windows 应用商店应用。
说明
步骤 1: 在你的 Toast 负载中包含激活数据
当通过 Toast 通知激活应用时,需要提供与此 Toast 内容有关的信息。然后,应用可以通过启动到关联的视图而不是默认视图来反映该内容。当应用或 Web 服务创建此 Toast 时,它使用 launch 特性来指定此激活信息。你可以将该字符串视为与命令行参数相似。该字符串能够包含可以由应用理解的任何信息,但前提是该信息不导致 XML 负载变为无效。请注意,Toast 的 XML 负载的总大小(包括启动字符串)不得超过 5 KB。
如果你未包含启动属性字符串,你的应用将正常启动,如同用户从“开始”屏幕启动它。
在此步骤中,我们假设以前创建了一个名为 toastXml
的 XmlDocument 对象。该示例创建 launch 属性,为它分配字符串值,然后将其添加到 Toast 通知的 XML 负载中。有关创建完整 Toast 通知的说明,请参阅快速入门:发送 Toast 通知。
var launchAttribute = toastXml.createAttribute("launch");
launchAttribute.value = "{\"myContext\":\"12345\"}";
var toastNode = toastXml.selectSingleNode("/toast");
toastNode.attributes.setNamedItem(launchAttribute);
上面的代码根据快速入门:发送 Toast 通知中定义的 visual 元素的内容,导致以下 XML。
<toast launch="{"myContext":"12345"}">
<visual>
<binding template="ToastImageAndText01">
<image id="1" src="ms-appx:///images/redWide.png" alt="red graphic"/>
<text id="1">Hello World!</text>
</binding>
</visual>
</toast>
步骤 2: 注册“已激活”事件
当用户单击你的 Toast 或通过触摸选择你的 Toast 时,会引发 activated 事件。必须通过 addEventListener 函数将此事件通知给应用。
注意 如果你在 Toast 中未包含启动特性字符串并且当选择此 Toast 时你的应用已在运行,则不会引发 activated 事件。
WinJS.Application.addEventListener("activated", onActivatedHandler, false);
步骤 3: 为你的 Toast 的“已激活”事件实现处理程序
已注册的事件处理程序会接收所有激活事件,无论激活类型如何。事件通知中包含的 kind 属性指示激活事件的类型。当用户单击在其 XML 负载中指定 launch 特性的 Toast 时,会引发类型为 launch 的激活事件。该事件与用户点击应用的主要磁贴或辅助磁贴时引发的事件相同。
通过步骤 1 中的 launch 特性提供的激活字符串包含在事件通知的 arguments 属性中。
该示例显示在步骤 2 中注册的激活事件处理程序。
function onActivatedHandler(args) {
if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
var launchString = args.detail.arguments;
// Handle activation as required for your app, using the launch string.
}
}