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 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 plattformsoberoende
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 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, som kallas mallregistreringar, som förutom uppsättningen taggar inkluderar en mall. Med mallfunktionen Notification Hubs kan en klientapp associera enheter med mallar oavsett om du arbetar med installationer (rekommenderas) eller registreringar. I 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:
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 att när den skickar ett meddelande till den här registreringen skapa ett meddelande som följer den och infogar det gemensamma värdet.
Om du arbetar med installationsmodellen innehåller installationsnyckeln "templates" 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 minimera 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 per registrering av meddelanden. 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 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 meddelandehubben innehåller följande egenskaper:
day1_image | day2_image | day3_image | day4_image | day5_image |
---|---|---|---|---|
day1_tempC | day2_tempC | day3_tempC | day4_tempC | day5_tempC |
day1_tempF | day2_tempF | day3_tempF | day4_tempF | day5_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:
Registrera 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 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. (rubrik, 20) med indataegenskapen "Det här är rubrikraden" resulterar i Detta ä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 på samma sätt som "$(prop)" som angavs tidigare, 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. Till exempel blir "badge: '#(name)' 'badge' : 40 (och inte '40'). |
'text' eller "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)}
.
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 sammanfogning. Exempel:
<tile>
<visual>
<binding template="ToastText01">
<text id="1">{'Hi, ' + $(name)}</text>
</binding>
</visual>
</tile>