クイック スタート: 直接通知のバックグラウンド タスクの作成と登録 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
注 JavaScript を使わない場合は、「クイック スタート: 直接通知のバックグラウンド タスクの作成と登録 (XAML)」をご覧ください。
Windows ストア アプリのバックグラウンド タスク関数を作成して登録できます。このコードは、直接通知を受け取ると実行され、アプリがフォアグラウンドにないときに機能を提供します。
この手順を完了するには、3 つの別個のファイル (アプリのコード、アプリのマニフェスト、バックグラウンド タスク コードを含む新しい JavaScript ファイル) を編集する必要があります。
必要条件
このトピックを理解したり、このトピックで示されているコードを使ったりするための要件:
- プッシュ通知に関する知識。詳しくは、「プッシュ通知の概要」を参照してください。
- 直接プッシュ通知に関する知識。詳しくは、「直接通知の概要」を参照してください。
- Windows プッシュ通知サービス (WNS) にプッシュ通知を送信できるクラウド サービス。詳しくは、「クイック スタート: プッシュ通知の送信」をご覧ください。
- バックグラウンド タスクの親アプリ。このアプリにはロック画面に表示する許可が与えられている必要があります。詳しくは、「ロック画面の概要」をご覧ください。
手順
1. バックグラウンド タスク クラスを作る
プロジェクトで、新しい JavaScript (.js) ファイルを作ります。この場合には、ファイル examplebackgroundtask.js
を呼び出します。このファイル内のコードは、直接通知の受信によってバックグラウンドで実行されるようにトリガーされます。次のスケルトン JavaScript 関数をファイルに追加します。
この例の doWork
関数 (名前は何でもかまいません) には、実際のバックグラウンド タスクを構成するコードが含まれています。この関数は、まず、バックグラウンド タスクの現在のインスタンスに関する情報の取得に使われる Windows.UI.WebUI.WebUIBackgroundTaskInstance クラスを介して、通知からコンテンツを取得します。コードの本文は、アプリで定義された直接通知コンテンツに固有のもので、"// ..." というコメントを置き換えます。
重要 このタスク コードは、最後に JavaScript の組み込みの close 関数を呼び出していることに注意してください。このメソッドは、JavaScript バックグラウンド タスクがその作業を完了するか、JavaScript バックグラウンド タスクが取り消されるときに必ず呼び出される必要があります。バックグラウンド タスクを終了しないと、そのプロセスが存在したままとなって、メモリとバッテリ寿命が消費され続けます。これは、バックグラウンド タスクが完了している場合でも同様です。
(function () {
"use strict";
var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current;
function doWork() {
var notificationContent = backgroundTaskInstance.triggerDetails.content;
// ...
close();
}
doWork();
})();
2. アプリのマニフェストでバックグラウンド タスクを宣言する
注 この手順の前提条件として、バックグラウンド タスクをサポートする前にアプリでロック画面オプションを選び、バッジ ロゴを指定する必要があります。詳しくは、「クイック スタート: ロック画面上のタイルの更新とバッジの更新の表示」をご覧ください。
アプリでバックグラウンド タスクを登録する前に、バックグラウンド タスクとそのトリガーをアプリのマニフェストで宣言する必要があります。これは XML として直接行うか、または Microsoft Visual Studio マニフェスト エディターを使って行うことができます。
マニフェスト エディターを使うには、Visual Studio でプロジェクトの Package.appxmanifest ファイルをダブルクリックします。[宣言] タブの [使用可能な宣言] ボックスの一覧の [バックグラウンド タスク] をクリックします。トリガーとして、[プロパティ] の [プッシュ通知] を選びます。[スタート ページ] ボックスに、バックグラウンド タスクの .js ファイル名を入力します。この例では
examplebackgroundtask.js
です。アプリで複数のバックグラウンド タスクを使う場合は、各タスクについてこの手順を繰り返し、それぞれに別のファイルを指定します。
マニフェストの XML に情報を直接追加するには、テキスト エディターでマニフェストを開きます。Extensions 要素内に、バックグラウンド タスク クラスの Extension 要素を追加します。Category 属性は "windows.backgroundTasks" に、StartPage 属性はバックグラウンド タスクの .js ファイル名に設定する必要があります。この例では
examplebackgroundtask.js
です。アプリで複数のバックグラウンド タスクを使う場合は、各タスクについて個別の Extension 要素を追加し、それぞれの要素に別の .js ファイルを指定します。
バックグラウンド タスクで使うトリガーの種類を個別にリストする必要があります。ここでは直接通知に応答してトリガーするバックグラウンド タスクを作るため、プッシュ通知トリガーを宣言します。BackgroundTasks 要素を Extension 要素に追加し、その Task 要素を "pushNotification" に設定します。
完全な Extension 要素は次のとおりです。
<Extension Category="windows.backgroundTasks" StartPage="js\examplebackgroundtask.js">
<BackgroundTasks>
<Task Type="pushNotification"/>
</BackgroundTasks>
</Extension>
3. アプリにバックグラウンド タスクを登録する
次の例は、直接通知への応答としてバックグラウンド タスクを登録するためにアプリの Default.js ファイルなどに追加するコードを示しています。
まず、既に登録されたバックグラウンド タスクかどうかを判断します。この手順は重要です。アプリで同じバックグラウンド タスクが登録されているかどうかを確認しない場合には、同じタスクが何度も登録されることがあります。このことが原因となって CPU 使用率とパフォーマンス面の問題が発生し、タスクが完了できなくなるおそれがあります。
この例では、Windows.ApplicationModel.Background.BackgroundTaskRegistration.AllTasks プロパティを反復処理し、タスクが既に登録されていた場合はフラグを true に設定します。
var taskRegistered = false;
var exampleTaskName = "Example background task class name";
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.AllTasks.first();
while (iter.hasCurrent) {
var task = iter.current.value;
if (task.name === exampleTaskName) {
taskRegistered = true;
break;
}
iter.moveNext();
}
アプリにそのバックグラウンド タスクが登録されていないことが判明した場合は、Windows.ApplicationModel.Background.BackgroundTaskBuilder.register メソッドを呼び出してバックグラウンド タスクを登録できます。このメソッドの呼び出しには、バックグラウンド タスクの .js ファイルの名前 (この例では examplebackgroundtask.js
) と PushNotificationTrigger オブジェクトを含めます。
if (taskRegistered != true) {
var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
var trigger = new Windows.ApplicationModel.Background.PushNotificationTrigger();
builder.name = exampleTaskName;
builder.taskEntryPoint = "js\\ExampleBackgroundTask.js";
builder.setTrigger(trigger);
var task = builder.register();
}
要約
ここでは、アプリ内からバックグラウンド タスクを登録する方法など、直接通知と共に使うバックグラウンド タスク クラスの記述方法の基本について学習しました。また、Windows を使ってアプリでバックグラウンド タスクを登録するために、アプリ マニフェストを更新する方法についても学習しました。
注 バックグラウンド タスクのサンプルをダウンロードして、いくつかの異なる種類のバックグラウンド タスクを使う完全で堅牢な JavaScript アプリのコンテキストで、これらのコード例などを確認することができます。