Udostępnij za pośrednictwem


Samouczek: wysyłanie zlokalizowanych powiadomień push do aplikacji Windows przy użyciu usługi Azure Notification Hubs

Przegląd

Uwaga

Usługa powiadomień wypychanych firmy Microsoft (MPNS) jest przestarzała i nie jest już obsługiwana.

W tym samouczku pokazano, jak wysyłać zlokalizowane powiadomienia do urządzeń mobilnych zarejestrowanych w usłudze Notification Hubs. W tym samouczku zaktualizujesz aplikacje utworzone w Samouczek: Wysyłanie powiadomień do określonych urządzeń (Platforma Uniwersalna Systemu Windows), aby obsługiwać następujące scenariusze:

  • Aplikacja Ze Sklepu Windows umożliwia urządzeniom klienckim określanie języka i subskrybowanie różnych kategorii wiadomości o nowościach.
  • Aplikacja zaplecza wysyła powiadomienia przy użyciu funkcji tagu i szablonu usługi Azure Notification Hubs.

Po ukończeniu samouczka aplikacja mobilna umożliwia zarejestrowanie się w interesujących Cię kategoriach, a także określenie języka, w którym będą odbierane powiadomienia. Aplikacja zaplecza wysyła powiadomienia zlokalizowane według języka i urządzenia.

Z tego samouczka dowiesz się, jak wykonywać następujące działania:

  • Aktualizowanie aplikacji systemu Windows w celu obsługi informacji o ustawieniach regionalnych
  • Aktualizowanie aplikacji zaplecza w celu wysyłania zlokalizowanych powiadomień
  • Testowanie aplikacji

Wymagania wstępne

Ukończ samouczek : wysyłanie powiadomień do określonych urządzeń (platforma uniwersalna systemu Windows).

W Samouczku: wysyłanie powiadomień do określonych urządzeń (Platforma Uniwersalna systemu Windows), utworzyłeś aplikację, która używała tagów , aby subskrybować powiadomienia dla różnych kategorii wiadomości . W tym samouczku użyjesz funkcji szablonu usługi Notification Hubs, aby łatwo dostarczać powiadomienia o zlokalizowanych wiadomościach .

Na wysokim poziomie szablony umożliwiają określenie formatu, w którym określone urządzenie powinno otrzymywać powiadomienie. Szablon określa dokładny format ładunku, odwołując się do właściwości, które są częścią komunikatu wysyłanego przez zaplecze aplikacji. W tym samouczku aplikacja zaplecza wysyła komunikat niezależny od ustawień regionalnych zawierający wszystkie obsługiwane języki:

{
    "News_English": "...",
    "News_French": "...",
    "News_Mandarin": "..."
}

Urządzenia rejestrują się przy użyciu szablonu, który odwołuje się do właściwej właściwości. Aby zarejestrować aplikację ze Sklepu Windows, która chce otrzymywać wiadomości toast w języku angielskim, należy użyć następującego szablonu z odpowiednimi znacznikami.

<toast>
    <visual>
    <binding template=\"ToastText01\">
        <text id=\"1\">$(News_English)</text>
    </binding>
    </visual>
</toast>

Aby dowiedzieć się więcej o szablonach, zobacz Szablony powiadomień push.

