Dela via


Självstudie: Skicka lokaliserade push-meddelanden till Windows-appar med hjälp av Azure Notification Hubs

Översikt

Anmärkning

Microsoft Push Notification Service (MPNS) har blivit inaktuell och stöds inte längre.

Den här handledningen visar dig hur man skickar lokaliserade meddelanden till mobila enheter som registrerats hos Notification Hubs-tjänsten. I självstudien uppdaterar du program som skapats i Självstudie: Skicka meddelanden till specifika enheter (Universal Windows Platform) för att stödja följande scenarier:

  • Med Windows Store-appen kan klientenheter ange ett språk och prenumerera på olika nyhetskategorier.
  • Serverdelsappen sänder meddelanden med hjälp av tagg- och mallfunktionerna i Azure Notification Hubs.

När du har slutfört självstudien kan du registrera dig för kategorier som du är intresserad av i mobilprogrammet och även ange ett språk där meddelandena ska tas emot. Serverdelsprogrammet skickar meddelanden som lokaliseras efter språk och enhet.

I den här tutorialen lär du dig följande:

  • Uppdatera Windows-appen för att stödja språkinformation
  • Uppdatera serverdelsappen för att skicka lokaliserade meddelanden
  • Testa appen

Förutsättningar

Slutför självstudien: Skicka meddelanden till specifika enheter (Universell Windows-plattform).

I Självstudie: Skicka meddelanden till specifika enheter (Universal Windows Platform) har du skapat en app som använde taggar för att prenumerera på meddelanden för olika nyhetskategorier. I den här självstudien använder du mallfunktionen i Notification Hubs för att enkelt leverera lokaliserade meddelanden om senaste nytt.

På hög nivå är mallar ett sätt att ange i vilket format en specifik enhet ska få ett meddelande. Mallen anger exakt nyttolastformat genom att referera till egenskaper som ingår i meddelandet som skickas av appens serverdel. I den här självstudien skickar serverdelsprogrammet ett icke-lokalberoende meddelande som innehåller alla språk som stöds.

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

Enheterna registreras med en mall som refererar till rätt egenskap. En Windows Store-app som vill ta emot ett popup-meddelande på engelska registrerar sig till exempel för följande mall med motsvarande taggar:

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

Mer information om mallar finns i Push-mallar.

Uppdatera Windows-appen för att stödja språkinformation

  1. Öppna Visual Studio-lösningen som du skapade för Självstudie: Skicka meddelanden till specifika enheter (Universell Windows-plattform).

  2. Uppdatera lösningens fil så att den innehåller en kombinationsruta MainPage.xaml 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>
    
  3. Notifications I klassen lägger du till en språkparameter i StoreCategoriesAndSubscribe 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 RegisterNativeAsync anropa metoden anropar du RegisterTemplateAsync. Du registrerar ett specifikt meddelandeformat där mallen är beroende av nationella inställningar. Du anger också ett namn för mallen ("localizedWNSTemplateExample"), eftersom du kanske vill registrera fler än en mall (till exempel en för popup-meddelanden och en för paneler). Du måste också namnge dem för att uppdatera eller ta bort dem.

    Om en enhet registrerar flera mallar med samma tagg resulterar ett inkommande meddelande som riktar sig mot taggen i flera meddelanden som levereras till enheten (ett för varje mall). Det här beteendet är användbart när samma logiska meddelande måste resultera i flera visuella meddelanden, till exempel med både ett märke och ett popup-meddelande i ett Windows Store-program.

  4. Lägg till följande metod för att hämta den lagrade lokaliseringen.

    public string RetrieveLocale()
    {
        var locale = (string) ApplicationData.Current.LocalSettings.Values["locale"];
        return locale != null ? locale : "English";
    }
    
  5. I MainPage.xaml.cs-filen, uppdatera knappklickhanteraren för att hämta det aktuella värdet från kombinationsrutan Locale och ge den till anropet av Notifications-klassen.

    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. Slutligen, i App.xaml.cs filen, uppdatera metoden InitNotificationsAsync för att hämta lokal inställning och använda den när du abonnerar.

    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

  1. Kör Universal Windows Platform-programmet. Vänta tills du ser meddelandet Registreringen lyckades .

    Mobilprogram och registrering

  2. Välj kategorier och nationella inställningar 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.

    Mobilprogram

  3. Du ser ett bekräftelsemeddelande om prenumerationerna.

    Prenumerationsmeddelande

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 handledningen skickar backend-appen uppsättningen egenskaper som omfattar den lokaliserade versionen av de aktuella nyheterna, till exempel:

{
    "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 konsolprogramprojektet i lösningen. SendTemplateNotificationAsync Ändra metoden i konsolappen som du skapade tidigare med följande kod:

Viktigt!

Ange namn och anslutningssträng med fullständig åtkomst för meddelandehubben 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);
    }
}

Det här enkla anropet levererar lokaliserade nyheter till alla enheter, oavsett plattform, när din Notification Hub bygger och levererar rätt inbyggd nyttolast till 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 för de kategorier som du prenumererar på och att meddelandet gäller för det språk du har valt.

Notifikationsmeddelanden

Nästa steg

I den här självstudien har du lärt dig hur du skickar lokaliserade meddelanden till specifika enheter som har taggar som är associerade med deras registreringar. Om du vill veta hur du skickar meddelanden till specifika användare som kan använda mer än en enhet går du vidare till följande självstudie: