Självstudie: Skicka lokaliserade push-meddelanden till Windows-appar med Hjälp av Azure Notification Hubs
Översikt
Anteckning
Microsoft Push Notification Service (MPNS) har blivit inaktuell och stöds inte längre.
Den här kursen visar hur du kan skicka lokaliserade meddelanden till mobila enheter som registrerats för Notification Hubs-tjänsten. I kursen uppdaterar du appar som du skapat i Självstudier: Skicka meddelanden till specifika enheter (Universal Windows Platform) som stöd för följande scenarier:
- Windows Store-appen tillåter att klientenheter anger ett språk och prenumererar på olika nyhetskategorier.
- Serverdelsappen skickar meddelanden med hjälp av funktionerna tag (tagg) och template (mall) i Azure Notification Hubs.
När du är klar med självstudiekursen låter det mobila programmet dig registrera dig för kategorier som du är intresserad av och även ange på vilket språk meddelandena ska tas emot. Serverdelsprogrammet skickar meddelanden som är lokaliserade efter språk och enhet.
I den här guiden får du lära dig att:
- Uppdatera Windows-appen så att den stödjer språkinformation
- Uppdatera serverdelsappen så att den skickar lokaliserade meddelanden
- Testa appen
Förutsättningar
Slutför Självstudier: Skicka meddelanden till specifika enheter (Universal Windows Platform).
I Självstudier: Skicka meddelanden till specifika enheter (Universal Windows Platform) har du skapat en app som använde taggar att prenumerera på meddelanden för olika nyhetskategorier. I den här självstudiekursen använder du mallfunktion i Notification Hubs till att enkelt leverera lokaliserade nyhetsmeddelanden.
På en hög nivå är mallar ett sätt att ange i vilket format en specifik enhet bör ta emot ett meddelande. Mallen anger det exakta nyttolastformatet genom att referera till egenskaper som ingår i meddelandet som skickas av appserverdelen. I den här självstudiekursen skickar serverdelsprogrammet ett språkvariantsoberoende meddelande som innehåller alla språk som stöds:
{
"News_English": "...",
"News_French": "...",
"News_Mandarin": "..."
}
Enheterna registreras med en mall som refererar till korrekt egenskap. En Windows Store-app som du vill ta emot ett popup-meddelande på engelska registreras för följande mall med en motsvarande taggar:
<toast>
<visual>
<binding template=\"ToastText01\">
<text id=\"1\">$(News_English)</text>
</binding>
</visual>
</toast>
Mer information om mallar finns i avsnittet om push-mallar.
Uppdatera Windows-appen så att den stödjer språkinformation
Öppna den Visual Studio-lösning som du slutförde i Självstudier: Skicka meddelanden till specifika enheter (Universal Windows Platform).
Uppdatera lösningens
MainPage.xaml
-fil till att inkludera en kombinationsruta för nationella inställningar:<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>
Notifications
I klassen lägger du till en språkvariantparameter iStoreCategoriesAndSubscribe
metoderna ochSubscribeToCategories
.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); }
I stället för att anropa metoden
RegisterNativeAsync
anropar duRegisterTemplateAsync
. Du registrerar ett visst meddelandeformat där mallen beror på språket. Du kan också ge mallen ett namn (”localizedWNSTemplateExample”), eftersom du kanske vill registrera mer än en mall (t.ex. en för popup-meddelanden och en för paneler). Du måste också namnge dem att kunna uppdatera eller ta bort dem.Om en enhet registrerar flera mallar med samma tagg resulterar ett inkommande meddelande som är inriktat på den taggen i att flera meddelanden levereras till enheten (ett för varje mall). Detta är användbart när samma logiska meddelande måste resultera i flera visuella meddelanden, t.ex. att visa både en aktivitetsikon och ett popup-meddelande i ett Windows Store-program.
Hämta det lagrade språket genom att lägga till följande metod:
public string RetrieveLocale() { var locale = (string) ApplicationData.Current.LocalSettings.Values["locale"]; return locale != null ? locale : "English"; }
I filen
MainPage.xaml.cs
uppdaterar du hanteraren för knappklick till att hämta det aktuella värdet för kombinationsrutan för nationella inställningar och ange den till anropet till klassenNotifications
: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(); }
I filen
App.xaml.cs
uppdaterar du slutligen metodenInitNotificationsAsync
till att hämta de nationella inställningarna och använda den vid prenumeration: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(); } }
Kör UWP-programmet
Kör Universell Windows-plattform-programmet. Vänta tills du ser meddelandet Registreringen lyckades.
Välj kategorier och språk och klicka på Prenumerera. Appen konverterar de valda kategorierna till taggar och begär en ny enhetsregistrering för de valda taggarna från meddelandehubben.
En bekräftelse om prenumerationerna visas.
Uppdatera konsolappen för att skicka lokaliserade meddelanden
När du skickar mallmeddelanden behöver du bara ange en uppsättning egenskaper. I den här självstudiekursen skickar serverdelsprogrammet en uppsättning egenskaper som innehåller den lokaliserade versionen av senaste nytt:
{
"News_English": "World News in English!",
"News_French": "World News in French!",
"News_Mandarin": "World News in Mandarin!"
}
I det här avsnittet uppdaterar du konsolprogramsprojektet i lösningen. Ändra metoden SendTemplateNotificationAsync
i den konsolapp som du skapade tidigare med följande kod:
Viktigt
Ange namn och anslutningssträng med fullständig åtkomst för din meddelandehubb i koden.
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);
}
}
Detta enkla anrop levererar de lokaliserade nyheterna till alla enheter, oavsett plattform, eftersom din meddelandehubb skapar och levererar korrekt intern nyttolast för alla enheter som prenumererar på en specifik tagg.
Kör konsolappen för att skicka lokaliserade meddelanden
Kör konsolappen för att skicka meddelanden för varje kategori och på varje språk som stöds. Kontrollera att du bara får ett meddelande i de kategorier som du prenumererar på och meddelandet gäller för det språk du valt.
Nästa steg
I den här självstudien har du lärt dig mer om lokaliserade push-meddelanden till specifika enheter som har taggar associerade med sina registreringar. Information om hur du skickar meddelanden till specifika användare som kanske använder mer än en enhet finns i följande självstudiekurs: