バックグラウンド接続オプションの設定方法 (HTML)

[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]

このトピックでは、JavaScript や HTML で記述された Windows ランタイム アプリで利用できるバックグラウンド ネットワーク接続機能について説明し、さらに、バックグラウンド接続オプションの構成方法について説明します。

理解しておく必要があること

テクノロジ

  • IXMLHTTPRequest2

    XMLHttpRequest オブジェクトの拡張機能を使って、Web リソースへのアクセスを有効にします。

  • System.Net.Http

    最新の Web クライアントを使って Web サービスに接続することができます。

必要条件

  • 以下の情報は、常時接続のネットワーク接続に依存する、あらゆる接続型 (ネットワーク認識型) の Windows ランタイム アプリに適用されます。このトピックは Windows 8.1、Windows Phone 8.1、および Windows Server 2012 R2 の JavaScript と HTML で記述されたアプリに適用されます。 JavaScript アプリに適用されるバックグラウンド タスクについて詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。

    Windows 8.1 と Windows Server 2012 R2 の C++/XAML で記述されたあらゆる接続型 (ネットワーク認識型) Windows ストア アプリと、C#、VB.NET、または Managed C++ で .NET Framework 4.5 を使ったアプリについて詳しくは「バックグラウンドで接続を維持する方法」をご覧ください。

Windows ストア アプリのライフサイクル モデル

Windows 8 以降では、Windows ランタイム アプリの新しいライフサイクル モデルが導入されています。これは、Windows 8 のデスクトップ アプリや以前のバージョンの Windows のアプリに使われるモデルとは異なります。既定では、Windows ランタイム アプリはバックグラウンドに移行すると処理が完全に中断されます。アプリの中断にはいくつかの例外があります (バックグラウンドでの印刷、オーディオ ストリームへのアクセス、Windows.Networking.BackgroundTransfer を使ったファイルの転送など)。ただし、Windows.Networking.BackgroundTransfer のように、アプリが中断されたうえで、別のプロセスでネットワーク転送が続けられるケースもあります。

Windows ランタイム アプリのこの新しいモデルは、システムの全体的な消費電力を抑えながら、フォアグラウンドで実行されているアプリの応答性を向上させます。 消費電力を削減することにより、バッテリ駆動システムの再充電までの動作時間が長くなります。また、この新しいモデルには、エンド ユーザーに常時接続のエクスペリエンスを提供するためにバックグラウンドで動作する必要があるアプリ (VoIP (Voice over Internet Protocol)、インスタント メッセージング (IM)、電子メールなど) のためのメカニズムが用意されています。これにより、リモート サーバーへの長時間ネットワーク接続に依存するアプリは、中断されているときも引き続き動作できるようになります。これらは、リアルタイム アプリの常時接続、消費電力の削減、アプリの応答性の向上という競合する要求です。

JavaScript で記述され、常時接続を必要とする Windows ランタイム アプリのリアルタイム ネットワーク シナリオは、Windows 8 に導入された次のような新機能を使って実現できます。

  • バックグラウンド タスク
  • SessionConnected のためのシステム トリガー
  • タイム トリガー
  • Windows プッシュ通知サービス (WNS)
  • 直接プッシュ通知

これらの機能は、Windows ランタイム アプリが中断されているときに、直接プッシュ通知を受信する必要がある常時接続型アプリをサポートします。これらのアプリは、"常に到達可能" と表現することもあります。このトピックでは、開発者が WNS と直接プッシュ通知を使って、常時接続型のリアルタイム アプリを構築する方法に重点を置いています。これらの機能を使うには、アプリをロック画面に表示するアプリにする必要があります。

ネットワーク アプリでは、他のバックグラウンド タスク機能も使うことができます。Windows ランタイム アプリで使うことができるその他のトリガーは次のとおりです。

  • メンテナンス トリガー (メンテナンスのための定期的なイベント)
  • ユーザーとセッションを対象とするシステム トリガー (ユーザー セッションの接続/切断、ユーザーの存在/不在、オンライン ID の変更)
  • ネットワークの状態を対象とするシステム トリガー (ネットワークの状態の変化、インターネットを利用できるかどうか)
  • ロック画面を対象とするシステム トリガー (アプリの追加/削除)

タイム トリガーは、リアルタイム接続は必要ではないが、アプリを一定の間隔で短時間実行する必要がある場合に使うことができます。システム トリガーは、アプリでイベント (インターネット接続の利用状況やユーザー プレゼンスなど) に注意を払う必要がある場合に使うことができます。アプリで各種トリガーを組み合わせることにより、さまざまなシナリオを実現できます。 詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。

ほとんどの Windows ランタイム アプリでは、このトピックで説明する直接プッシュ通知を使う必要はありません。ライブ タイルを使うか、ライブ タイルと WNS のプッシュ通知 (直接プッシュ通知以外) を併用することで、アプリがバックグラウンドで常に実行されているという印象をユーザーに与えることができます。 ライブ タイルを使うために、アプリをロック画面に表示するアプリ (後述) にしたり、バックグラウンドで実行したりする必要はありません。ただし、ライブ タイルと直接プッシュ通知を併用する場合は、アプリをロック画面上に配置する必要があります。

常時接続の要件

アプリを常時接続 (常に到達可能) にするには、通常、次の 2 つの要素が必要となります。

  • 長時間実行されるプロセス - 着信ネットワーク通知を受信し、アプリで迅速に処理できるようにします。
  • リモート エンドポイントへの長時間のネットワーク接続 - 必要に応じてデータを送受信できるようにします。

以前のバージョンの Windows では、アプリはフォーカスを失っても (バックグラウンドで) 常時実行されています。これらのアプリは、バックグラウンドにあるときにデータやキープアライブ メッセージを送受信することで長時間接続を維持します。アプリをバックグラウンドで実行できるようにすると、リソースが消費され、他のアプリの応答性やバッテリーの寿命に影響を及ぼす可能性があります。

Windows ランタイム アプリとロック画面

Windows 8 には、Windows ランタイム アプリがバックグラウンドに移行したときにアプリを中断する新しいソフトウェア モデルが採用されています。アプリが中断状態になると、システムで受け取ったすべてのパケットはすぐにアプリに配信されず、着信ネットワーク パケットが破棄される場合があります。アプリが中断状態になると、新しいパケットは送られません。このような状況になった結果、既にあるネットワーク接続が閉じる場合があります。

常時接続にするには、"ロック画面に表示するアプリ" にする必要があります。ロック画面に表示するアプリとは、ロック画面に通知を表示し、アプリがフォアグラウンドにないときにバックグラウンドでコードを実行できる特殊な種類のアプリです。ロック画面に表示するアプリにできるのは、1 つ以上のバックグラウンド タスクを使うアプリに限られます。

ロック画面に表示するアプリには、次のような特別な機能があります。

  • WNS から直接プッシュ通知を受け取ることができ、通知を受け取ったときにコードを実行できます。
  • タイム トリガーが発生したときにコードを実行できます。
  • ユーザー セッションが開始されたときにコードを実行できます。

ロック画面にピン留めされたアプリは、新しい情報がある場合にロック画面のバッジ アイコンを更新したり、表示したりすることによって、バックグラウンドにあるときにユーザーに情報を表示できます。これらのアプリでは、メッセージが届いたときに画面上に通知を表示することもできます。ユーザーが通知をタップまたはクリックすると、デバイスのロックを解除するよう求められます。デバイスのロックを解除すると、コンテキスト情報を使って通知に対応するアプリを起動します。

ロック画面に表示するアプリには、重要な制限事項がいくつかあります。ユーザーは、常に最大 7 つのアプリをロック画面に配置できます。ユーザーは、ロック画面のアプリをいつでも追加または削除できます。

ロック画面に表示するアプリは、ユーザーがデバイスから離れているときに見逃した可能性のある情報を提供する優れた方法です。また、着信呼び出し、着信インスタント メッセージ、緊急の電子メールなど、ユーザーがすぐに対応する必要があるイベントについて、画面に通知を表示する場合にも適しています。

ほとんどのアプリは、ロック画面に表示するアプリにする必要はありません。アプリは、バックグラウンドで中断されているときに、WNS のプッシュ通知 (直接プッシュ通知以外) を使ってライブ タイルを更新できます。ライブ感のある新鮮なコンテンツを表示することで、アプリが実行中であるという印象をユーザーに与えることができます。また、アプリで WNS を使ってユーザーにトースト通知を表示することも、アプリのタイルでバッジの数値を更新することもできます。

ロック画面に表示するアプリのスロット数は制限されているため、ロック画面に表示するアプリの権限がなくても動作するように、アプリの構築を計画する必要があります。ユーザーは、アプリをロック画面に追加することを明示的に許可する必要があります。アプリは、フォアグラウンドで表示されているときは常に動作している必要があります。ロック画面に表示するアプリにすると、アプリがバックグラウンドにあるときにもフォアグラウンドのときと同じシナリオを簡単に実現できます。

JavaScript と HTML で作られたアプリがバックグラウンドにある場合に、そのアプリで着信ネットワーク パケットを受信できる機能が 1 つあります。

  • システムによって受信され、アプリのバックグラウンド タスクの実行につながる直接プッシュ通知です。 この機能を使って、アプリは Windows プッシュ通知サービス (WNS) から生データを受信します。このデータの内容はアプリが理解できる必要があります。アプリは、直接プッシュ通知を受信するように WNS に登録する必要があります。

以下で説明するさまざまなメカニズムを使うことで、ロック画面に配置するアプリのリアルタイム シナリオを実現できます。各メカニズムには利点と妥協点があります。メカニズムは相互排他的ではないため、アプリで組み合わせて使うことができます。

Windows ストア アプリでの WNS の使用

WNS は、Microsoft がホストする Windows 8 向けのクラウド サービスです。Windows ランタイム アプリで WNS を使って通知を受け取り、コードの実行、ライブ タイルの更新、画面上の通知の表示などを行うことができます。WNS を使うには、ローカル コンピューターをインターネットに接続して、WNS サービスがコンピューターと通信できるようにする必要があります。詳しくは、「プッシュ通知の概要」をご覧ください。

フォアグラウンドの Windows ランタイム アプリは WNS を使って、ライブ タイルの更新、ユーザーへの通知の表示、バッジの更新を行うことができます。WNS を使うために、アプリをロック画面に配置する必要はありません。アプリでプッシュ通知に応答してコードを実行する必要がある場合は、WNS を使うことを検討してください。

ロック画面に配置する必要のないアプリ (ほとんどのアプリ) では、WNS を使ってライブ タイルを更新できます。

Windows ランタイム アプリをロック画面にピン留めし、バックグラウンドで WNS を使うと、アプリは WNS からリアルタイムで直接プッシュ通知を受信し、バッジの更新または通知としてロック画面に表示できます。ロック画面のアプリに直接プッシュ通知が配信されると、アプリはその通知に応答してコードを実行できます。WNS を使うと、Windows 8.1 と Windows Server 2012 R2 の C++/XAML で記述された Windows ストア アプリと、C#、VB.NET、または Managed C++ で .NET Framework 4.5 を使ったアプリで利用できるネットワーク トリガーを使った場合よりも電力効率を向上させることができます。

WNS には、次のようなさまざまな利点があります。

  • WNS は、ロック画面のアプリにリアルタイムで通知を配信するための最も電力効率に優れたメカニズムです。
  • WNS により、アプリの開発者モデルが簡素化されます。タイルまたはトーストはオペレーティング システムによってレンダリングされるため、ほとんどのシナリオでは開発者がバックグラウンド タスクを記述する必要はありません。一部のシナリオで、バックグラウンド タスクをアプリで実行する必要がある場合は、直接プッシュ通知と実行するバックグラウンド タスクを登録する必要があります。
  • WNS への接続は Windows によって維持されるため、クライアント アプリとリモート サーバー間で固定ソケット接続を維持する必要はありません。そのため、キープアライブ メッセージを送る際のオーバーヘッドが不要になります。
  • クライアントとクラウド サービス間の 1 つの WNS 接続で、ローカル コンピューター上のすべてのアプリをサポートできます。言い換えると、クライアントのバッテリを効率的に使うことでバッテリの長寿命化が可能となります。
  • 保留中の多数の TCP ソケット接続をクライアントとリモート サービス間で維持する必要がないため、サーバー側のサービスに必要な運用コストを削減することができます。
  • アプリを終了しても、WNS を使ってタイルの更新やトーストの表示を行ったり、着信の直接プッシュ通知を受け取った時点でバックグラウンド タスクをトリガーして実行することができるため、アプリをメモリに常駐させる必要はありません。
  • 直接プッシュ通知を使ったバックグラウンド タスクは、JavaScript、C++/XAML や、Windows 8.1 と Windows Server 2012 R2 の C#、VB.NET、または Managed C++ で .NET Framework 4.5 を使って記述できます。

JavaScript では、ControlChannelTrigger を使ったネットワーク トリガー機能を使うことはできません。

  ControlChannelTrigger は、Windows Phone ではサポートされていません。

 

ネットワーク トリガーを使ったバックグラウンド ネットワークは、C++/XAML や、Windows 8 と Windows Server 2012 の C#、VB.NET、または Managed C++ で .NET Framework 4.5 を使ってのみ記述できます。詳しくは、「バックグラウンドで接続を維持する方法」をご覧ください。

WNS には、一部のアプリに影響を及ぼす可能性のある制限事項もいくつかあります。パブリック インターネット アクセスがブロックされているプライベート ホーム ネットワークや社内ネットワークに接続されたローカル コンピューターでは、WNS を使うことはできません。また、インターネット アクセスを利用できる場合でも、一部のネットワーク ファイアウォールによって WNS がブロックされる可能性があります。WNS を使う場合、考慮する必要があると考えられる欠点が他にもあります。具体的には、通知はベストエフォート方式で配信されるので配信は保証されません。直接プッシュ通知のペイロードの最大サイズは 5 KB です。

