Поделиться через


Шаблоны Центров уведомлений

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

  • Кросс-платформенный серверный компонент.
  • Персонализированные уведомления
  • Независимость от версии клиента
  • Простая локализация

В этом разделе приведены два подробных примера использования шаблонов для отправки уведомлений, не зависящих от платформы, предназначенных для всех устройств на разных платформах, а также персонализации широковещательных уведомлений на каждом устройстве.

Использование кроссплатформенных шаблонов

Стандартным способом отправки push-уведомлений является отправка определенных полезных данных для каждого отправляемого уведомления в службы уведомлений платформы (WNS, APNS). Например, чтобы отправить оповещение в APNS, полезная нагрузка — это объект JSON следующей формы:

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

Чтобы отправить аналогичное toast сообщение в приложении Магазина Windows, содержимое XML выглядит следующим образом:

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

Вы можете создавать аналогичные полезные нагрузки для MPNS (Windows Phone) и FCM (Android).

Это требование заставляет серверную часть приложения создавать различные наборы данных для каждой платформы, и эффективно делает серверную часть ответственной за часть слоя презентации приложения. Некоторые проблемы включают локализацию и графические макеты (особенно для приложений Магазина Windows, которые включают уведомления для различных типов плиток).

Функция шаблона Центров уведомлений позволяет клиентскому приложению создавать специальные регистрации, называемые регистрациями шаблонов, которые включают в себя не только набор тегов, но и сам шаблон. Функция шаблонов в Центрах уведомлений позволяет клиентскому приложению связывать устройства с шаблонами, будь то работа с установками (предпочтительно) или с регистрациями. Учитывая предыдущие примеры полезных данных, единственная информация, независимая от платформы, является фактическим сообщением об оповещении (Hello!). Шаблон — это набор инструкций для концентратора уведомлений о том, как отформатировать независимое от платформы сообщение для регистрации этого конкретного клиентского приложения. В предыдущем примере сообщение, независимое от платформы, является одним свойством: message = Hello!

На следующем рисунке показан процесс:

Схема, показывающая процесс кроссплатформенного использования шаблонов

Шаблон для регистрации клиентского приложения iOS выглядит следующим образом:

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

Соответствующий шаблон для клиентского приложения Магазина Windows:

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

Обратите внимание, что фактическое сообщение заменено выражением $(message). В этом выражении дается указание концентратору уведомлений, всякий раз, когда он отправляет сообщение на данную регистрацию, создавать сообщение, соответствующее этому, и включающее общее значение.

Если вы работаете с моделью установки, ключ установки "шаблоны" содержит JSON нескольких шаблонов. Если вы работаете с моделью регистрации, клиентское приложение может создать несколько регистраций, чтобы использовать несколько шаблонов; Например, шаблон для сообщений оповещений и шаблона для обновлений плиток. Клиентские приложения также могут смешивать собственные регистрации (регистрации без шаблона) и регистрации шаблонов.

Центр уведомлений отправляет одно уведомление для каждого шаблона, не учитывая, принадлежат ли они одному клиентскому приложению. Это поведение можно использовать для перевода уведомлений, независимых от платформы, в дополнительные уведомления. Например, одно и то же независимое от платформы сообщение концентратора уведомлений можно легко перевести в всплывающее оповещение и обновление плитки, не требуя, чтобы серверная часть знала об этом. Некоторые платформы (например, iOS) могут объединить несколько уведомлений для одного устройства, если они отправлены в течение короткого времени.

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

Еще одним преимуществом использования шаблонов является возможность использовать Центр уведомлений для персонализации уведомлений в зависимости от регистрации. Например, рассмотрим приложение погоды, отображающее плитку с погодными условиями в определенном расположении. Пользователь может выбрать между градусами Цельсия или Фаренхейт, а также одним или пятидневным прогнозом. Используя шаблоны, каждое клиентское приложение при установке может зарегистрировать необходимый формат (1-дневный по Цельсию, 1-дневный по Фаренгейту, 5-дневный по Цельсию, 5-дневный по Фаренгейту), а серверная часть отправляет одно сообщение, содержащее всю необходимую информацию для заполнения этих шаблонов (например, пятидневный прогноз с градусами Цельсия и Фаренгейта).

Шаблон для однодневного прогноза с температурой по Цельсию выглядит следующим образом:

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

Сообщение, отправленное в центр уведомлений, содержит все следующие свойства:

day1_image day2_image день3_изображение day4_image day5_image
day1_tempC day2_tempC day3_tempC день4_температураC day5_tempC
Температура в первый день (F) day2_tempF день3_темпФ день4_темпF день5_темпФ

Используя этот шаблон, серверная часть отправляет только одно сообщение без необходимости хранить определенные параметры персонализации для пользователей приложения. На следующем рисунке показан этот сценарий:

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

Регистрация шаблонов

Сведения о регистрации с помощью модели установки (предпочтительной) или модели регистрации см. в разделе "Управление регистрацией".

Язык выражений шаблона

Шаблоны ограничены форматами документов XML или JSON. Кроме того, выражения можно размещать только в определенных местах; например, атрибуты узла или значения xml, строковые значения свойств для JSON.

В следующей таблице показан язык, разрешенный в шаблонах:

Выражение Описание
$(prop) Ссылка на свойство события с заданным именем. Имена свойств не чувствительны к регистру. Это выражение преобразуется в текстовое значение свойства или в пустую строку, если свойство отсутствует.
$(prop, n) Как описано выше, но текст явно обрезается на n символов, например $(title, 20) обрезает содержимое свойства заголовка на 20 символов.
. (prop, n) Как описано выше, но текст суффиксирован тремя точками, как он обрезается. Общий размер обрезанной строки и суффикс не превышает n символов. (title, 20) с входным свойством " Это строка заголовка" приводит к тому, что это название...
%(prop) Аналогично $(name), за исключением того, что выходные данные кодируются в кодировке URI.
#(prop) Используется в шаблонах JSON (например, для шаблонов iOS и Android).

Эта функция работает точно так же, как и "$(prop)", за исключением случаев использования в шаблонах JSON (например, шаблонов Apple). В этом случае, если эта функция не окружена "{","}" (например, myJsonProperty : "#(name)" и вычисляет число в формате JavaScript, например regexp: (0|( [1-9][0-9]*))(.[ 0-9]+)? ((e|E)(+|-)? [0-9]+)?, то выходные данные JSON — это число.

Например, "бейдж: '#(name)'" становится "бейджом: 40" (а не "40").
«текст» или «текст» Литерал. Литералы содержат текст, который может быть произвольным, заключенный в одинарные или двойные кавычки.
expr1 + expr2 Оператор объединения объединяет два выражения в одну строку.

Выражения могут быть любым из предыдущих форм.

При использовании конкатенации всё выражение должно быть заключено в {}. Например: {$(prop) + ‘ - ’ + $(prop2)}.

Например, следующий шаблон не является допустимым 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>

Дальнейшие действия

Сведения о Центрах уведомлений Azure