Modelos

Os modelos permitem que um aplicativo cliente especifique o formato exato das notificações que deseja receber. Ao usar modelos, um aplicativo pode reconhecer diversos benefícios diferentes, incluindo os seguintes:

  • Um back-end independente da plataforma.

  • Notificações personalizadas.

  • Independência da versão do cliente.

  • Localização fácil.

Esta seção fornece dois exemplos detalhados de como usar modelos para enviar notificações independentes de plataformas ao direcionar todos os dispositivos em plataformas e para personalizar a notificação de difusão para cada dispositivo.

Usando modelos multiplataforma

O modo padrão para enviar notificações por push é enviar, para cada notificação que será enviada, uma carga específica aos serviços de notificação de plataforma (WNS, APNS). Por exemplo, para enviar um alerta para APNS, a carga é um objeto JSON da seguinte forma:

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

Para enviar uma mensagem de sistema semelhante em um aplicativo da Windows Store, o conteúdo é o seguinte:

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

Você pode criar cargas similares para MPNS (Windows Phone) e para plataformas de GCM (Android).

Esse requisito força o back-end do aplicativo a produzir cargas diferentes para cada plataforma e torna o back-end responsável por parte da camada de apresentação do aplicativo. Algumas questões incluem a localização e layouts gráficos (especialmente para aplicativos da Windows Store que englobam notificações para vários tipos de blocos).

O recurso de modelo de Hubs de Notificação permite que um aplicativo cliente crie registros especiais, chamados registros modelos, que abrangem, além do conjunto de marcas, um modelo. Considerando os exemplos anteriores de carga, a única informação independente de plataforma é a mensagem de alerta real (Olá! ). Um modelo é um conjunto de instruções para o Hub de Notificação sobre como formatar uma mensagem independente de plataforma para o registro daquele aplicativo cliente específico. No exemplo anterior, a mensagem independente de plataforma é uma propriedade única: message = Olá!.

A figura a seguir ilustra o processo acima:

Templates

O modelo para um registro de aplicativo cliente iOS é o seguinte:

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

O modelo análogo para um aplicativo cliente da Windows Store é:

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

Observe que a mensagem real é substituída pela expressão $(message). Essa expressão instrui o Hub de Notificação, sempre que ele envia uma mensagem para esse registro específico, para criar uma mensagem que siga este modelo.

Os aplicativos cliente podem criar vários registros para usar vários modelos; por exemplo, um modelo para mensagens de alerta e um modelo para atualizações de bloco. Os aplicativos clientes também podem mesclar registros nativos (registros sem um modelo) e registros de modelo.

Observação

O Hub de Notificação envia uma notificação para cada registro sem considerar se eles pertencem ao mesmo aplicativo cliente. Esse comportamento pode ser usado para converter notificações independentes de plataforma em mais notificações. Por exemplo, a mesma mensagem independente de plataforma para o Hub de Notificação pode ser convertida em um alerta de notificação do sistema e uma atualização de bloco, sem a necessidade de back-end para estar ciente dele. Observe que algumas plataformas (por exemplo, iOS) podem recolher diversas notificações no mesmo dispositivo se elas forem enviadas em um curto período de tempo.

Usando modelos para personalização

Outra vantagem de usar modelos é a capacidade de usar os Hubs de Notificação para realizar a personalização por registro de notificações. Por exemplo, considere um aplicativo sobre clima que exibe um bloco com as condições climáticas em um local específico. Um usuário pode escolher entre graus Celsius ou Fahrenheit e uma previsão única ou de cinco dias. Ao usar modelos, cada instalação do aplicativo cliente pode registrar para o formato necessário (1 dia Celsius, 1 dia Fahrenheit, 5 dias Celsius, 5 dias Fahrenheit) e o back-end pode enviar uma única mensagem que contenha todas as informações necessárias para preencher esses modelos (por exemplo, uma previsão de cinco dias com graus Celsius e Fahrenheit).

O modelo para a previsão de um dia com temperaturas em graus Celsius é como segue:

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

A mensagem enviada ao Hub de Notificação contém as seguintes propriedades:

  • Day1_image

  • Day1_tempC

  • Day1_tempF

  • Day2_image

  • Day2_tempC

Ao usar esse padrão, o back-end envia apenas uma única mensagem sem ter que armazenar opções de personalização específicas para os usuários do aplicativo. A figura a seguir ilustra esse cenário:

Templates

Como se registrar para modelos

Para obter mais informações sobre como se registrar para modelos, consulte Gerenciamento de Registro.

Linguagem de expressão de modelo

Os modelos não podem conter cadeias de caracteres. Eles são limitados a documentos XML ou JSON. Além disso, só é possível usar expressões em determinados locais. Por exemplo, os atributos de nó ou valores para XML, cadeia de valores de propriedade para JSON.

Por exemplo, o seguinte não é um modelo XML válido:

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

Conforme explicado na seção a seguir, ao usar a concatenação, as expressões devem ser encapsuladas em colchetes encaracolados. Por exemplo:

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

O código análogo em JSON aparece da seguinte maneira:

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

A tabela a seguir mostra a linguagem permitida nos modelos:

Expression Descrição

$(prop)

Referência para uma propriedade de evento com o nome fornecido. Os nomes de propriedade não diferenciam maiúsculas de minúsculas. Esta expressão é convertida para o valor de texto da propriedade ou em uma sequência de caracteres vazia se a propriedade não estiver presente.

$(prop, n)

Como acima, mas o texto é explicitamente recortado em n caracteres, por exemplo $(title, 20) , corta o conteúdo da propriedade de título em 20 caracteres.

.(prop, n)

Como consta acima, mas o texto é sufixado com três pontos quando é cortado. O tamanho total da cadeia de caracteres cortada e do sufixo não excede n caracteres. .(title, 20) com uma propriedade de entrada de "Esta é a linha de título" resulta em This is the title.....

%(prop)

Semelhante à $(name) exceção de que a saída é codificada por URI.

#(prop)

Usada em modelos JSON (por exemplo, para modelos iOS e Android).

Essa função funciona exatamente da mesma $(prop) especificada anteriormente, exceto quando usada em modelos JSON (por exemplo, modelos da Apple). Nesse caso, se essa função não estiver cercada por "{','}" (por exemplo, ‘myJsonProperty’ : ‘#(name)’)e ela for avaliada como um número no formato Javascript, por exemplo, regexp: (0|([1-9][0-9]*))(\.[0-9]+)?((e|E)(+|-)?[0-9]+)?o JSON de saída será um número.

Por exemplo, ‘badge : ‘#(name)’ torna-se ‘badge’ : 40 (e não ‘40‘).

‘text’ or “text”

Um literal. Literais contêm texto arbitrário entre aspas simples ou duplas.

expr1 + expr2

O operador de concatenação que une duas expressões em uma única cadeia de caracteres.

As expressões podem ter qualquer uma das formas anteriores.

Ao usar concatenação, toda a expressão deve estar entre {}. Por exemplo, {$(prop) + ‘ - ’ + $(prop2)}.