トースト通知からアクティブ化を処理する方法 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
注 JavaScript を使わない場合は、「トースト通知からアクティブ化を処理する方法 (XAML)」をご覧ください。
このトピックでは、アプリから送信されたトースト通知をクリックするユーザーへの応答で実行する必要のある処理について説明します。アプリは、トーストに固有の UI を表示して応答する必要があります。一般に、アプリは、トーストのコンテンツに関係するコンテキストまたはビューで起動するようにしてください。 これはトースト ペイロードに含めたアクティブ化文字列を使って行います。この文字列は、アクティブ化イベント内の引数としてアプリに渡されます。基本的なデータ フローは次のとおりです。
- アプリまたは Web サービスが、起動文字列を含めてトースト ペイロードを作り、送信する
- このトーストが表示される/アクション センターに送られる
- ユーザーがこのトーストを選ぶ (クリックまたはタッチする)
- activated イベントが発生する
- アプリの activated イベント ハンドラーが、起動文字列を読み取る
- 起動文字列で指定されたパラメーターを使ってアプリが起動される
注 Microsoft Visual Studio を使ってトースト通知コード機能をテストしている場合は、Windows x86、x64、または Windows ランタイムのコンピューターで、ローカル コンピューターとリモート コンピューターのいずれかのデバッグ設定を使う必要があります。Visual Studio シミュレーターのデバッグ機能オプションは使用できません。コードはシミュレーターでコンパイルされ、実行されますが、トーストが表示されなくなります。
理解しておく必要があること
テクノロジ
- Windows Runtime
必要条件
このトピックを理解するための要件:
- トースト通知に関する用語と概念についての実用的知識。詳しくは、「トースト通知の概要」をご覧ください。
- トースト通知の送受信を行うには、アプリのマニフェストで [トースト対応] オプションを "true" (Visual Studio マニフェスト エディターでは "はい") に設定する必要があります。詳しくは、「クイック スタート: Visual Studio マニフェスト エディターを使用した既定のタイルの作成」と「トースト通知をオプトインする方法」をご覧ください。
- XML と、ドキュメント オブジェクト モデル (DOM) API を使った XML の操作に関する知識。
- トーストの XML スキーマに関する知識。詳しくは、「トースト スキーマ」をご覧ください。
- Windows ランタイム API を使って JavaScript で基本的な Windows ストア アプリを作成できること。詳しくは、「JavaScript を使った初めての Windows ストア アプリの作成」をご覧ください。
手順
ステップ 1: トースト ペイロードにアクティブ化データを含める
トースト通知を介してアプリをアクティブ化する場合は、トーストのコンテンツに関連する情報をアプリに与える必要があります。その結果、アプリはその既定ではなく関連付けられたビューで起動し、このコンテンツを反映できます。アプリまたは Web サービスによってトーストが作られる場合は、launch 属性が使われてこのアクティブ化情報が指定されます。この文字列は、コマンド ライン引数と同じと考えることができます。この文字列には、XML ペイロードを無効にすることがない限り、アプリが理解できる任意の情報を含めることができます。トーストの XML ペイロードの合計サイズ (起動文字列を含む) は 5 KB を超えることはできません。
起動属性文字列を含めないと、アプリはスタート画面から起動したときと同じように、通常どおりに起動します。
この手順は、toastXml
という XmlDocument オブジェクトを既に作成してあることを前提としています。この例では、launch 属性を作成し、その文字列値を割り当て、これをトースト通知の XML ペイロードに追加します。トースト通知一式を作る方法については、「クイック スタート: トースト通知の送信」をご覧ください。
var launchAttribute = toastXml.createAttribute("launch");
launchAttribute.value = "{\"myContext\":\"12345\"}";
var toastNode = toastXml.selectSingleNode("/toast");
toastNode.attributes.setNamedItem(launchAttribute);
「クイック スタート: トースト通知の送信」で定義されている visual 要素のコンテンツに基づいて、上のコードから次の XML が生成されます。
<toast launch="{"myContext":"12345"}">
<visual>
<binding template="ToastImageAndText01">
<image id="1" src="ms-appx:///images/redWide.png" alt="red graphic"/>
<text id="1">Hello World!</text>
</binding>
</visual>
</toast>
ステップ 2: "activated" イベントに登録する
ユーザーがトーストをクリックするか、タッチして選ぶときに、activated イベントが発生します。アプリは、addEventListener 関数を使って、イベントが通知されるように登録する必要があります。
注 トーストに起動属性文字列を含めず、トーストが選ばれる時点で既にアプリが稼働している場合、activated イベントは発生しません。
WinJS.Application.addEventListener("activated", onActivatedHandler, false);
ステップ 3: トーストの "activated" イベントのハンドラーを実装する
アクティブ化の種類にかかわらず、登録したイベント ハンドラーはすべてのアクティブ化イベントを受け取ります。イベント通知に含められる kind プロパティは、アクティブ化イベントの種類を示します。XML ペイロードに指定された launch 属性を持つトーストをユーザーがクリックすると、launch タイプのアクティブ化イベントが発生します。これは、ユーザーがアプリのプライマリ タイルまたはセカンダリ タイルをタップしたときに発生するものと同じイベントです。
手順 1. で launch 属性を使って指定したアクティブ化文字列は、イベント通知の arguments プロパティに含められます。
この例は、手順 2. で登録した activated イベント ハンドラーの概略を示しています。
function onActivatedHandler(args) {
if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
var launchString = args.detail.arguments;
// Handle activation as required for your app, using the launch string.
}
}