さまざまな利点があることを考えると、VoIP、IM、電子メールの各アプリの開発者は、ロック画面に表示するアプリで WNS の通知を使うことを検討するようお勧めします。ただし、WNS の通知が要件を満たさない場合は、代替方法を検討してください。

WNS を使ってライブ タイルの更新またはトーストの表示だけを行う場合は、ロック画面に表示するアプリを構築する必要はありません。ロック画面に表示するアプリが必要となるのは、WNS を使うアプリでバックグラウンド タスクをトリガーして実行するために直接プッシュ通知が必要な場合に限られます。

Windows ランタイム アプリでのタイム トリガーまたはシステム イベント トリガーの使用

ロック画面に表示するアプリは、最短 15 分間隔でタイム トリガーを使って定期的にコードを実行するように構成できます。たとえば、アプリが POP3 または IMAP 電子メール サーバーに接続されているときに、新着電子メール メッセージをポーリングする必要がある場合にタイム トリガーを使います。

ロック画面に表示するアプリでは、システム イベント トリガーを使って、ユーザーがローカル コンピューターにログオンしたときにコードを実行することもできます (セッションを開始する場合はシステム トリガーを使います)。たとえば、ユーザーがインスタント メッセージ サービスにサインインしたら、ユーザー セッションを開始し、インスタント メッセージを受け取ることができるようにする場合は、システム イベント トリガーを使います。

このトピックでは、直接プッシュ通知と併せて WNS またはネットワーク トリガー機能を使う、ロック画面に表示するアプリの構築に重点を置きます。タイマーを使う方法については、「タイマーでバックグラウンド タスクを実行する方法」をご覧ください。バックグラウンド タスクについて詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。

バックグラウンド タスクとサンドボックス化

バックグラウンド タスクの有効期間は、バックグラウンド タスクを実装する関数によって決まります。バックグラウンド タスクがバッテリ寿命に悪影響を与えないようにするため、Windows では、バックグラウンド タスク中にアプリで使うことができる CPU とネットワーク I/O リソースについて制限が適用されます。各アプリは、これらのリソースのクォータを定期的に受け取り、このクォータを使い果たすと、アプリのバックグラウンド タスクが一時停止します。アプリには、サンドバックが原因の一時停止に対する回復力が必要です。

詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。

次のステップ

直接プッシュ通知を使ったバックグラウンド ネットワーク通知を受信するための、ロック画面に表示するアプリを作成する方法について詳しくは、「バックグラウンドの直接プッシュ通知を使うロック画面のアプリの作成方法」をご覧ください。

プッシュ通知チャネルを登録してサーバーに送信し、直接プッシュ通知によってアクティブ化するバックグラウンド タスクを登録してから、そのチャネルに直接プッシュ通知を送信してバックグラウンド タスクをアクティブ化する手順について詳しくは、「ロック画面のアプリへの直接プッシュ通知の配信に WNS を使う方法」をご覧ください。

直接プッシュ通知を使ったバックグラウンド ネットワーク通知を受信するためにバックグラウンド タスクを記述する方法について詳しくは、「直接プッシュ通知用のバックグラウンド タスクを記述する方法」をご覧ください。

直接プッシュ通知を使うためのガイドラインとチェック リストについて詳しくは、「直接通知のガイドラインとチェック リスト」をご覧ください。

関連トピック

その他のリソース

ネットワーク サポートの追加

バックグラウンド ネットワーク

バッジの概要

直接通知のガイドラインとチェック リスト

Windows プッシュ通知サービス (WNS) に対して認証する方法

ロック画面のアプリへの直接プッシュ通知の配信に WNS を使う方法

直接プッシュ通知用のバックグラウンド タスクを記述する方法

ロック画面の概要

プッシュ通知の概要

バックグラウンドの直接プッシュ通知を使うロック画面のアプリの作成方法

バックグラウンドで接続を維持する方法

バックグラウンド タスクによるアプリのサポート

タイルとタイル通知の概要

トースト通知の概要

バックグラウンドでのデータの転送

ネットワーク接続のトラブルシューティングとデバッグ

リファレンス

ControlChannelTrigger

HttpClient

HttpClientHandler

IXMLHTTPRequest2

MessageWebSocket

StreamSocket

StreamWebSocket

System.Net.Http

Windows.ApplicationModel.Background

Windows.Networking.BackgroundTransfer

Windows.Networking.PushNotifications

Windows.Networking.Sockets

サンプル

バックグラウンド タスクのサンプルに関するページ

ロック画面のアプリのサンプルに関するページ

プッシュ通知と定期的な通知のクライアント側のサンプルに関するページ

直接通知のサンプル