通知チャネルを要求、作成、保存する方法 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
注 JavaScript を使わない場合は、「通知チャネルを要求、作成、保存する方法 (XAML)」をご覧ください。
チャネルの Uniform Resource Identifier (URI) を開き、そのチャネルからアプリでプッシュ通知を受け取ることができます。続けて、このチャネルをプッシュ通知の送信に使うサーバーにチャネルを送ることができるほか、チャネルが必要でなくなったときには閉じることができます。チャネルは、特定のアプリまたはセカンダリ タイルを使う、単一のデバイス上の単一のユーザーを表す一意のアドレスです。
アプリが起動されるたびに新しいチャネルを要求し、URI が変更されたらクラウド サーバーを更新する必要があります。詳しくは、「注釈」をご覧ください。
重要 30 日が経過すると通知チャネルは自動的に有効期限切れになります。
理解しておく必要があること
テクノロジ
- Windows Runtime
必要条件
- タイルと通知に関する用語と概念および XML についての実用的知識。また、このトピックでは Windows ランタイム API を使って JavaScript で基本的な Windows ストア アプリを作る方法を理解していることも前提としています。
- プッシュ通知と Windows プッシュ通知サービス (WNS) の概念、要件、動作の知識。これらについては、「Windows プッシュ通知サービス (WNS) の概要」で説明しています。
手順
ステップ 1: チャネルの URI を要求する
この例では、チャネルの URI を要求しています。要求は通知クライアント プラットフォームに対して行われ、通知クライアント プラットフォームが WNS に対してチャネルの URI を要求します。要求が完了すると、URI を含む PushNotificationChannel オブジェクトが戻り値として返されます。
var channel;
var pushNotifications = Windows.Networking.PushNotifications;
var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();
return channelOperation.then(function (newChannel) {
channel = newChannel;
// Success. The channel URI is found in newChannel.uri.
},
function (error) {
// Could not create a channel. Retrieve the error through error.number.
}
);
ステップ 2: チャネルの URI をサーバーに送信する
チャネルの URI は HTTP POST 要求にパッケージ化され、サーバーに送られます。
重要 この情報は、セキュリティで保護された方法でサーバーに送る必要があります。チャネルの URI を送る際に、サーバーでのアプリの認証が必要になるようにします。情報を暗号化し、HTTPS などのセキュリティで保護されたプロトコルを使ってください。
var serverUrl = "https://www.contoso.com";
var xhr = new WinJS.xhr({
type: "POST",
url: serverUrl,
headers: {"Content-Type": "application/x-www-form-urlencoded"},
data: "channelUri=" + channel.uri
}).then(function (req) {
// Channel URI successfully sent to server. Retrieve the response from req.response.
},
function (req) {
// Could not send channel URI to server. Retrieve the error through req.statusText.
}
);
注釈
チャネルを要求する
次のロジックを使って、アプリが呼び出されるたびに新しいチャネルを要求する必要があります。
- チャネルを要求します。
- 新しいチャネルと前のチャネルを比較します。チャネルが同じ場合、これ以上の操作は必要ありません。この場合、アプリからサービスにチャネルが正常に送られるたびにアプリはそのチャネルをローカルに保存する必要があります。これにより、そのチャネルを後で比較できます。
- チャネルが変更された場合は、新しいチャネルを Web サービスに送ります。次の場合に常に新しいチャネルを送るエラー処理ロジックを含めます。
- アプリがこれまでにチャネルを Web サービスに送ったことがない場合。
- アプリから Web サービスへの最後のチャネル送信が失敗した場合。
createPushNotificationChannelForApplicationAsync メソッドへの呼び出しが異なる場合は、必ずしも異なるチャネルが返されるとは限りません。最後の呼び出しからチャネルが変更されていない場合、アプリは、同じチャネルをサービスにもう一度送らないようにして、作業とインターネット トラフィックを軽減する必要があります。アプリには、同時に複数の有効なチャネル URI を指定できます。一意のチャネルはそれぞれ有効期限切れになるまで有効なままです。そのため、新しいチャネルを要求しても、前のチャネルの有効期限に影響することはないので問題ありません。
アプリが呼び出されるたびに新しいチャネルを要求すると、常に有効なチャネルにアクセスできる機会が最大限に高まります。このことは、コンテンツが常にライブであることが不可欠なタイルまたはトーストのシナリオの場合、特に重要です。ユーザーが 30 日に複数回アプリを実行しないことが心配な場合は、定期的にチャネル要求コードを実行するバックグラウンド タスクを実装できます。
チャネル要求でのエラーを処理する
インターネットが利用できない場合は、createPushNotificationChannelForApplicationAsync メソッドへの呼び出しが失敗することがあります。これを処理するには、手順 2. で示したコードに再試行ロジックを追加します。失敗した場合は毎回 10 秒間待ってから 3 回試行することをお勧めします。3 回とも失敗した場合、アプリは、次にユーザーがアプリを起動してもう一度実行するまで待機する必要があります。
チャネルを閉じる
close メソッドを呼び出すと、アプリはすぐにすべてのチャネルで通知の配信を停止できます。アプリでそのような処理を実行することは一般的ではありませんが、特定のシナリオでは、アプリへの通知の配信をすべて停止したい場合があります。たとえば、アプリにユーザー アカウントの概念が備わっていて、ユーザーがそのアプリからログアウトする場合、タイルにそのユーザーの個人情報が表示されなくなると考えるのは理にかなっています。タイルからコンテンツをクリアし、通知の配信を停止するには、次の手順を実行する必要があります。
- ユーザーにタイル、トースト、バッジ、または直接通知を配信している任意の通知チャネルで PushNotificationChannel.close メソッドを呼び出して、すべてのタイルの更新を停止します。close メソッドを呼び出すと、そのユーザーに関する通知がそれ以上クライアントに配信されなくなります。
- TileUpdater.clear メソッドを呼び出してタイルのコンテンツをクリアし、前のユーザーのデータをタイルから削除します。