Aktualizowanie aplikacji systemu Windows w celu obsługi informacji o ustawieniach regionalnych

  1. Otwórz utworzone rozwiązanie w programie Visual Studio dla samouczka dotyczącego wysyłania powiadomień do określonych urządzeń (platforma uniwersalna systemu Windows).

  2. Zaktualizuj plik MainPage.xaml rozwiązania, aby uwzględnić pole kombi ustawień regionalnych:

    <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>
    
  3. W klasie Notifications dodaj parametr ustawień regionalnych do metod StoreCategoriesAndSubscribe i SubscribeToCategories.

    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);
    }
    

    Zamiast wywoływać metodę RegisterNativeAsync, wywołaj metodę RegisterTemplateAsync. Rejestrujesz określony format powiadomień, w którym szablon zależy od ustawień regionalnych. Podaj również nazwę szablonu ("localizedWNSTemplateExample"), ponieważ możesz zarejestrować więcej niż jeden szablon (na przykład jeden dla wyskakowanych powiadomień i jeden dla kafelków). Należy również nazwać je, aby je zaktualizować lub usunąć.

    Jeśli urządzenie rejestruje wiele szablonów przy użyciu tego samego tagu, komunikat przychodzący przeznaczony dla tego tagu powoduje wyświetlenie wielu powiadomień dostarczonych do urządzenia (po jednym dla każdego szablonu). To zachowanie jest przydatne, gdy ten sam komunikat logiczny musi spowodować wyświetlenie wielu powiadomień wizualnych, na przykład wyświetlenie odznaki i komunikatu typu toast w aplikacji Sklepu Windows.

  4. Dodaj następującą metodę, aby pobrać przechowywane ustawienia regionalne:

    public string RetrieveLocale()
    {
        var locale = (string) ApplicationData.Current.LocalSettings.Values["locale"];
        return locale != null ? locale : "English";
    }
    
  5. W pliku MainPage.xaml.cs zaktualizuj procedurę obsługi kliknięcia przycisku, aby pobrać bieżącą wartość pola kombi Locale i przekazać ją do wywołania klasy Notifications.

    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();
    }
    
  6. Na koniec w pliku App.xaml.cs zaktualizuj metodę InitNotificationsAsync, aby pobrać ustawienia regionalne i użyć jej podczas subskrybowania:

    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();
        }
    }
    

Uruchamianie aplikacji platformy UWP

  1. Uruchom aplikację platformy uniwersalnej systemu Windows. Zaczekaj, aż zobaczysz komunikat Pomyślna rejestracja.

    Aplikacja mobilna i rejestracja

  2. Wybierz kategorie i ustawienia regionalne , a następnie kliknij Subskrybuj . Aplikacja konwertuje wybrane kategorie na tagi i żąda nowej rejestracji urządzenia dla wybranych tagów z centrum powiadomień.

    aplikacja mobilna

  3. Widzisz komunikat potwierdzenia o subskrypcjach .

Aktualizowanie aplikacji konsolowej w celu wysyłania zlokalizowanych powiadomień

Podczas wysyłania powiadomień szablonu wystarczy podać zestaw właściwości; w tym samouczku aplikacja zaplecza wysyła zestaw właściwości zawierający zlokalizowaną wersję bieżących wiadomości, na przykład:

{
    "News_English": "World News in English!",
    "News_French": "World News in French!",
    "News_Mandarin": "World News in Mandarin!"
}

W tej sekcji zaktualizujesz projekt aplikacji konsolowej w rozwiązaniu. Zmodyfikuj metodę SendTemplateNotificationAsync w utworzonej wcześniej aplikacji konsolowej przy użyciu następującego kodu:

Ważne

Określ nazwę i parametry połączenia z pełnym dostępem do centrum powiadomień w kodzie.

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);
    }
}

To proste wywołanie dostarcza zlokalizowaną wiadomość do wszystkich urządzeń , niezależnie od platformy, ponieważ hub powiadomień kompiluje i dostarcza prawidłowy natywny pakiet danych do wszystkich urządzeń subskrybowanych do określonego tagu.

Uruchamianie aplikacji konsolowej w celu wysyłania zlokalizowanych powiadomień

Uruchom aplikację konsolową , aby wysyłać powiadomienia dla każdej kategorii i w każdym obsługiwanym języku. Sprawdź, czy otrzymasz powiadomienie tylko dla kategorii, do których subskrybujesz, a komunikat dotyczy wybranych ustawień regionalnych.

komunikaty powiadomień

Następne kroki

W tym samouczku dowiesz się, jak wysyłać powiadomienia lokalizowane do określonych urządzeń, które mają tagi skojarzone z ich rejestracji. Aby dowiedzieć się, jak wypychać powiadomienia do określonych użytkowników, którzy mogą używać więcej niż jednego urządzenia, przejdź do następującego samouczka: