テンプレート

テンプレートを使用すると、クライアント アプリケーションで受信する通知の正確な形式を指定できます。 テンプレートを使用した場合、アプリで以下のようないくつかの利点が得られます。

  • プラットフォームに依存しないバックエンド。

  • 個人用に設定された通知。

  • クライアント バージョンの独立。

  • ローカライズが簡単です。

このセクションでは、テンプレートの使い方について 2 つの詳細な例を紹介します。1 つはあらゆるプラットフォームのデバイスに対してプラットフォーム非依存の通知を送信する方法、もう 1 つは、ブロードキャスト通知を各デバイス向けに個人用に設定する方法です。

クロスプラットフォームでのテンプレートの使用

プッシュ通知を送信する標準的な方法は、送信する通知ごとに固有のペイロードをプラットフォーム通知サービス (WNS、APNS) に送信することです。 たとえば、APNS にアラートを送信する場合、ペイロードは次の形式の JSON オブジェクトです。

{“aps”: {“alert” : “Hello!” }}

Windows Microsoft Store アプリケーションで同様のトースト メッセージを送信するには、ペイロードは次のようになります。

<toast>
  <visual>
    <binding template=\"ToastText01\">
      <text id=\"1\">Hello!</text>
    </binding>
  </visual>
</toast>

同様のペイロードを MPNS (Windows Phone) と GCM (Android) プラットフォーム用にも作成できます。

この要件により、アプリ バックエンドではプラットフォームごとに異なるペイロードを生成する必要があり、必然的にバックエンドがアプリのプレゼンテーション層の一部を担うことになります。 これにより、ローカリゼーションとグラフィック レイアウトの問題が生じます (さまざまな種類のタイル用の通知を含む Windows ストア アプリの場合は特にそうです)。

Notification Hubs のテンプレート機能を使用すると、クライアント アプリでテンプレート登録と呼ばれる特別な登録を作成できます。この登録には、タグのセットに加えて、テンプレートが含まれます。 先ほどのペイロードの例では、プラットフォームに依存しない情報は、実際のアラート メッセージ (Hello! ) だけです。 テンプレートは、通知ハブに対する一連の命令であり、該当する特定のクライアント アプリの登録に対してプラットフォームに依存しないメッセージを形成する方法を指示します。 先ほどの例で、プラットフォームに依存しないメッセージは message = Hello! という単一のプロパティです。

この処理を以下の図に示します。

Templates

iOS クライアント アプリ登録のテンプレートは次のとおりです。

{“aps”:{“alert”:”$(message)”}}

Windows Microsoft Store クライアント アプリの類似テンプレートは次のとおりです。

<toast>
  <visual>
    <binding template=\"ToastText01\">
      <text id=\"1\">$(message)</text>
    </binding>
  </visual>
</toast>

実際のメッセージは式に置き換えられることに注意してください $(message)。 この式は、通知ハブがこの特定の登録にメッセージを送信するたびに、このテンプレートに続くメッセージを作成するように指示します。

クライアント アプリケーションでは、複数のテンプレートを使用するために複数の登録を作成できます。たとえば、アラート メッセージのテンプレートやタイル更新用のテンプレートなどです。 また、ネイティブ登録 (テンプレートなしの登録) とテンプレート登録を組み合わせることもできます。

注意

Notification Hub は、同じクライアント アプリに属しているかどうかを考慮せずに、登録ごとに 1 つの通知を送信します。 この動作を使用して、プラットフォームに依存しない通知を多数の通知に変換することができます。 たとえば、通知ハブに対する同一のプラットフォーム非依存メッセージを、バックエンドに意識させることなく、トースト アラートやタイル更新でシームレスに変換できます。 一部のプラットフォーム (iOS など) では、短期間に送信された場合、同一のデバイスに対する複数の通知が折りたたまれることがあります。

個人用設定にテンプレートを使用する

