Шаблоны центров уведомлений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

В этом разделе содержатся два подробных примера использования шаблонов для отправки независимых от платформы уведомлений, предназначенных для всех устройств на разных платформах, а также для настройки широковещательных уведомлений на каждое устройство.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 notifications to each device.

Использование шаблонов для разных платформUsing templates cross-platform

Стандартный способ отправки push-уведомлений заключается в отправке полезных данных в службу уведомлений платформы (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).

Шаблон центра уведомлений позволяет клиентскому приложению создавать специальные регистрации (называются шаблонными регистрациями), которые содержат не только набор тегов, но и шаблон.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. Шаблон "центры уведомлений" позволяет клиентскому приложению связывать устройства с шаблонами независимо от того, работаете ли вы с установками (предпочтительно) или регистрацией.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!.In the preceding example, the platform-independent message is a single property: message = Hello!.

Процесс показан на следующем рисунке.The following figure 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 inserts the common value.

Если вы работаете с моделью установки, ключ "Templates" для установки содержит JSON нескольких шаблонов.If you are working with the installation model, the installation "templates" key holds a JSON of multiple templates. При работе с моделью регистрации клиентское приложение может создать несколько регистраций, чтобы использовать несколько шаблонов. Например, шаблон для сообщений предупреждений и шаблон для обновлений плиток.If you are working with the 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.

Центр уведомлений отправляет одно уведомление для каждого шаблона, не учитывая, принадлежат ли они одному клиентскому приложению.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 within a short period of time.

Использование шаблонов для персонализацииUsing templates for personalization

Еще одним преимуществом использования шаблонов является возможность использования центров уведомлений для персонализации уведомлений по отдельным регистрациям.Another advantage to using templates is the ability to use Notification Hubs to perform per-registration personalization of notifications. Например, рассмотрим приложение Weather, которое отображает плитку с условиями погоды в определенном месте.For example, consider a weather app that displays a tile with the weather conditions in a specific location. Пользователь может выбрать между отображением градусов Цельсия или Фаренгейта и прогноз на один или на пять дней.A user can choose between Celsius or Fahrenheit degrees, and a single or five-day forecast. С помощью шаблонов каждая установка клиентского приложения может зарегистрировать необходимый для себя формат (1 день и шкала Цельсия, 1 день и шкала Фаренгейта, 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).

Шаблон для прогноза погоды на один день и шкалой Цельсия выглядит следующим образом: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:

day1_imageday1_image day2_imageday2_image day3_imageday3_image day4_imageday4_image day5_imageday5_image
day1_tempCday1_tempC day2_tempCday2_tempC day3_tempCday3_tempC day4_tempCday4_tempC day5_tempCday5_tempC
day1_tempFday1_tempF day2_tempFday2_tempF day3_tempFday3_tempF day4_tempFday4_tempF day5_tempFday5_tempF

С помощью этого шаблона серверная часть отправляет только одно сообщение без необходимости хранить персональные параметры для пользователей приложения.By using this pattern, the backend only sends a single message without having to store specific personalization options for the app users. Этот сценарий показан на следующей схеме:The following figure illustrates this scenario:

Схема, показывающая, как серверная часть отправляет только одно сообщение на каждую платформу.

Регистрация шаблонов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 specific 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) То же, что выше, но к тексту добавляются три точки, поскольку он является сокращенным.As above, but the text is suffixed with three dots as it is clipped. Общий размер обрезанной строки и суффикс не должен превышать n символов. (Title, 20) с входным свойством "это строка заголовка" результаты в этом виде ...The total size of the clipped string and the suffix does not exceed n characters.(title, 20) with an input property of “This is the title line” results in This is the title...
%(prop)%(prop) Аналогично $(name), за исключением того, что выходные данные имеют формат URI.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). В этом случае, если эта функция не окружена "{", "}" (например, "Мижсонпроперти": "# (Name)"), она вычисляется как число в формате JavaScript, например "RegExp" (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.

Например, "Эмблема:" # (Name) "превращается в" эмблему ": 40 (а не" 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 Оператор объединения, объединяющий два выражения в одну строку.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

Дополнительные сведения о центрах уведомлений AzureLearn about Azure Notification Hubs