Tutoriel : Envoyer des notifications Push localisées vers des applications Windows à l’aide d’Azure Notification Hubs
Vue d’ensemble
Notes
Le Service de notifications Push Microsoft (MPNS, Microsoft Push Notification Service) est déconseillé et n’est plus pris en charge.
Ce didacticiel vous montre comment envoyer des notifications localisées vers des appareils mobiles inscrits auprès du service Notification Hubs. Dans le didacticiel, vous mettez à jour les applications créées dans le didacticiel : envoyer des notifications à des appareils spécifiques (plateforme Windows universelle) pour prendre en charge les scénarios suivants :
- L'application Windows Store permet aux appareils clients de spécifier une langue et de s'abonner à différentes catégories de dernières nouvelles.
- L’application back-end diffuse les notifications à l’aide des fonctionnalités de balise et de modèle d’Azure Notification Hubs.
Lorsque vous effectuez le didacticiel, l’application mobile vous permet d’inscrire les catégories qui vous intéressent et également de spécifier une langue qui recevra les notifications. L’application de serveur principal envoie des notifications localisées par la langue et l’appareil.
Dans ce tutoriel, vous allez apprendre à :
- Mettre à jour l’application Windows pour prendre en charge les informations des paramètres régionaux
- Mettre à jour l’application de serveur principal pour envoyer des notifications localisées
- Test de l'application
Prérequis
Terminez le didacticiel : envoyer des notifications à des appareils spécifiques (plateforme Windows universelle).
Dans le didacticiel : envoyer des notifications à des appareils spécifiques (plateforme Windows universelle), vous avez créé une application ayant utilisée des balises pour s’abonner aux notifications de différentes catégories d’actualité. Dans ce didacticiel, vous utilisez la fonctionnalité de modèle de Notification Hubs pour facilement envoyer des notifications de dernières nouvelles localisées.
À un haut niveau, les modèles permettent de spécifier le format dans lequel un appareil particulier reçoit une notification. Le modèle spécifie le format de charge utile exact en se référant aux propriétés qui font partie du message envoyé par le serveur principal de votre application. Dans ce didacticiel, l’application de serveur principal envoie un message indépendant de paramètres régionaux contenant toutes les langues prises en charge :
{
"News_English": "...",
"News_French": "...",
"News_Mandarin": "..."
}
Les appareils s'inscrivent avec un modèle qui se réfère à la bonne propriété. Par exemple, une application Windows Store qui veut recevoir un message toast en anglais doit s’inscrire pour le modèle suivant, avec les balises correspondantes :
<toast>
<visual>
<binding template=\"ToastText01\">
<text id=\"1\">$(News_English)</text>
</binding>
</visual>
</toast>
Pour en savoir plus sur les modèles, consultez Modèles Push.
Mettre à jour l’application Windows pour prendre en charge les informations des paramètres régionaux
Ouvrez la solution Visual Studio que vous avez créée au cours du didacticiel : envoyer des notifications à des appareils spécifiques (plateforme Windows universelle).
Mettez à jour le fichier
MainPage.xaml
de la solution pour y ajouter une zone de liste modifiable de paramètres régionaux :<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>
Dans la classe
Notifications
, ajoutez un paramètre régional aux méthodesStoreCategoriesAndSubscribe
etSubscribeToCategories
.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); }
Au lieu d’appeler la méthode
RegisterNativeAsync
, appelezRegisterTemplateAsync
. Vous inscrivez un format de notification spécifique dans lequel le modèle dépend des paramètres régionaux. Vous indiquez aussi un nom pour le modèle (« localizedWNSTemplateExample »), car vous pouvez être amené à inscrire plus d’un modèle (par exemple, un pour les notifications toast et un pour les vignettes). Vous devez également leur attribuer un nom pour les mettre à jour ou les supprimer.Si un appareil inscrit plusieurs modèles avec la même balise, un message entrant ciblant cette balise entraîne l'envoi de plusieurs notifications à l'appareil (un pour chaque modèle). Ce comportement s'avère utile lorsque le même message logique doit générer plusieurs notifications visuelles, par exemple affichant un badge et un toast dans une application Windows Store.
Ajoutez la méthode suivante pour extraire les paramètres régionaux stockés :
public string RetrieveLocale() { var locale = (string) ApplicationData.Current.LocalSettings.Values["locale"]; return locale != null ? locale : "English"; }
Dans le fichier
MainPage.xaml.cs
, mettez à jour le gestionnaire de clic de bouton pour récupérer la valeur actuelle de la zone de liste modifiable Paramètres régionaux et la fournir à l’appel de la classeNotifications
: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(); }
Pour finir, dans le fichier
App.xaml.cs
, mettez à jour la méthodeInitNotificationsAsync
afin de récupérer les paramètres régionaux et les utiliser lors de l’abonnement :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(); } }
Exécuter l’application UWP
Exécutez l’application UWP. Patientez jusqu'à ce voir le message Inscription réussie.
Sélectionnez les catégories et les paramètres régionaux, puis cliquez sur S’abonner. L'application convertit les catégories sélectionnées en balises et demande une nouvelle inscription de l'appareil pour les balises sélectionnées depuis le Notification Hub.
Vous voyez un message de confirmation concernant les abonnements.
Mettre à jour l’application console pour envoyer des notifications localisées
Lorsque vous envoyez des notifications de modèle, vous devez uniquement fournir un ensemble de propriétés. Dans ce didacticiel, l’application de serveur principal envoie l’ensemble des propriétés contenant la version localisée des actualités, par exemple :
{
"News_English": "World News in English!",
"News_French": "World News in French!",
"News_Mandarin": "World News in Mandarin!"
}
Dans cette section, vous mettez à jour le projet d’application console dans la solution. Modifiez la méthode SendTemplateNotificationAsync
dans l’application console que vous avez créée précédemment avec le code suivant :
Important
Spécifiez le nom et la chaîne de connexion avec un accès complet à votre concentrateur de notification dans le code.
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);
}
}
Ce simple appel remet l’information localisée à tous les appareils, indépendamment de leur plateforme, étant donné que votre hub de notification crée et remet la charge utile native qui convient à l’ensemble des appareils abonnés à une balise spécifique.
Exécuter l’application console pour envoyer une notification localisée
Exécutez l’application console pour envoyer des notifications pour chaque catégorie et dans chaque langue prise en charge. Vérifiez que vous avez uniquement reçu une notification pour les catégories auxquelles vous êtes abonnées et le message est pour les paramètres régionaux sélectionnés.
Étapes suivantes
Dans ce didacticiel, vous avez appris à envoyer des notifications localisées à des appareils spécifiques ayant des balises associées à leurs enregistrements. Pour savoir comment envoyer des notifications à des utilisateurs spécifiques qui peuvent utiliser plus d’un appareil, passez au didacticiel suivant :