Notification Hubs テンプレートNotification Hubs templates

テンプレートを使用すると、クライアント アプリケーションで受信する通知の正確な形式を指定できます。Templates enable a client application to specify the exact format of the notifications it wants to receive. テンプレートを使用すると、アプリは、次のようないくつかの異なる利点を実現できます。Using templates, an app can realize several different benefits, including the following:

  • プラットフォームに依存しないバックエンドA platform-agnostic backend
  • 個人用に設定された通知Personalized notifications
  • クライアント バージョンへの非依存性Client-version independence
  • 容易なローカライズEasy localization

このセクションでは、テンプレートの使い方について 2 つの詳細な例を紹介します。1 つはあらゆるプラットフォームのデバイスに対してプラットフォーム非依存の通知を送信する方法、もう 1 つは、ブロードキャスト通知を各デバイス向けに個人用に設定する方法です。This section provides two in-depth examples of how to use templates to send platform-agnostic notifications targeting all your devices across platforms, and to personalize broadcast notification to each device.

クロスプラット フォームでのテンプレートの使用Using templates cross-platform

プッシュ通知を送信する標準的な方法は、送信する通知ごとに固有のペイロードをプラットフォーム通知サービス (WNS、APNS) に送信することです。The standard way to send push notifications is to send, for each notification that is to be sent, a specific payload to platform notification services (WNS, APNS). たとえば、APNS にアラートを送信する場合、ペイロードは次の形式の JSON オブジェクトです。For example, to send an alert to APNS, the payload is a JSON object of the following form:

{"aps": {"alert" : "Hello!" }}

Windows ストア アプリケーションで同様のトースト メッセージを送信する場合、XML ペイロードは次のようになります。To send a similar toast message on a Windows Store application, the XML payload is as follows:

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

同様のペイロードを MPNS (Windows Phone) プラットフォームと FCM (Android) プラットフォーム用にも作成できます。You can create similar payloads for MPNS (Windows Phone) and FCM (Android) platforms.

この要件により、アプリ バックエンドではプラットフォームごとに異なるペイロードを生成する必要があり、必然的にバックエンドがアプリのプレゼンテーション層の一部を担うことになります。This requirement forces the app backend to produce different payloads for each platform, and effectively makes the backend responsible for part of the presentation layer of the app. これにより、ローカリゼーションとグラフィック レイアウトの問題が生じます (さまざまな種類のタイル用の通知を含む Windows ストア アプリの場合は特にそうです)。Some concerns include localization and graphical layouts (especially for Windows Store apps that include notifications for various types of tiles).

Notification Hubs のテンプレート機能を使用すると、クライアント アプリでテンプレート登録と呼ばれる特別な登録を作成できます。この登録には、タグのセットに加えて、テンプレートが含まれます。The Notification Hubs template feature enables a client app to create special registrations, called template registrations, which include, in addition to the set of tags, a template. Notification Hubs のテンプレート機能を使用すると、インストール (推奨) または登録のどちらを操作している場合でも、クライアント アプリでデバイスをテンプレートに関連付けることができます。The Notification Hubs template feature enables a client app to associate devices with templates whether you are working with Installations (preferred) or Registrations. 先ほどのペイロードの例では、プラットフォームに依存しない情報は、実際のアラート メッセージ (Hello!) だけです。Given the preceding payload examples, the only platform-independent information is the actual alert message (Hello!). テンプレートは、通知ハブに対する一連の命令であり、該当する特定のクライアント アプリの登録に対してプラットフォームに依存しないメッセージを形成する方法を指示します。A template is a set of instructions for the Notification Hub on how to format a platform-independent message for the registration of that specific client app. 前の例で、プラットフォームに依存しないメッセージは message = Hello! という 1 つのプロパティです。In the preceding example, the platform-independent message is a single property: message = Hello!.

次の図は、このプロセスを示しています。The following picture illustrates the process:

クロスプラットフォームのテンプレートを使用するプロセスを示す図

iOS クライアント アプリ登録用のテンプレートは次のとおりです。The template for the iOS client app registration is as follows:

{"aps": {"alert": "$(message)"}}

Windows ストア クライアント アプリ用の同様のテンプレートは次のとおりです。The corresponding template for the Windows Store client app is:

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

実際のメッセージが $(message) という式に置き換えられていることに注目してください。Notice that the actual message is substituted for the expression $(message). この式は、通知ハブが該当する登録にメッセージを送信するたびに、このテンプレートに従っており共通の値で切り替えられるメッセージを構築するよう通知ハブに指示します。This expression instructs the Notification Hub, whenever it sends a message to this particular registration, to build a message that follows it and switches in the common value.

インストール モデルで作業している場合、インストールの “templates” キーには複数のテンプレートから成る JSON が保持されています。If you are working with Installation model, the installation “templates” key holds a JSON of multiple templates. 登録モデルで作業している場合、クライアント アプリケーションでは、アラート メッセージ用のテンプレートやタイル更新用のテンプレートなど複数のテンプレートを使用するように、複数の登録を作成することができます。If you are working with Registration model, the client application can create multiple registrations in order to use multiple templates; for example, a template for alert messages and a template for tile updates. また、ネイティブ登録 (テンプレートなしの登録) とテンプレート登録を組み合わせることもできます。Client applications can also mix native registrations (registrations with no template) and template registrations.

通知ハブは、同じクライアント アプリに属するかどうかを考慮せずに、テンプレートごとに 1 つの通知を送信します。The Notification Hub sends one notification for each template without considering whether they belong to the same client app. この動作を使用して、プラットフォームに依存しない通知を多数の通知に変換することができます。This behavior can be used to translate platform-independent notifications into more notifications. たとえば、通知ハブへのプラットフォームに依存しない同じメッセージは、バックエンドに認識させることなく、トースト アラートやタイル更新でシームレスに変換できます。For example, the same platform-independent message to the Notification Hub can be seamlessly translated in a toast alert and a tile update, without requiring the backend to be aware of it. 一部のプラットフォーム (iOS など) ては、短期間に送信される場合、同じデバイスへの複数の通知が折りたたまれることがあります。Some platforms (for example, iOS) might collapse multiple notifications to the same device if they are sent in a short period of time.

テンプレートを使用した個人用設定Using templates for personalization

テンプレートを使用することのもう 1 つのメリットは、Notification Hubs を使用して、登録ごとに通知の個人用設定を行うことができる点です。Another advantage to using templates is the ability to use Notification Hubs to perform per-registration personalization of notifications. たとえば、特定の場所の天候を示したタイルを表示する天気アプリがあるとします。For example, consider a weather app that displays a tile with the weather conditions at a specific location. ユーザーは、摂氏または華氏、1 日分の予報または 5 日分の予報を選択できます。A user can choose between Celsius or Fahrenheit degrees, and a single or five-day forecast. テンプレートを使用すると、インストールされたクライアント アプリごとに必要な形式を登録し (1 日分と摂氏、1 日分と華氏、5 日分と摂氏、5 日分と華氏)、それらのテンプレートへの入力に必要なすべての情報 (たとえば、5 日分の予報と摂氏および華氏の気温) を含む単一のメッセージをバックエンドから送信することができます。Using templates, each client app installation can register for the format required (1-day Celsius, 1-day Fahrenheit, 5-days Celsius, 5-days Fahrenheit), and have the backend send a single message that contains all the information required to fill those templates (for example, a five-day forecast with Celsius and Fahrenheit degrees).

1 日分の予報と摂氏の気温のテンプレートは次のようになります。The template for the one-day forecast with Celsius temperatures is as follows:

<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>

通知ハブに送信されるメッセージには、次のプロパティが含まれています。The message sent to the Notification Hub contains all the following properties:

<table border="1">

<tr><td>day1_image</td><td>day2_image</td><td>day3_image</td><td>day4_image</td><td>day5_image</td></tr>

<tr><td>day1_tempC</td><td>day2_tempC</td><td>day3_tempC</td><td>day4_tempC</td><td>day5_tempC</td></tr>

<tr><td>day1_tempF</td><td>day2_tempF</td><td>day3_tempF</td><td>day4_tempF</td><td>day5_tempF</td></tr>
</table><br/>

このパターンを使用すると、バックエンドは単一のメッセージを送信するだけでよく、アプリ ユーザーのための特定の個人用設定オプションを格納する必要はありません。By using this pattern, the backend only sends a single message without having to store specific personalization options for the app users. このシナリオを以下の図に示します。The following picture illustrates this scenario:

バックエンドによって各プラットフォームにメッセージが 1 つだけ送信される様子を示す図。

テンプレートを登録する方法How to register templates

インストール モデル (推奨) または登録モデルを使用してテンプレートを登録する方法については、「 登録管理」を参照してください。To register with templates using the Installation model (preferred), or the Registration model, see Registration Management.

テンプレートの式言語Template expression language

テンプレートで使用できるのは XML または JSON ドキュメント形式のみです。Templates are limited to XML or JSON document formats. また、式を配置できる場所も決まっています。XML の場合はノード属性または値、JSON の場合は文字列プロパティ値です。Also, you can only place expressions in particular places; for example, node attributes or values for XML, string property values for JSON.

次の表に、テンプレートで使用できる言語を示します。The following table shows the language allowed in templates:

Expression 説明Description
$ (prop)$(prop) 指定された名前のイベント プロパティを参照します。Reference to an event property with the given name. プロパティ名では、大文字と小文字は区別されません。Property names are not case-sensitive. この式は、プロパティのテキスト値に解決されます。ただし、プロパティが存在しない場合は空の文字列に解決されます。This expression resolves into the property’s text value or into an empty string if the property is not present.
$(prop, n)$(prop, n) 上記と同じですが、テキストは明示的に n 文字に省略されます。たとえば $(title, 20) は title プロパティの内容を 20 文字に省略します。As above, but the text is explicitly clipped at n characters, for example $(title, 20) clips the contents of the title property at 20 characters.
.(prop, n).(prop, n) 上記と同じですが、テキストが省略されているので、テキストに 3 つのドットのサフィックスが付いています。As above, but the text is suffixed with three dots as it is clipped. 省略された文字列とサフィックスの合計サイズは n 文字以下です。The total size of the clipped string and the suffix does not exceed n characters. .(title, 20) で入力プロパティが "This is the title line" である場合、結果は This is the title....(title, 20) with an input property of “This is the title line” results in This is the title...
%(prop)%(prop) 出力が URI エンコードされる点を除き、$(name) と同様です。Similar to $(name) except that the output is URI-encoded.
#(prop)#(prop) JSON テンプレートで使用されます (たとえば iOS や Android テンプレート)。Used in JSON templates (for example, for iOS and Android templates).

この関数は前に示した $(prop) と同じように機能しますが、JSON テンプレート (Apple テンプレートなど) で使用する場合は例外です。This function works exactly the same as $(prop) previously specified, except when used in JSON templates (for example, Apple templates). この場合、この関数が “{‘,’}” で囲まれておらず (たとえば、‘myJsonProperty’ : ‘#(name)’ など)、Javascript 形式の数字として評価される場合、たとえば正規表現の (0|([1-9][0-9]*))(.[0-9]+)?((e|E)(+|-)?[0-9]+)? は、出力 JSON が数字です。In this case, if this function is not surrounded by “{‘,’}” (for example, ‘myJsonProperty’ : ‘#(name)’), and it evaluates to a number in Javascript format, for example, regexp: (0|([1-9][0-9]*))(.[0-9]+)?((e|E)(+|-)?[0-9]+)?, then the output JSON is a number.

たとえば、'badge: '#(name)' は ('40' ではなく) 'badge' : 40 になります。For example, ‘badge: ‘#(name)’ becomes ‘badge’ : 40 (and not ‘40‘).
‘text’ または “text”‘text’ or “text” リテラルです。A literal. リテラルは、一重引用符または二重引用符で囲んだ任意のテキストを保持します。Literals contain arbitrary text enclosed in single or double quotes.
expr1 + expr2expr1 + expr2 2 つの式を結合して 1 つの文字列にする連結演算子です。The concatenation operator joining two expressions into a single string.

上記のどの形式でも使用できます。The expressions can be any of the preceding forms.

連結を使用している場合は、式全体を {} で囲む必要があります。When using concatenation, the entire expression must be surrounded with {}. たとえば、「 {$(prop) + ‘ - ’ + $(prop2)} 」のように入力します。For example, {$(prop) + ‘ - ’ + $(prop2)}.

たとえば、次のテンプレートは有効な XML テンプレートではありません。For example, the following template is not a valid XML template:

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

先に説明したように、連結を使用している場合は、式を中かっこで囲む必要があります。As explained earlier, when using concatenation, expressions must be wrapped in curly brackets. 次に例を示します。For example:

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

次のステップNext steps

Notification Hubs について学習するLearn about Azure Notification Hubs