クイック スタート: 実行中のアプリのプッシュ通知の中断 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
注 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 に統合できます。
関連トピック
サンプル
概念に関する情報
ベスト プラクティス
方法