快速入门:在代码中使用 NotificationsExtensions 库 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

注意  不使用 JavaScript?请参阅快速入门:在代码中使用 NotificationsExtensions 库 (XAML)

 

使用 NotificationsExtensions 对象模型库,可以提供磁贴、锁屏提醒和 Toast 通知 XML 模板内容,而无需使用 XML 文档对象模型 (DOM)。它将向你提供一种更简单明了且更直接的方法来提供通知内容。 当你在 Microsoft Visual Studio 中使用此库时,你可以获得下列好处:

  • IntelliSense 以对象属性的形式列出可用的标记和属性,因此对于元素和结构,不必查询架构文档
  • 工厂函数,通过该函数,你可以创建框架通知,然后你可以用你的内容填充该通知。
  • 一种在你的通知负载中包括多个磁贴大小(这是最佳做法!)的简化方式。
  • 一种对于查找和填充文本和图像属性有帮助的方法,之所以说有帮助,是因为它可以为你提供有关其目标用途、大小或模板中的位置的详细信息。

注意  NotificationsExtensions 库是根据 Microsoft Limited Public License (MS-LPL) 发布的。你可以在 Windows 应用商店应用或 Web 服务中重用该库,并且可以根据应用的需要对其进行自定义。

 

先决条件

说明

1. 获取 NotificationsExtensions 库

NotificationsExtensions 库包含在多个可下载的磁贴、Toast 和通知示例中,并且可以复制它们供自己使用。我们将在此过程中使用主要磁贴和锁屏提醒示例。

注意  NotificationsExtensions 是 C# 库,但是可以包含在 JavaScript、C#、C++ 和 Microsoft Visual Basic 项目中并与其结合使用。

 

  1. 从 Windows 开发人员中心下载应用磁贴和锁屏提醒示例
  2. 将“App tiles and badges sample.zip”文件解压到你选择的文件夹。
  3. 转至向其解压缩示例的文件夹。将 NotificationsExtensions 文件夹从模板复制到你自己的项目目录中,作为 project's .sln 文件的同级。

2. 将该库包含在你的项目中

  1. 启动 Visual Studio 并打开你的项目。
  2. 在项目资源管理器中,右键单击树顶部的解决方案。
  3. 依次选择“添加”、“现有项目”****。
  4. 在你的项目中导航到 NotificationsExtensions 文件夹,然后选择 NotificationsExtensions.csproj 文件。
  5. 在解决方案的每个项目中,右键单击“引用”,然后选择“添加引用”****。
  6. 在“引用管理器”的“解决方案”****下,选择 NotificationsExtensions,然后单击“确定”。此时,NotificationsExtensions 就可以使用了。

注意  如果你不希望在你的解决方案中包含完整的 NotificationsExtensions 项目,则可以将 NotificationsExtensions 构建为独立项目,并在你的项目中仅包含 NotificationsExtensions.winmd 作为引用。

 

3. 将该库包含在你的应用服务器上

如果你使用 ASP.NET 将通知推送到 Windows 推送通知服务 (WNS),或者如果你实施 ASP.NET 服务来处理关于定期磁贴或锁屏提醒更新的请求,也可以在应用服务器代码中使用 NotificationsExtensions。唯一需要注意的是你必须在 NotificationsExtensions 项目属性中添加 WINRT_NOT_PRESENT 编译构建符号。

  1. 转至示例的解压缩目录。打开示例文件夹并将其 NotificationsExtensions 文件夹复制到你选择的新位置。

  2. 选择 NotificationsExtensions.csproj 文件可在 Visual Studio 中打开项目。

  3. 从“项目”菜单中,选择“NotificationsExtensions 属性”****。

  4. 将“输出类型”选择更改为“类库”可构建 DLL 文件。

  5. 同样在 NotificationsExtensions 属性中,选择“构建”****选项卡。

  6. 在“常规”类别下,在“条件编译符号”****框中添加“WINRT_NOT_PRESENT”。如果该框中已经包含其他符号,请在“WINRT_NOT_PRESENT”前面添加一个分号作为分隔符。

  7. 按 F7 或使用“生成 > 生成解决方案”以生成该项目。

  8. 将构建的 NotificationsExtensions.dll 文件从你的文件夹(在 \NotificationsExtensions\bin\Debug\ 下)复制到你的应用服务器代码中。

4. 在你的代码中使用该库

NotificationsExtensions 现在可以用作你的代码中的一个对象。它包含三个有名的命名空间:

  • BadgeContent
  • TileContent
  • ToastContent

这些内容类型中的每一个又包含表示每个类型的元素和属性的成员。

以下示例使用 NotificationsExtensions 将一个值分配给数字锁屏提醒,然后将其发送到磁贴。


var badgeContent = NotificationsExtensions.BadgeContent.BadgeNumericNotificationContent(85);
var badgeNotification = badgeContent.createNotification();

Windows.UI.Notifications.BadgeUpdateManager.createBadgeUpdaterForApplication().update(badgeNotification);

