快速入門:攔截執行中應用程式的推播通知 (HTML)
[ 本文的目標對象是撰寫 Windows 執行階段 App 的 Windows 8.x 和 Windows Phone 8.x 開發人員。如果您正在開發適用於 Windows 10 的 App,請參閱 最新文件 ]
注意 不是使用 JavaScript?請參閱快速入門:攔截執行中應用程式的推播通知 (XAML)。
您可以將應用程式設計為攔截推播通知,並以非預設方式回應該通知。這個程序適用於所有推播通知類型,但是特別適用於快顯通知和原始通知。
當應用程式的雲端服務將通知傳送到 Windows 時,您的應用程式可以在顯示快顯通知、更新磚或徽章,或者將原始通知傳遞到背景工作之前,先攔截和處理該通知。它也可以抑制這些元素的顯示或更新。您可以選擇是否實作通知傳遞事件處理常式。當應用程式想要處理和抑制傳入快顯通知,而不是向使用者顯示它們時,這特別有用。
注意 從 Windows Phone 8.1 開始,手機也可以透過在通知的 XML 內容中使用 ToastNotification.suppressPopup 或 ScheduledToastNotification.suppressPopup 屬性來隱藏快顯通知。
注意 這個程序只適用於執行中的應用程式。當應用程式不在執行中且未實作處理常式時,系統傳送的通知會正常傳送—會更新磚、會顯示快顯通知,而且會將原始通知傳遞到背景工作 (如果已實作)。
先決條件
若要了解這個主題或使用這個主題提供的程式碼,您需要:
- 熟悉推播通知。如需詳細資訊,請參閱 Windows 推播通知服務 (WNS) 概觀。
- 能夠將推播通知傳送到 Windows 推播通知服務 (WNS) 的雲端服務。如需詳細資訊,請參閱快速入門:傳送推播通知。
指示
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,例如更新磚或徽章,或者顯示快顯通知。在原始通知的案例中,可以防止將通知傳遞到背景工作 (如果已實作一個背景工作)。透過這種方式,任何對通知的回應都會根據處理常式而定。
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);
摘要
如果您的案例有需要,則當應用程式正在執行時攔截和處理推播通知,可讓您的應用程式更能控制這些通知的效果。例如,您可能不想在進行遊戲時讓快顯通知顯示在遊戲上,而您的事件處理常式會以較少干擾的方式將該通知的內容整合到遊戲 UI 中。
相關主題
範例
概念資訊
最佳做法
使用方法