テンプレートを使用することのもう 1 つのメリットは、Notification Hubs を使用して、登録ごとに通知の個人用設定を行うことができる点です。 たとえば、特定の場所の天候を示したタイルを表示する天気アプリがあるとします。 ユーザーは、摂氏または華氏、1 日分の予報または 5 日分の予報を選択できます。 テンプレートを使用すると、インストールされたクライアント アプリごとに必要な形式を登録し (1 日分と摂氏、1 日分と華氏、5 日分と摂氏、5 日分と華氏)、それらのテンプレートへの入力に必要なすべての情報 (たとえば、5 日分の予報と摂氏および華氏の気温) を含む単一のメッセージをバックエンドから送信することができます。

1 日分の予報と摂氏の気温のテンプレートは次のようになります。

<tile>
  <visual>
    <binding template="TileWideSmallImageAndText04">
      <image id="1" src="$(day1_image)" alt="alt text"/>
      <text id="1">Seattle, WA</text>
      <text id="2">$(day1_tempC)</text>
    </binding>  
  </visual>
</tile>

Notification Hub に送信されるメッセージには、次のプロパティが含まれています。

  • Day1_image

  • Day1_tempC

  • Day1_tempF

  • Day2_image

  • Day2_tempC

このパターンを使用すると、バックエンドは単一のメッセージを送信するだけでよく、アプリ ユーザーのための特定の個人用設定オプションを格納する必要はありません。 このシナリオを以下の図に示します。

Templates

テンプレートに登録する方法

テンプレートの登録方法の詳細については、「 登録管理」を参照してください。

テンプレート式の言語

テンプレートに文字列を含めることはできません。 XML または JSON ドキュメントに制限されます。 また、式を配置できる場所も決まっています。XML の場合はノード属性または値、JSON の場合は文字列プロパティ値です。

たとえば、以下の XML テンプレートは無効です。

<tile>
  <visual>
    <binding $(property)>
      <text id="1">Seattle, WA</text>
    </binding>  
  </visual>
</tile>

次のセクションで説明するように、連結を使用する場合は、式を中かっこで囲む必要があります。 次に例を示します。

<tile>
  <visual>
    <binding template="ToastText01">
      <text id="1">{'Hi, ' + $(name)}</text>
    </binding>  
  </visual>
</tile>

JSON の類似コードは次のようになります。

{"aps":{"alert":"{'Hi, ' + $(name)}"}}

次の表に、テンプレートで使用できる言語を示します。

説明

$(prop)

指定された名前のイベント プロパティを参照します。 プロパティ名では、大文字と小文字は区別されません。 この式は、プロパティのテキスト値に解決されます。ただし、プロパティが存在しない場合は空の文字列に解決されます。

$(prop, n)

上記のように、テキストは n 文字で明示的にクリップされます。たとえば $(title, 20) 、タイトル プロパティの内容を 20 文字でクリップします。

.(prop, n)

上記と同じですが、テキストが省略されているので、テキストに 3 つのドットのサフィックスが付いています。 省略された文字列とサフィックスの合計サイズは n 文字以下です。 .(title, 20) 入力プロパティが "This is the title line" の場合、 This is the title....

%(prop)

$(name)出力が URI エンコードされている点を除いて同様です。

#(prop)

JSON テンプレートで使用されます (たとえば iOS や Android テンプレート)。

この関数は、JSON テンプレート (Apple テンプレートなど) で使用する場合を除き、以前に指定したのとまったく同じように $(prop) 機能します。 この場合、この関数が "{','}" で囲まれず (たとえば、 ‘myJsonProperty’ : ‘#(name)’)Javascript 形式の数値に評価される場合など)、 regexp: (0|([1-9][0-9]*))(\.[0-9]+)?((e|E)(+|-)?[0-9]+)?出力 JSON は数値になります。

たとえば、 ‘badge : ‘#(name)’ 次のようになります ‘badge’ : 40 (ではなく ‘40‘)。

‘text’ or “text”

リテラルです。 リテラルは、一重引用符または二重引用符で囲んだ任意のテキストを保持します。

expr1 + expr2

2 つの式を結合して 1 つの文字列にする連結演算子です。

上記のどの形式でも使用できます。

連結を使用している場合は、式全体を {} で囲む必要があります。 たとえば、「 {$(prop) + ‘ - ’ + $(prop2)} 」のように入力します。