Share via


Mallar

Mallar gör det möjligt för ett klientprogram att ange det exakta formatet för de meddelanden som det vill ta emot. Med hjälp av mallar kan en app få flera olika fördelar, bland annat följande:

  • En plattformsoberoende serverdel.

  • Anpassade meddelanden.

  • Oberoende av klientversion.

  • Enkel lokalisering.

Det här avsnittet innehåller två djupgående exempel på hur du använder mallar för att skicka plattformsoberoende meddelanden som riktar sig till alla dina enheter på olika plattformar och för att anpassa sändningsmeddelanden till varje enhet.

Använda mallar på flera plattformar

Standardsättet för att skicka push-meddelanden är att för varje meddelande som ska skickas skickas en specifik nyttolast till plattformsaviseringstjänster (WNS, APNS). Om du till exempel vill skicka en avisering till APNS är nyttolasten ett Json-objekt i följande formulär:

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

Om du vill skicka ett liknande popup-meddelande i ett Windows Store-program är nyttolasten följande:

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

Du kan skapa liknande nyttolaster för MPNS-plattformar (Windows Phone) och GCM (Android).

Det här kravet tvingar appens serverdel att producera olika nyttolaster för varje plattform och gör effektivt serverdelen ansvarig för en del av appens presentationslager. Vissa problem omfattar lokalisering och grafiska layouter (särskilt för Windows Store-appar som innehåller meddelanden för olika typer av paneler).

Med mallfunktionen Notification Hubs kan en klientapp skapa särskilda registreringar, som kallas mallregistreringar, som förutom uppsättningen taggar inkluderar en mall. I föregående nyttolastexempel är den enda plattformsoberoende informationen det faktiska aviseringsmeddelandet (Hello!). En mall är en uppsättning instruktioner för Notification Hub om hur du formaterar ett plattformsoberoende meddelande för registrering av den specifika klientappen. I föregående exempel är plattformsoberoende meddelande en enskild egenskap: message = Hello!.

Följande bild illustrerar ovanstående process:

Templates

Mallen för en iOS klientappregistrering är följande:

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

Den analoga mallen för en Windows Store-klientapp är:

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

Observera att det faktiska meddelandet ersätts med uttrycket $(message). Det här uttrycket instruerar Notification Hub att när det skickar ett meddelande till den här registreringen skapa ett meddelande som följer den här mallen.

Klientprogram kan skapa flera registreringar för att kunna använda flera mallar. till exempel en mall för aviseringsmeddelanden och en mall för paneluppdateringar. Klientprogram kan också blanda interna registreringar (registreringar utan mall) och mallregistreringar.

Anteckning

Notification Hub skickar ett meddelande för varje registrering utan att överväga om de tillhör samma klientapp. Det här beteendet kan användas för att översätta plattformsoberoende meddelanden till fler meddelanden. Till exempel kan samma plattformsoberoende meddelande till meddelandehubben sömlöst översättas i en popup-avisering och en paneluppdatering, utan att serverdelen behöver vara medveten om det. Observera att vissa plattformar (till exempel iOS) kan minimera flera meddelanden till samma enhet om de skickas på kort tid.

Använda mallar för anpassning

En annan fördel med att använda mallar är möjligheten att använda Notification Hubs för att utföra personanpassning per registrering av meddelanden. Tänk dig till exempel en väderapp som visar en panel med väderförhållandena på en viss plats. En användare kan välja mellan graderna Celsius eller Fahrenheit och en prognos på en eller fem dagar. Med hjälp av mallar kan varje klientappsinstallation registrera sig för det format som krävs (1 dag Celsius, 1 dag Fahrenheit, 5 dagar Celsius, 5 dagar Fahrenheit) och låta serverdelen skicka ett enda meddelande som innehåller all information som krävs för att fylla dessa mallar (till exempel en femdagarsprognos med Celsius- och Fahrenheit-grader).

Mallen för endagsprognosen med Celsiustemperaturer är följande:

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

Meddelandet som skickas till Notification Hub innehåller följande egenskaper:

  • Day1_image

  • Day1_tempC

  • Day1_tempF

  • Day2_image

  • Day2_tempC

Med det här mönstret skickar serverdelen bara ett enda meddelande utan att behöva lagra specifika anpassningsalternativ för appanvändarna. Följande bild illustrerar det här scenariot:

Templates

Registrera dig för mallar

Mer information om hur du registrerar dig för mallar finns i Registreringshantering.

Malluttrycksspråk

Mallar får inte innehålla strängar. De är begränsade till XML- eller JSON-dokument. Du kan också bara placera uttryck på vissa platser. till exempel nodattribut eller värden för XML, strängegenskapsvärden för JSON.

Följande är till exempel inte en giltig XML-mall:

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

Som förklaras i följande avsnitt måste uttryck omslutas inom klammerparenteser när du använder sammanlänkning. Exempel:

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

Den analoga koden i JSON visas på följande sätt:

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

I följande tabell visas det språk som tillåts i mallar:

Uttryck Beskrivning

$(prop)

Referens till en händelseegenskap med det angivna namnet. Egenskapsnamn är inte skiftlägeskänsliga. Det här uttrycket omvandlas till egenskapens textvärde eller till en tom sträng om egenskapen inte finns.

$(prop, n)

Som ovan, men texten klipps uttryckligen med n tecken, till exempel $(title, 20) klipper innehållet i egenskapen title med 20 tecken.

.(prop, n)

Som ovan, men texten är suffixet med tre punkter när den klipps. Den totala storleken på den klippta strängen och suffixet överskrider inte n tecken. .(title, 20) med indataegenskapen "Det här är rubrikraden" resulterar i Detta är rubriken.....

%(prop)

$(name) Liknar förutom att utdata är URI-kodade.

#(prop)

Används i JSON-mallar (till exempel för iOS och Android mallar).

Den här funktionen fungerar exakt på samma sätt som $(prop) tidigare angivna, förutom när den används i JSON-mallar (till exempel Apple-mallar). I det här fallet, om den här funktionen inte omges av "{','}" (till exempel ‘myJsonProperty’ : ‘#(name)’), och den utvärderas till ett tal i Javascript-format, till exempel , regexp: (0|([1-9][0-9]*))(\.[0-9]+)?((e|E)(+|-)?[0-9]+)?är utdata-JSON ett tal.

Blir till exempel ‘badge : ‘#(name)’‘badge’ : 40 (och inte ‘40‘).

‘text’ or “text”

En literal. Literaler innehåller godtycklig text omgiven av enkla eller dubbla citattecken.

expr1 + expr2

Sammanfogningsoperatorn kopplar ihop två uttryck till en enda sträng.

Uttrycken kan vara något av föregående formulär.

När du använder sammanfogning måste hela uttrycket omges av {}. Till exempel {$(prop) + ‘ - ’ + $(prop2)}.