为了进行比较,以下示例使用 XML DOM 的直接操作显示相同过程(不包含 NotificationsExtensions)。


var notifications = Windows.UI.Notifications;                        
var badgeXml = notifications.BadgeUpdateManager.getTemplateContent(notifications.BadgeTemplateType.badgeNumber);
var badgeAttributes = badgeXml.getElementsByTagName("badge");
badgeAttributes[0].setAttribute("value", "85");
var badgeNotification = new notifications.BadgeNotification(badgeXml);

BadgeUpdateManager.createBadgeUpdaterForApplication().update(badgeNotification);

下一个示例使用 NotificationsExtensions 提供磁贴通知中的文本。第一步是使用 NotificationsExtensions TileContentFactory 函数,以根据特定模板创建一个对象。每个模板都有一个单独的创建函数;只需将单词“create”附加到模板名称中,如“createTileWide310x150ImageAndText01”。

然后,基于模板的对象将提供 IntelliSense 以显示适用于该模板的元素,这些元素将作为根据其函数(如 textHeading、textBodyWrap、textBody1 或 textColumn1Row4)命名的属性。这可以准确告知你正在分配的元素。

在将值分配给属性之后,请按照通常的方式发送磁贴通知。


var tileContent = NotificationsExtensions.TileContent.TileContentFactory.createTileSquare150x150Text01();

tileContent.textHeading.text = "Hello!";
tileContent.textBody1.text = "One";
tileContent.textBody2.text = "Two";
tileContent.textBody3.text = "Three";

var tileNotification = tileContent.createNotification();

Windows.UI.Notifications.TileUpdateManager.createTileUpdaterForApplication().update(tileNotification);

此示例使用 NotificationsExtentions 将文本和图像分配给通知。同文本一样,图像元素将显示为根据它们在模板中的函数(如 imageMain 和 imageSmallColumn2Row2)命名的属性。


var tileContent = NotificationsExtensions.TileContent.TileContentFactory.createTileWide310x150ImageAndText01();

tileContent.textCaptionWrap.text = "This tile notification uses ms-appx images";

tileContent.image.src = "ms-appx:///images/redWide.png";
tileContent.image.alt = "A red rectangle";

此示例使用 NotificationsExtensions 定义整个磁贴通知。这说明了此库的一个特质—向负载添加模板大小时采用的顺序非常重要。

  • 小模板(square71x71—仅限 Windows Phone 8.1)仅可以添加到中型模板。
  • 中型模板 (square150x150) 仅可以添加到长方形模板。
  • 长方形模板仅可以添加到大型(square310x310—仅限 Windows)模板。

如果你尝试采用不同的顺序执行此操作,你将发现未提供所需的属性。


var tileLargeContent = NotificationsExtensions.TileContent.TileContentFactory.createTileSquare310x310Text09();
tileLargeContent.textHeadingWrap.text = "Lorem ipsum dolor sit amet, consectetur";
tileLargeContent.textHeading1.text = "Lorem ipsumo";
tileLargeContent.textHeading2.text = "Lorem ipsumo";
tileLargeContent.textBody1.text = "VivAmus tincidunt convallis urn";
tileLargeContent.textBody2.text = "VivAmus tincidunt convallis urn";

var tileWideContent = NotificationsExtensions.TileContent.TileContentFactory.createTileWide310x150Text04();
tileWideContent.textBodyWrap.text = "Lorem ipsum dolor sit amet, consectetur";

var tileMediumContent = NotificationsExtensions.TileContent.TileContentFactory.createTileSquare150x150Block();
tileMediumContent.textBlock.text = "24";
tileMediumContent.textSubBlock.text = "Aliquam";
        
tileWideContent.square150x150Content = tileMediumContent;
tileLargeContent.wide310x150Content = tileWideContent;

var tileNotification = tileLargeContent.createNotification();

Windows.UI.Notifications.TileUpdateManager.createTileUpdaterForApplication().update(tileNotification);

此示例使用 NotificationsExtensions 为 Toast 通知提供内容,包括文本、图像、音频、持续时间和启动参数。


var toastContent = NotificationsExtensions.ToastContent.ToastContentFactory.createToastImageAndText01();

toastContent.textBodyWrap.text = "Lorem ipsum dolor sit amet";

toastContent.image.src = "ms-appx:///images/redWide.png";
toastContent.image.alt = "A red rectangle";

toastContent.audio.content = NotificationsExtensions.ToastContent.ToastAudioContent.loopingAlarm;
toastContent.audio.loop = true;

toastContent.duration = NotificationsExtensions.ToastContent.ToastDuration.long;

toastContent.launch = '{"type":"toast","param1":"12345","param2":"67890"}';

var toast = toastContent.createNotification();
Windows.UI.Notifications.ToastNotificationManager.createToastNotifier().show(toast);

摘要

本主题介绍了如何使用 NotificationsExtensions 简化锁屏提醒、磁贴和 Toast 通知的创建过程。与直接处理 XML DOM 相比,此模板填充方式更加简单。