Dela via


Notification Hubs-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 dra nytta av flera olika fördelar, bland annat följande:

  • En plattformsoberoende backend-system
  • 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å plattformar och för att anpassa sändningsmeddelanden till varje enhet.

Använda mallar plattformöverskridande

Standardsättet för att skicka push-meddelanden är att skicka, för varje meddelande som ska skickas, en specifik nyttolast till plattformsmeddelandetjä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 toast-meddelande i en Windows Store-app är XML-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 FCM (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, så kallade mallregistreringar, som förutom uppsättningen taggar innehåller en mall. Med mallfunktionen Notification Hubs kan en klientapp associera enheter med mallar oavsett om du arbetar med installationer (rekommenderas) eller registreringar. Med hjälp av föregående nyttolastexempel är den enda plattformsoberoende informationen det faktiska aviseringsmeddelandet (Hello!). En mall är en uppsättning instruktioner för meddelandehubben om hur du formaterar ett plattformsoberoende meddelande för registrering av den specifika klientappen. I föregående exempel är det plattformsoberoende meddelandet en enda egenskap: message = Hello!.

Följande bild illustrerar processen:

Diagram som visar processen för att använda mallar plattformsoberoende

Mallen för registrering av iOS-klientappen är följande:

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

Motsvarande mall för Windows Store-klientappen ä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 meddelandehubben, när den skickar ett meddelande till den här registreringen, att skapa ett meddelande som följer det och infogar det gemensamma värdet.

Om du arbetar med installationsmodellen innehåller installationsnyckeln "mallar" en JSON med flera mallar. Om du arbetar med registreringsmodellen kan klientprogrammet 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.

Meddelandehubben skickar ett meddelande för varje mall 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. Vissa plattformar (till exempel iOS) kan komprimera flera meddelanden till samma enhet om de skickas inom en kort tidsperiod.

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 av meddelanden per registrering. Tänk dig till exempel en väderapp som visar en panel med väderförhållandena på en specifik plats. En användare kan välja mellan Celsius- eller Fahrenheit-grader och en prognos på en eller fem dagar. Med hjälp av mallar kan varje klientappinstallation 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 meddelandehubben innehåller följande egenskaper:

day1_image dag2_bild dag3_bild dag4_bild day5_image
day1_tempC day2_tempC day3_tempC day4_tempC dag5_tempC
day1_tempF day2_tempF day3_tempF day4_tempF dag5_tempF

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:

Diagram som visar hur serverdelen bara skickar ett enda meddelande till varje plattform.

Så här registrerar du mallar

Information om hur du registrerar dig med mallar med installationsmodellen (rekommenderas) eller registreringsmodellen finns i Registreringshantering.

Malluttrycksspråk

Mallar är begränsade till XML- eller JSON-dokumentformat. Du kan också bara placera uttryck på specifika platser. till exempel nodattribut eller värden för XML, strängegenskapsvärden för JSON.

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 resulterar i egenskapens textvärde eller blir det 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 rubrikegenskapen med 20 tecken.
. (prop, n) Som ovan, men texten följs av tre punkter eftersom den är avkortad. Den totala storleken på den klippta strängen och suffixet överskrider inte n tecken. (rubrik, 20) med indataegenskapen "Det här är rubrikraden" resulterar i Att det här är rubriken...
%(prop) Liknar $(name) 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 samma som "$(prop)" som tidigare angetts, 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 är omgiven 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.

Till exempel, 'badge: '#(name)' blir 'badge': 40 (och inte '40').
'text' eller "text" En bokstavlig. Literaler innehåller godtycklig text omgiven av enkla eller dubbla citattecken.
expr1 + expr2 Sammanfogningsoperatorn ansluter två uttryck till en enda sträng.

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

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

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

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

Som vi förklarade tidigare måste uttryck omslutas inom klammerparenteser när du använder sammanlänkning. Till exempel:

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

Nästa steg

Läs mer om Azure Notification Hubs