ロック画面のアプリへの直接プッシュ通知の配信に WNS を使う方法 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
このトピックでは、ロック画面の Windows ランタイム アプリでバックグラウンドによりネットワーク通知を受信するために、Windows 通知サービス (WNS) と直接プッシュ通知を使う方法について説明します。このトピックでは、プッシュ通知チャネルを登録してサーバーに送り、直接プッシュ通知によってアクティブ化するバックグラウンド タスクを登録してから、そのチャネルに直接プッシュ通知を送ってバックグラウンド タスクをアクティブ化する手順について説明します。
理解しておく必要があること
テクノロジ
Windows.Networking.PushNotifications
直接プッシュ通知を使ったバックグラウンドのネットワーク通信を有効にします。
必要条件
以下の情報は、直接プッシュ通知を使った常時接続のネットワーク接続に依存する、あらゆる接続型 (ネットワーク認識型) の Windows ランタイム アプリに適用されます。このトピックは Windows 8.1、Windows Phone 8.1、および Windows Server 2012 R2 の JavaScript で記述されたアプリに適用されます。
直接プッシュ通知を使ったバックグラウンド ネットワーク接続は、JavaScript アプリ、C++/XAML で記述されたアプリ、C#、VB.NET、または Managed C++ の .NET Framework 4.5 を使ったアプリでサポートされています。 JavaScript アプリに適用されるバックグラウンドのネットワーク タスクについて詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。
手順
WNS を使ったロック画面のアプリへの直接プッシュ通知の配信
WNS を使うアプリは、プッシュ通知を受け取るために実行されている必要はありません。アプリが実行されていなくても、ユーザーには実行中のように見せることができます。たとえば、天気予報アプリの場合、更新されたライブ タイルに常に最新の天気予報を表示できます。重要なイベントが発生したときには、WNS を使って画面上の通知をユーザーに配信することもできます。画面上の通知の好例として、ニュース速報イベントがあります。Windows 8.1、Windows Phone 8.1、または Windows Server 2012 R2 を実行する任意のデバイスが、インターネットに接続されていれば、WNS を使うことができます。通常、WNS のこのような通知は送られてくるとすぐに配信されます。
WNS は、Windows 8.1 のスタート画面のライブ タイルや通知を強化するのに役立ちますが、WNS を使うことで IM、VoIP、電子メールなどのリアルタイム接続シナリオを実現することもできます。WNS を使うアプリをロック画面に追加すると、WNS を使ってバックグラウンド タスクをアクティブにすることができます。バックグラウンド タスクとは、アプリがバックグラウンドにあるときに (フォアグラウンドではなくなったとき) 実行されるアプリ コードの一部です。
WNS の通知によってアクティブにできるバックグラウンド タスクの例を次に示します。
- 新しい電子メール メッセージが届いたことを示すために、通知バッジ API を呼び出して、ロック画面に配置された電子メール アプリのバッジ アイコンの値を増やす。
- VoIP アプリで着信呼び出しをユーザーに通知するために、変更トースト API を呼び出して通知を表示する。
プッシュ通知には次の 4 種類があります。
- タイルの更新
- バッジの更新
- トースト通知
- 直接通知
最初の 3 つのプッシュ通知は、フォアグラウンドのすべての Windows ランタイム アプリで使うことができます。WNS から直接プッシュ通知を受け取ることができるのは、ロック画面のアプリだけです。直接通知を使うと、ロック画面のアプリはフォアグラウンドにない場合でも、WNS から直接プッシュ通知が届いたときにバックグラウンド タスクの形でコードを実行できます。
ほとんどのアプリは、ロック画面に表示するアプリにする必要はありません。ロック画面に配置されていなくても WNS を使うことができます。アプリがフォアグラウンドにあれば、WNS を使ってタイルとバッジを更新したり、トースト通知を表示したりできます。ロック画面に表示するアプリでの WNS の使用は、ライブ タイルを活用し、ユーザーに通知を表示することを目的とした WNS の高度な使い方です。開発者は、ロック画面で WNS を使う前に、MSDN の WNS に関するドキュメントを十分に理解しておく必要があります。詳しくは、「プッシュ通知の概要」をご覧ください。
WNS にプッシュ通知を送るには、Windows ストアを介してプロビジョニングされた秘密鍵が必要です。WNS に対する認証とアプリの構成について詳しくは、「Windows プッシュ通知サービス (WNS) に対して認証する方法」をご覧ください。
次の手順は、ロック画面のアプリに直接プッシュ通知を送る方法を示しています。
- WNS のプッシュ通知チャネルを登録し、チャネルをサーバーに送ります。
- 通知チャネルを使って、適切な形式の直接プッシュ通知を WNS に送ります。
- 直接プッシュ通知によってアクティブ化されるバックグラウンド タスクを記述します。
通知チャネルに対して整形式の XML ペイロードの HTTP PUSH を実行することで、開発者のアプリ サーバーを使って直接プッシュ通知がクライアント アプリに配信されます。クライアント アプリによって通知チャネルが生成され、アプリ サーバーに送られると、そのチャネルを使ってプッシュ通知が送られます。通知チャネルは、Windows 8.1 のユーザー アカウントで実行されるアプリのインスタンスに固有のものです。
プッシュ通知チャネルを登録し、チャネルをサーバーに送る
Windows.Networking.PushNotifications 名前空間に含まれる PushNotificationChannelManager クラスの CreatePushNotificationChannelForApplicationAsync メソッドのいずれかを呼び出して、チャネルを登録します。
これにより、次のようにアプリのプッシュ通知チャネルが生成されます。
https://db3.notify.windows.com/?token=AQQAAADX3Wr8MA%2fCoZk4n1CmR5ZU7tdic6ksvG4TQq1tiyZtpetjfzuPHSjvliEeqaqJcPuo1jrVnbyCZvnbuU%2byLvZNDONTgUNu6lavpl5EGtWx7iQgpGkyHLbZeosxioQ42Cg%3d
チャネルをサーバーに送ります。30 日が経過するとチャネルの有効期限が切れます。チャネルに関するベスト プラクティスを次に示します。
- アプリを起動するたびに、新しいプッシュ通知チャネルを取得するための登録を行い、チャネルをサーバーに送って、ユーザーに既に関連付けられているチャネルを置き換えます。
- ローカル コンピューターの電源が常にオンになっている場合は、チャネルが期限切れになる前に、バックグラウンド タスクを実行してチャネルをときどき更新します。これは、"メンテナンス タイマー" と呼ばれます。
直接プッシュ通知によってアクティブにするバックグラウンド タスクを登録する
直接プッシュ通知を受信したときに実行するバックグラウンド タスクを作るには、そのバックグラウンド タスクによってアクティブ化されるコードを含んだ JavaScript のソース ファイルを指定する必要があります。そのためには、アプリ マニフェストがバックグラウンド タスクのソース ファイルを参照していることを確認する必要があります。アプリ マニフェストには、バックグラウンド タスクに使われる JavaScript ソース ファイルの名前が含まれている必要があります。
次のサンプルでは、アプリ マニフェストの <Application> 要素の下に、PushNotifyTask バックグラウンド タスクの拡張機能を追加しています。
<Extensions> <Extension Category="windows.backgroundTasks" StartPage="js\backgroundTask.js"> <BackgroundTasks> <Task Type="pushNotification" /> </BackgroundTasks> </Extension> </Extensions>
アプリでは、直接プッシュ通知用のチャネルを開く必要があります。
次のサンプルは、直接プッシュ通知用のチャネルを開く方法を示しています。
// Open the channel. See the "Push and Polling Notifications" sample for more detail function openNotificationsChannel() { var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync(); WinJS.log && WinJS.log("Opening a channel...", "sample", "status"); return channelOperation.then(function (newChannel) { WinJS.log && WinJS.log("Channel request succeeded!", "sample", "status"); document.getElementById("scenario1ChannelOutput").value = newChannel.uri; SdkSample.channel = newChannel; }, function (error) { WinJS.log && WinJS.log("Could not create a channel (error number: " + error.number + ")", "sample", "error"); } ); }
アプリでは、直接プッシュ通知を受信したときにアクティブ化するバックグラウンド タスクも登録する必要があります。
次のサンプルは、直接プッシュ通知用のバックグラウンド タスクを登録する方法を示しています。
// Register the background task for raw notifications // function registerBackgroundTask() { var taskBuilder = new background.BackgroundTaskBuilder(); var trigger = new background.PushNotificationTrigger(); taskBuilder.setTrigger(trigger); taskBuilder.taskEntryPoint = sampleTaskEntryPoint; taskBuilder.name = sampleTaskName; try { var task = taskBuilder.register(); task.addEventListener("completed", backgroundTaskComplete); WinJS.log && WinJS.log("Background task registered", "sample", "status"); } catch (e) { WinJS.log && WinJS.log("Registration error: " + e.message, "sample", "error"); unregisterBackgroundTask(); } } function unregisterBackgroundTask() { var iter = background.BackgroundTaskRegistration.allTasks.first(); while (iter.hasCurrent) { var task = iter.current.value; if (task.name === sampleTaskName) { task.unregister(true); return true; } iter.moveNext(); } return false; }
バックグラウンド タスクがトリガーされたときに実行する関数のコードも用意する必要があります。
直接プッシュ通知を使ったバックグラウンド ネットワーク通知を受信するためにバックグラウンド タスクを記述する方法について詳しくは、「直接プッシュ通知用のバックグラウンド タスクを記述する方法」をご覧ください。
注
アプリのユーザー インターフェイス (UI) 要素は実行されていないため、バックグラウンド タスクでアプリの UI 要素を参照することはできません。つまり、ネットワーク転送に使われるコールバックのアフィニティを UI のシングル スレッド アパートメント (STA) に関連付けることはできません。UI STA (アプリ STA) とのアフィニティを持つオブジェクトに対し、バックグラウンド タスクからアクセスすることは避けてください。
バックグラウンド タスクでのコードの実行時に、アクティブ化できるようにアプリを設定し、クライアントとサーバー間で状態を同期して、ユーザーに通知を表示することができます。
直接プッシュ通知はバッジ通知やタイル通知に似ています。大きな違いは、直接プッシュ通知のペーロードには、Windows 8.1 のユーザー インターフェイスの各部分を更新する属性が含まれていないことです。直接プッシュ通知のペイロードはすべてコンテキスト データであり、バックグラウンド タスクがアクティブになったときにアプリに直接渡されます。アプリは、サーバーから送られたコンテキスト データの形式を認識できることが必要です。
サーバーから直接プッシュ通知を送るには、以下の手順が実行されている必要があります。
直接プッシュ通知をチャネルに送り、バックグラウンド タスクをアクティブにする
Windows ストアにアプリが登録されており、秘密鍵とパッケージ SID があることを確認します。
サーバーからプッシュ通知を送る前に、アプリ サーバーで秘密鍵とパッケージ SID を使って WNS に対する認証を行うコードを記述します。
WNS の直接プッシュ通知を適切に作り、Windows ランタイム アプリから以前に受け取った通知チャネルに対して HTTP POST を実行します。HTTP POST には、次の HTTP ヘッダーも含まれている必要があります。
- X-WNS-Type=wns/raw
- Content-Type=application/octet-stream
- Authorization=The string “Bearer”, スペース, 認証手順で受け取った承認トークン
直接プッシュ通知でトリガーされるバックグラウンド タスクの実行時にクライアント アプリに渡すコンテキストがある場合は、HTTP POST のボディに含める必要があります。直接通知のペイロードに含めることができるデータの最大量は 5 KB です。
クライアントが通知を受信すると、バックグラウンド タスクがアクティブ化され、アプリのバックグラウンド タスク コードによって、指定されたデータ ペイロードが渡され、ペイロードにアクセスできるようになります。
前のステップ
直接プッシュ通知を使ったバックグラウンド ネットワーク通知を受信するための、ロック画面に表示するアプリを作成する方法について詳しくは、「バックグラウンドの直接プッシュ通知を使うロック画面のアプリの作成」をご覧ください。
次のステップ
直接プッシュ通知を使ったバックグラウンド ネットワーク通知を受信するためにバックグラウンド タスクを記述する方法について詳しくは、「直接プッシュ通知用のバックグラウンド タスクを記述する方法」をご覧ください。
直接プッシュ通知を使うためのガイドラインとチェック リストについて詳しくは、
「直接通知のガイドラインとチェック リスト」をご覧ください。
関連トピック
その他のリソース
Windows プッシュ通知サービス (WNS) に対して認証する方法
ロック画面のアプリへの直接プッシュ通知の配信に WNS を使う方法
バックグラウンドの直接プッシュ通知を使うロック画面のアプリの作成方法
リファレンス
Windows.ApplicationModel.Background
Windows.Networking.BackgroundTransfer
Windows.Networking.PushNotifications
サンプル