Notification Hubs-sjablonen
Met sjablonen kan een clienttoepassing de exacte indeling opgeven van de meldingen die ze willen ontvangen. Met behulp van sjablonen kan een app verschillende voordelen opleveren, waaronder de volgende:
- Een platform-agnostische back-end
- Persoonlijke meldingen
- Onafhankelijkheid van clientversies
- Eenvoudige lokalisatie
Deze sectie bevat twee uitgebreide voorbeelden van het gebruik van sjablonen om platformonafhankelijke meldingen te verzenden die zijn gericht op al uw apparaten op verschillende platforms en om broadcastmeldingen naar elk apparaat aan te passen.
Sjablonen op meerdere platforms gebruiken
De standaardmethode voor het verzenden van pushmeldingen is door voor elke melding die moet worden verzonden, een specifieke nettolading te verzenden naar Platform Notification Services (WNS, APNS). Als u bijvoorbeeld een waarschuwing naar APNS wilt verzenden, is de nettolading een JSON-object van de volgende vorm:
{"aps": {"alert" : "Hello!" }}
Als u een vergelijkbaar pop-upbericht wilt verzenden in een Windows Store-toepassing, ziet de XML-nettolading er als volgt uit:
<toast>
<visual>
<binding template=\"ToastText01\">
<text id=\"1\">Hello!</text>
</binding>
</visual>
</toast>
U kunt vergelijkbare nettoladingen maken voor MPNS- (Windows Phone) en FCM-platforms (Android).
Deze vereiste dwingt de app-back-end om verschillende nettoladingen voor elk platform te produceren en maakt de back-end effectief verantwoordelijk voor een deel van de presentatielaag van de app. Enkele problemen zijn lokalisatie en grafische indelingen (met name voor Windows Store-apps die meldingen voor verschillende soorten tegels bevatten).
Met de sjabloonfunctie Notification Hubs kan een client-app speciale registraties maken, ook wel sjabloonregistraties genoemd, die naast de set tags ook een sjabloon bevatten. Met de sjabloonfunctie Notification Hubs kan een client-app apparaten koppelen aan sjablonen, ongeacht of u werkt met installaties (voorkeur) of registraties. Gezien de voorgaande voorbeelden van nettoladingen is de enige platformonafhankelijke informatie het werkelijke waarschuwingsbericht (Hallo!). Een sjabloon is een set instructies voor de Notification Hub voor het opmaken van een platformonafhankelijk bericht voor de registratie van die specifieke client-app. In het voorgaande voorbeeld is het platformonafhankelijke bericht één eigenschap: message = Hello!
.
In de volgende afbeelding ziet u het proces:
De sjabloon voor de registratie van de iOS-client-app is als volgt:
{"aps": {"alert": "$(message)"}}
De bijbehorende sjabloon voor de Windows Store-client-app is:
<toast>
<visual>
<binding template=\"ToastText01\">
<text id=\"1\">$(message)</text>
</binding>
</visual>
</toast>
U ziet dat het werkelijke bericht wordt vervangen door de expressie $(message)
. Deze expressie instrueert de Notification Hub, wanneer er een bericht naar deze specifieke registratie wordt verzonden, om een bericht te maken dat erop volgt en de algemene waarde in te voegen.
Als u met het installatiemodel werkt, bevat de installatiesleutel 'sjablonen' een JSON van meerdere sjablonen. Als u met het registratiemodel werkt, kan de clienttoepassing meerdere registraties maken om meerdere sjablonen te kunnen gebruiken; bijvoorbeeld een sjabloon voor waarschuwingsberichten en een sjabloon voor tegelupdates. Clienttoepassingen kunnen ook systeemeigen registraties (registraties zonder sjabloon) en sjabloonregistraties combineren.
De notification hub verzendt één melding voor elke sjabloon zonder te overwegen of deze tot dezelfde client-app behoren. Dit gedrag kan worden gebruikt om platformonafhankelijke meldingen om te zetten in meer meldingen. Hetzelfde platformonafhankelijke bericht naar de Notification Hub kan bijvoorbeeld naadloos worden omgezet in een pop-upwaarschuwing en een tegelupdate, zonder dat de back-end hiervan op de hoogte hoeft te zijn. Sommige platforms (bijvoorbeeld iOS) kunnen meerdere meldingen naar hetzelfde apparaat samenvouwen als ze binnen een korte periode worden verzonden.
Sjablonen gebruiken voor persoonlijke instellingen
Een ander voordeel van het gebruik van sjablonen is de mogelijkheid om Notification Hubs te gebruiken voor het aanpassen van meldingen per registratie. Denk bijvoorbeeld aan een weer-app die een tegel weergeeft met de weersomstandigheden op een specifieke locatie. Een gebruiker kan kiezen tussen Graden Celsius of Fahrenheit en een prognose van één of vijf dagen. Met behulp van sjablonen kan elke installatie van client-apps zich registreren voor de vereiste indeling (1 dag Celsius, 1 dag Fahrenheit, 5 dagen Celsius, 5 dagen Fahrenheit) en de back-end één bericht laten verzenden met alle informatie die nodig is om deze sjablonen te vullen (bijvoorbeeld een prognose van vijf dagen met Graden Celsius en Fahrenheit).
De sjabloon voor de eendaagse prognose met celsiustemperaturen is als volgt:
<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>
Het bericht dat naar de Notification Hub wordt verzonden, bevat alle volgende eigenschappen:
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 |
Door dit patroon te gebruiken, verzendt de back-end slechts één bericht zonder dat specifieke persoonlijke instellingen voor de app-gebruikers moeten worden opgeslagen. In de volgende afbeelding ziet u dit scenario:
Sjablonen registreren
Zie Registratiebeheer als u zich wilt registreren met sjablonen met behulp van het installatiemodel (voorkeur) of het registratiemodel.
Taal voor sjabloonexpressie
Sjablonen zijn beperkt tot XML- of JSON-documentindelingen. U kunt expressies ook alleen op specifieke plaatsen plaatsen; bijvoorbeeld knooppuntkenmerken of waarden voor XML, tekenreekseigenschapswaarden voor JSON.
In de volgende tabel ziet u de taal die is toegestaan in sjablonen:
Expressie | Beschrijving |
---|---|
$(prop) | Verwijzing naar een gebeurteniseigenschap met de opgegeven naam. Eigenschapsnamen zijn niet hoofdlettergevoelig. Deze expressie wordt omgezet in de tekstwaarde van de eigenschap of in een lege tekenreeks als de eigenschap niet aanwezig is. |
$(prop, n) | Zoals hierboven, maar de tekst wordt expliciet geknipt op n tekens, bijvoorbeeld $(title, 20) knipt de inhoud van de titeleigenschap vast op 20 tekens. |
. (prop, n) | Zoals hierboven, maar de tekst is bij het knippen met drie puntjes achtervoegsel. De totale grootte van de geknipte tekenreeks en het achtervoegsel mag niet groter zijn dan n tekens. (titel, 20) met de invoereigenschap 'Dit is de titelregel' resulteert in Dit is de titel... |
%(prop) | Vergelijkbaar met $(name), behalve dat de uitvoer URI-gecodeerd is. |
#(prop) | Wordt gebruikt in JSON-sjablonen (bijvoorbeeld voor iOS- en Android-sjablonen). Deze functie werkt precies hetzelfde als '$(prop)' die eerder is opgegeven, behalve wanneer deze wordt gebruikt in JSON-sjablonen (bijvoorbeeld Apple-sjablonen). Als deze functie in dit geval niet is omgeven door {','}' (bijvoorbeeld 'myJsonProperty' : '#(name)'), en deze resulteert in een getal in JavaScript-indeling, bijvoorbeeld regexp: (0|( [1-9] [0-9]*))(.[ 0-9]+)? (e| E)(+|-)? [0-9]+)?, is de uitvoer-JSON een getal. 'badge: '#(naam)' wordt bijvoorbeeld 'badge' : 40 (en niet '40'). |
'text' of 'text' | Een letterlijke. Letterlijke waarden bevatten willekeurige tekst tussen enkele of dubbele aanhalingstekens. |
expr1 + expr2 | De samenvoegingsoperator die twee expressies samenvoegt in één tekenreeks. |
De expressies kunnen een van de voorgaande formulieren zijn.
Wanneer u samenvoeging gebruikt, moet de hele expressie worden omgeven door {}
. Bijvoorbeeld {$(prop) + ‘ - ’ + $(prop2)}
.
De volgende sjabloon is bijvoorbeeld geen geldige XML-sjabloon:
<tile>
<visual>
<binding $(property)>
<text id="1">Seattle, WA</text>
</binding>
</visual>
</tile>
Zoals eerder uitgelegd, moeten expressies bij het gebruik van samenvoeging tussen accolades worden geplaatst. Bijvoorbeeld:
<tile>
<visual>
<binding template="ToastText01">
<text id="1">{'Hi, ' + $(name)}</text>
</binding>
</visual>
</tile>