快速入门:为正在运行的应用截获推送通知 (HTML)

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

注意  不使用 JavaScript?请参阅快速入门:为正在运行的应用截获推送通知 (XAML)

 

你可以将你的应用设计为截获推送通知并采用非默认方式响应该通知。这一过程可用于所有推送通知类型,但是它对 Toast 和原始通知尤为有用。

当你的应用的云服务向 Windows 发送通知时,你的应用便有机会在显示 Toast、更新磁贴或锁屏提醒或者向后台任务发送原始通知之前截获和处理该通知。它也可以阻止这些元素的显示或更新。实现通知发送事件处理程序是可选的。当应用想处理和阻止传入的 Toast 而不是向用户显示它们时,该选项最有用。

注意  从 Windows Phone 8.1 开始,手机还可以通过使用通知的 XML 内容中的 ToastNotification.suppressPopupScheduledToastNotification.suppressPopup 属性使 Toast 通知不显示。

注意  此过程仅适用于正在运行的应用。当应用未运行并且处理程序未实现时系统发送的通知会正常发送—更新磁贴、显示 Toast 以及向后台任务发送原始通知(如果已实现)。

 

先决条件

若要理解本主题或使用其提供的代码,则你需要:

说明

1. 可选:声明命名空间变量

此步骤为你提供一个短名称,用于替换完全命名空间名称。它等同于 C# 中的“using”语句或 Visual Basic 中的“Imports”语句,使用它可以简化你的代码。

注意  以下代码假设已声明此变量。

 


var pushNotifications = Windows.Networking.PushNotifications;

2. 创建推送通知通道

一个有效的通知通道需要接收从云服务器推送的通知。事件侦听器观察此通道,看有无通知到达。有关如何创建通道的详细信息,请参阅如何请求、创建和保存通知通道

如果成功,以下示例将创建一个可通过 newChannel.uri 访问的通道。


var channel;
var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();

return channelOperation.then(function (newChannel) {
    channel = newChannel;
    },
    function (error) {
        // ...
    }
);

3. 创建函数以处理推送通知事件

以下示例显示了如何处理所有通知类型。

此示例中的最后一行代码将事件的 cancel 属性设置为 true。这会阻止通知执行任何 UI 更改,如更新磁贴或锁屏提醒或者显示 Toast。如果是原始通知,那么它会阻止通知发送到后台任务(如果已实现)。这样,对通知的任何响应都取决于处理程序。


var content;
function onPushNotification(e) {
    var notificationPayload; 

    switch (e.notificationType) { 
        case pushNotifications.PushNotificationType.toast: 
            notificationPayload = e.toastNotification.content.getXml(); 
            break; 

        case pushNotifications.PushNotificationType.tile: 
            notificationPayload = e.tileNotification.content.getXml(); 
            break; 

        case pushNotifications.PushNotificationType.badge: 
            notificationPayload = e.badgeNotification.content.getXml(); 
            break; 

        case pushNotifications.PushNotificationType.raw: 
            notificationPayload = e.rawNotification.content; 
            break; 
    } 

    e.cancel = true;
}

4. 为接收的推送通知添加事件侦听器

使用在步骤 1 中创建的通道分配步骤 2 中创建的事件处理程序,以处理 PushNotificationReceived 事件。


channel.addEventListener("pushnotificationreceived", onPushNotification, false);

摘要

如果你的方案需要,在你的应用处于运行状态时截获并处理推送通知可以让你的应用对这些通知的效果具有更大的控制力。例如,你可能不希望在正在进行的游戏上面显示 Toast 通知,那么你的事件处理程序可能会采用入侵行为较少的方式将该通知的内容集成到游戏 UI 中。

相关主题

示例

原始通知示例

推送和定期通知示例

概念信息

Windows 推送通知服务 (WNS) 概述

原始通知概述

最佳做法

推送通知指南和清单

原始通知指南和清单

操作方法

快速入门:创建并注册原始通知后台任务