Zelfstudie: Gelokaliseerde pushmeldingen verzenden naar Windows-apps met Azure Notification Hubs
Overzicht
Notitie
Microsoft Push Notification Service (MPNS) is afgeschaft en wordt niet meer ondersteund.
Deze zelfstudie laat zien hoe u gelokaliseerde pushmeldingen naar mobiele apparaten kunt versturen die zijn geregistreerd bij de Notification Hubs-service. U kunt in de zelfstudie toepassingen bijwerken die zijn gemaakt de Zelfstudie: Meldingen verzenden naar specifieke apparaten (Universeel Windows-platform) ter ondersteuning van de volgende scenario's:
- In de Windows Store-app kunnen clientapparaten een taal opgeven en zich abonneren op verschillende nieuwscategorieën.
- De back-endapp verstuurt meldingen met behulp van de tag- en sjabloon-functies van Azure Notification Hubs.
Wanneer u de zelfstudie hebt voltooid, kunt u in de mobiele toepassing categorieën kiezen waarvoor u zich wilt registreren, evenals de taal waarin u meldingen voor die nieuwscategorieën wilt ontvangen. De back-endtoepassing verstuurt meldingen die per taal en apparaat zijn gelokaliseerd.
In deze zelfstudie leert u het volgende:
- Windows-app bijwerken om landinstellingen te ondersteunen
- Back-endapp bijwerken om gelokaliseerde meldingen te verzenden
- De app testen
Vereisten
U moet de Zelfstudie: Meldingen verzenden naar specifieke apparaten (Universeel Windows-platform).
In de zelfstudie Meldingen verzenden naar UWP-apps (Universal Windows Platform) met behulp van Azure Notification Hubs bouwt u een app die gebruikmaakt van tags om zich te abonneren op meldingen voor verschillende nieuwscategorieën . In deze zelfstudie gebruikt u de sjabloon-functie van Notification Hubs om eenvoudig gelokaliseerde meldingen van belangrijk nieuws te bezorgen.
In deze context zijn sjablonen een manier om de indeling op te geven waarin een specifiek apparaat een melding moet ontvangen. De sjabloon bepaalt de exacte indeling van de payload door te verwijzen naar eigenschappen die deel uitmaken van het bericht dat is verzonden door uw back-endapp. In deze zelfstudie verzendt de back-endtoepassing een bericht met alle ondersteunde talen:
{
"News_English": "...",
"News_French": "...",
"News_Mandarin": "..."
}
De apparaten registreren zich bij een sjabloon die naar de juiste eigenschap verwijst. Een Windows Store-app die een pop-upbericht in het Engels wil ontvangen, registreert zich bijvoorbeeld voor de volgende sjabloon met alle bijbehorende tags:
<toast>
<visual>
<binding template=\"ToastText01\">
<text id=\"1\">$(News_English)</text>
</binding>
</visual>
</toast>
Zie Push Templates (Pushsjablonen) voor meer informatie over sjablonen.
Windows-app bijwerken om landinstellingen te ondersteunen
Open in Visual Studio de oplossing die u hebt gemaakt voor de Zelfstudie: Meldingen verzenden naar specifieke apparaten (Universeel Windows-platform).
Werk het bestand
MainPage.xaml
van de oplossing bij met een keuzelijst met invoervak voor landinstellingen:<Grid Margin="120, 58, 120, 80" Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" TextWrapping="Wrap" Text="Breaking News" FontSize="42" VerticalAlignment="Top"/> <ComboBox Name="Locale" HorizontalAlignment="Left" VerticalAlignment="Center" Width="200" Grid.Row="1" Grid.Column="0"> <x:String>English</x:String> <x:String>French</x:String> <x:String>Mandarin</x:String> </ComboBox> <ToggleSwitch Header="World" Name="WorldToggle" Grid.Row="2" Grid.Column="0"/> <ToggleSwitch Header="Politics" Name="PoliticsToggle" Grid.Row="3" Grid.Column="0"/> <ToggleSwitch Header="Business" Name="BusinessToggle" Grid.Row="4" Grid.Column="0"/> <ToggleSwitch Header="Technology" Name="TechnologyToggle" Grid.Row="2" Grid.Column="1"/> <ToggleSwitch Header="Science" Name="ScienceToggle" Grid.Row="3" Grid.Column="1"/> <ToggleSwitch Header="Sports" Name="SportsToggle" Grid.Row="4" Grid.Column="1"/> <Button Content="Subscribe" HorizontalAlignment="Center" Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" Click="SubscribeButton_Click" /> </Grid>
Voeg in de
Notifications
klasse een landinstellingsparameter toe aan deStoreCategoriesAndSubscribe
methoden enSubscribeToCategories
.public async Task<Registration> StoreCategoriesAndSubscribe(string locale, IEnumerable<string> categories) { ApplicationData.Current.LocalSettings.Values["categories"] = string.Join(",", categories); ApplicationData.Current.LocalSettings.Values["locale"] = locale; return await SubscribeToCategories(locale, categories); } public async Task<Registration> SubscribeToCategories(string locale, IEnumerable<string> categories = null) { var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync(); if (categories == null) { categories = RetrieveCategories(); } // Using a template registration. This makes supporting notifications across other platforms much easier. // Using the localized tags based on locale selected. string templateBodyWNS = String.Format("<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(News_{0})</text></binding></visual></toast>", locale); return await hub.RegisterTemplateAsync(channel.Uri, templateBodyWNS, "localizedWNSTemplateExample", categories); }
Roep in plaats van methode
RegisterNativeAsync
methodeRegisterTemplateAsync
aan. U registreert een specifieke indeling voor de melding waarin de sjabloon afhankelijk is van de landinstelling. U geeft ook een naam op voor de sjabloon ('localizedWNSTemplateExample'), aangezien u misschien meer dan één sjabloon wilt registreren (bijvoorbeeld één voor pop-upmeldingen en één voor tegels). U moet ook een naam opgeven om sjablonen te kunnen bijwerken of verwijderen.Als op een apparaat meerdere sjablonen met dezelfde tag zijn geregistreerd, worden er meerdere meldingen verstuurd naar het apparaat (één voor elke sjabloon) als er een bericht binnenkomt dat gericht is op deze tag. Dit gedrag is handig wanneer hetzelfde logische bericht moet resulteren in meerdere visual meldingen (bijvoorbeeld een badge en een pop-up weergeven in een Windows Store-toepassing).
Voeg de volgende methode toe om de opgeslagen landinstelling op te halen:
public string RetrieveLocale() { var locale = (string) ApplicationData.Current.LocalSettings.Values["locale"]; return locale != null ? locale : "English"; }
Werk in het bestand
MainPage.xaml.cs
de knop-klikhandler bij voor het ophalen van de huidige waarde van de keuzelijst met invoervak voor landinstellingen en geef deze waarde door aan de aanroep van de klasseNotifications
:private async void SubscribeButton_Click(object sender, RoutedEventArgs e) { var locale = (string)Locale.SelectedItem; var categories = new HashSet<string>(); if (WorldToggle.IsOn) categories.Add("World"); if (PoliticsToggle.IsOn) categories.Add("Politics"); if (BusinessToggle.IsOn) categories.Add("Business"); if (TechnologyToggle.IsOn) categories.Add("Technology"); if (ScienceToggle.IsOn) categories.Add("Science"); if (SportsToggle.IsOn) categories.Add("Sports"); var result = await ((App)Application.Current).notifications.StoreCategoriesAndSubscribe(locale, categories); var dialog = new MessageDialog("Locale: " + locale + " Subscribed to: " + string.Join(",", categories) + " on registration Id: " + result.RegistrationId); dialog.Commands.Add(new UICommand("OK")); await dialog.ShowAsync(); }
Ten slotte werkt u in het bestand
App.xaml.cs
de methodeInitNotificationsAsync
bij om de landinstelling op te halen en gebruikt u deze bij het abonneren:private async void InitNotificationsAsync() { var result = await notifications.SubscribeToCategories(notifications.RetrieveLocale()); // Displays the registration ID so you know it was successful if (result.RegistrationId != null) { var dialog = new MessageDialog("Registration successful: " + result.RegistrationId); dialog.Commands.Add(new UICommand("OK")); await dialog.ShowAsync(); } }
De UWP-toepassing uitvoeren
Voer de Universal Windows Platform-toepassing uit. Wacht tot u het bericht ziet dat de registratie is gelukt.
Selecteer de categorieën en locale (landinstelling), en klik op Subscribe. De app zet de geselecteerde categorieën om in tags en vraagt bij Notification Hubs een nieuwe apparaatregistratie aan voor de geselecteerde tags.
U ziet een bevestigingsbericht over de abonnementen.
Console-app bijwerken om gelokaliseerde meldingen te verzenden
Wanneer u sjabloonmeldingen verstuurt, hoeft u alleen een set eigenschappen op te geven. In deze zelfstudie verstuurt de back-endtoepassing de set eigenschappen met de gelokaliseerde versie van het actuele nieuws, bijvoorbeeld:
{
"News_English": "World News in English!",
"News_French": "World News in French!",
"News_Mandarin": "World News in Mandarin!"
}
In deze sectie gaat u het consoletoepassingsproject in de oplossing bijwerken. Wijzig de methode SendTemplateNotificationAsync
in de console-app die u eerder hebt gemaakt met de volgende code:
Belangrijk
Geef in de code de naam en verbindingsreeks met volledige toegang op voor uw meldingshub.
private static async void SendTemplateNotificationAsync()
{
// Define the notification hub.
NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString(
"<connection string with full access>", "<hub name>");
// Sending the notification as a template notification. All template registrations that contain
// "messageParam" or "News_<local selected>" and the proper tags will receive the notifications.
// This includes APNS, FCM, WNS, and MPNS template registrations.
Dictionary<string, string> templateParams = new Dictionary<string, string>();
// Create an array of breaking news categories.
var categories = new string[] { "World", "Politics", "Business", "Technology", "Science", "Sports"};
var locales = new string[] { "English", "French", "Mandarin" };
foreach (var category in categories)
{
templateParams["messageParam"] = "Breaking " + category + " News!";
// Sending localized News for each tag too...
foreach( var locale in locales)
{
string key = "News_" + locale;
// Your real localized news content would go here.
templateParams[key] = "Breaking " + category + " News in " + locale + "!";
}
await hub.SendTemplateNotificationAsync(templateParams, category);
}
}
Met deze eenvoudige aanroep wordt het gelokaliseerde nieuwsbericht bezorgd op alle apparaten, ongeacht het platform. Dit kan doordat uw Notification Hub de juiste payload voor het platform samenstelt en verstuurt naar alle apparaten die zijn geabonneerd op een bepaalde tag.
Console-app uitvoeren om gelokaliseerde meldingen te verzenden
Voer de console-app uit om meldingen te verzenden voor elke categorie en in elke ondersteunde taal. Controleer of u alleen een melding krijgt voor de categorieën waarop u zich hebt geabonneerd en of het bericht overeenkomt met de landinstelling die u hebt geselecteerd.
Volgende stappen
In deze zelfstudie hebt u geleerd hoe u gelokaliseerde pushmeldingen kunt verzenden naar specifieke apparaten door een tag te koppelen aan hun registraties. Als u wilt weten hoe u pushmeldingen kunt verzenden naar specifieke gebruikers die mogelijk meer dan één apparaat gebruiken, gaat u verder met de volgende zelfstudie: