Dela via


Självstudie: Skicka meddelanden till specifika enheter som kör universella Windows Platform-program

Anmärkning

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

Översikt

Den här handledningen visar hur du använder Azure Notification Hubs för att sända nyhetsaviseringar i realtid. Den här handledningen tar upp Windows Store- eller Windows Phone 8.1-applikationer (icke-Silverlight). Om du riktar in dig på Windows Phone 8.1 Silverlight kan du läsa Push-meddelanden till specifika Windows Phone-enheter med hjälp av Azure Notification Hubs.

I den här självstudien får du lära dig hur du använder Azure Notification Hubs för att skicka meddelanden till specifika Windows-enheter som kör ett UWP-program (Universal Windows Platform). När du har slutfört tutorialen kan du registrera dig för de nyhetskategorier som du är intresserad av. Du får endast push-meddelanden för dessa kategorier.

Om du vill aktivera sändningsscenarier inkluderar du en eller flera taggar när du skapar en registrering i meddelandehubben. När meddelanden skickas till en tagg får alla enheter som är registrerade för taggen meddelandet. Mer information om taggar finns i Routning och tagguttryck.

Anmärkning

Windows Store- och Windows Phone-projektversionerna 8.1 och tidigare stöds inte i Visual Studio 2019. Mer information finns i Visual Studio 2019 Platform Targeting and Compatibility (Plattformsmål och kompatibilitet för Visual Studio 2019).

I den här självstudien utför du följande uppgifter:

  • Lägg till kategorival i mobilappen
  • Registrera dig för meddelanden
  • Skicka taggade meddelanden
  • Kör appen och generera meddelanden

Förutsättningar

Slutför självstudien: Skicka meddelanden till universella Windows-plattformsappar med hjälp av Azure Notification Hubs innan du påbörjar den här självstudien.

Lägg till kategorival i appen

Det första steget är att lägga till gränssnittselement på din befintliga huvudsida så att användarna kan välja kategorier att registrera. De valda kategorierna lagras på enheten. När appen startar skapas en enhetsregistrering i meddelandehubben med de valda kategorierna som taggar.

  1. Öppna projektfilen MainPage.xaml och kopiera sedan följande kod i elementet Grid :

    <Grid>
        <Grid.RowDefinitions>
            <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" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="World" Name="WorldToggle" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Politics" Name="PoliticsToggle" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Business" Name="BusinessToggle" Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Technology" Name="TechnologyToggle" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Science" Name="ScienceToggle" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center"/>
        <ToggleSwitch Header="Sports" Name="SportsToggle" Grid.Row="3" Grid.Column="1" HorizontalAlignment="Center"/>
        <Button Name="SubscribeButton" Content="Subscribe" HorizontalAlignment="Center" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Click="SubscribeButton_Click"/>
    </Grid>
    
  2. Högerklicka på projektet i Solution Explorer och välj Lägg till>klass. I Lägg till nytt objekt namnger du klassen Meddelanden och väljer Lägg till. Om det behövs lägger du till public modifieraren i klassdefinitionen.

  3. Lägg till följande using instruktioner i den nya filen:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  4. Kopiera följande kod till den nya Notifications klassen:

    private NotificationHub hub;
    
    public Notifications(string hubName, string listenConnectionString)
    {
        hub = new NotificationHub(hubName, listenConnectionString);
    }
    
    public async Task<Registration> StoreCategoriesAndSubscribe(IEnumerable<string> categories)
    {
        ApplicationData.Current.LocalSettings.Values["categories"] = string.Join(",", categories);
        return await SubscribeToCategories(categories);
    }
    
    public IEnumerable<string> RetrieveCategories()
    {
        var categories = (string) ApplicationData.Current.LocalSettings.Values["categories"];
        return categories != null ? categories.Split(','): new string[0];
    }
    
    public async Task<Registration> SubscribeToCategories(IEnumerable<string> categories = null)
    {
        var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
        if (categories == null)
        {
            categories = RetrieveCategories();
        }
    
        // Using a template registration to support notifications across platforms.
        // Any template notifications that contain messageParam and a corresponding tag expression
        // will be delivered for this registration.
    
        const string templateBodyWNS = "<toast><visual><binding template=\"ToastText01\"><text id=\"1\">$(messageParam)</text></binding></visual></toast>";
    
        return await hub.RegisterTemplateAsync(channel.Uri, templateBodyWNS, "simpleWNSTemplateExample",
                categories);
    }
    

    Den här klassen använder den lokala lagringen för att lagra de nyhetskategorier som den här enheten måste ta emot. I stället för att anropa RegisterNativeAsync metoden anropar du RegisterTemplateAsync för att registrera dig för kategorierna med hjälp av en mallregistrering.

    Om du vill registrera fler än en mall anger du ett mallnamn, till exempel simpleWNSTemplateExample. Du namnger mallarna så att du kan uppdatera eller ta bort dem. Du kan registrera fler än en mall för att ha en för toast-aviseringar och en för brickor.

    Anmärkning

    Med Notification Hubs kan en enhet registrera flera mallar med hjälp av samma tagg. I det här fallet resulterar ett inkommande meddelande som riktar sig mot taggen i flera meddelanden till enheten, ett för varje mall. Med den här processen kan du visa samma meddelande i flera visuella meddelanden, till exempel både som ett märke och som ett popup-meddelande i en Windows Store-app.

    Mer information finns i Mallar.

  5. I App.xaml.cs-projektfilen lägger du till följande egenskap i App klassen:

    public Notifications notifications = new Notifications("<hub name>", "<connection string with listen access>");
    

    Du använder den här egenskapen för att skapa och komma åt en Notifications instans.

    I koden ersätter du platshållarna <hub name> och <connection string with listen access> med namnet på din meddelandehubb och anslutningssträngen för DefaultListenSharedAccessSignature, som du hämtade tidigare.

    Anmärkning

    Eftersom autentiseringsuppgifter som distribueras med en klientapp vanligtvis inte är säkra distribuerar du bara nyckeln för lyssningsåtkomst med klientappen. Med lyssningsåtkomst kan din app registrera sig för meddelanden, men befintliga registreringar kan inte ändras och meddelanden kan inte skickas. Den fullständiga åtkomstnyckeln används i en skyddad serverdelstjänst för att skicka meddelanden och ändra befintliga registreringar.

  6. Lägg till följande rad i filen MainPage.xaml.cs :

    using Windows.UI.Popups;
    
  7. Lägg till följande metod i filen MainPage.xaml.cs :

    private async void SubscribeButton_Click(object sender, RoutedEventArgs e)
    {
        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(categories);
    
        var dialog = new MessageDialog("Subscribed to: " + string.Join(",", categories) + " on registration Id: " + result.RegistrationId);
        dialog.Commands.Add(new UICommand("OK"));
        await dialog.ShowAsync();
    }
    

    Den här metoden skapar en lista med kategorier och använder Notifications klassen för att lagra listan i den lokala lagringen. Den registrerar även motsvarande taggar med din meddelandehubb. När kategorierna ändras återskapas registreringen med de nya kategorierna.

Din app kan nu lagra en uppsättning kategorier i lokal lagring på enheten. Appen registreras med meddelandehubben när användarna ändrar kategorivalet.

Registrera dig för meddelanden

I det här avsnittet registrerar du dig med meddelandehubben vid start med hjälp av de kategorier som du har lagrat i lokal lagring.

Anmärkning

Eftersom kanal-URI:n som tilldelas av Windows Notification Service (WNS) kan ändras när som helst bör du registrera dig för meddelanden ofta för att undvika meddelandefel. Det här exemplet registreras för avisering varje gång appen startas. För appar som du kör ofta, till exempel mer än en gång om dagen, kan du förmodligen hoppa över registreringen för att bevara bandbredden om mindre än en dag har passerat sedan den tidigare registreringen.

  1. Om du vill använda notifications klassen för att prenumerera baserat på kategorier öppnar du filen App.xaml.cs och uppdaterar InitNotificationsAsync sedan metoden.

    // *** Remove or comment out these lines ***
    //var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    //var hub = new NotificationHub("your hub name", "your listen connection string");
    //var result = await hub.RegisterNativeAsync(channel.Uri);
    
    var result = await notifications.SubscribeToCategories();
    

    Den här processen säkerställer att när appen startar hämtar den kategorierna från lokal lagring. Den begär sedan registrering av dessa kategorier. Du skapade InitNotificationsAsync metoden som en del av självstudiekursen Skicka meddelanden till universella Windows-plattformsappar med hjälp av Azure Notification Hubs .

  2. I MainPage.xaml.cs-projektfilen lägger du till följande kod i OnNavigatedTo metoden:

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var categories = ((App)Application.Current).notifications.RetrieveCategories();
    
        if (categories.Contains("World")) WorldToggle.IsOn = true;
        if (categories.Contains("Politics")) PoliticsToggle.IsOn = true;
        if (categories.Contains("Business")) BusinessToggle.IsOn = true;
        if (categories.Contains("Technology")) TechnologyToggle.IsOn = true;
        if (categories.Contains("Science")) ScienceToggle.IsOn = true;
        if (categories.Contains("Sports")) SportsToggle.IsOn = true;
    }
    

    Den här koden uppdaterar huvudsidan baserat på statusen för tidigare sparade kategorier.

Appen är nu klar. Den kan lagra en uppsättning kategorier i enhetens lokala lagring. När användarna ändrar kategorivalet används de sparade kategorierna för att registrera sig med meddelandehubben. I nästa avsnitt definierar du en serverdel som kan skicka kategoriaviseringar till den här appen.

Kör UWP-appen

  1. I Visual Studio väljer du F5 för att kompilera och starta appen. Appgränssnittet innehåller en uppsättning växlingsknappar som gör att du kan välja de kategorier som du vill prenumerera på.

    Breaking News-app

  2. Aktivera en eller flera kategoriväxlingar och välj sedan Prenumerera.

    Appen konverterar de valda kategorierna till taggar och begär en ny enhetsregistrering för de valda taggarna från meddelandehubben. Appen visar de registrerade kategorierna i en dialogruta.

    Kategoriväxlar och Prenumerationsknapp

Skapa en konsolapp för att skicka taggade meddelanden

I det här avsnittet skickar du senaste nytt som taggade mallaviseringar från en .NET-konsolapp.

  1. Skapa ett nytt Visual C#-konsolprogram i Visual Studio:

    1. Välj Arkiv>Nytt>projekt på menyn.
    2. I Skapa ett nytt projekt väljer du Konsolapp (.NET Framework) för C# i listan med mallar och väljer Nästa.
    3. Ange ett namn för appen.
    4. För Lösning väljer du Lägg till i lösning och väljer Skapa för att skapa projektet.
  2. Välj Verktyg>NuGet-pakethanteraren>Pakethanterarkonsol och kör sedan följande kommando i konsolfönstret:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Den här åtgärden lägger till en referens till Azure Notification Hubs SDK med hjälp av paketet Microsoft.Azure.NotificationHubs .

  3. Öppna filen Program.cs och lägg till följande using instruktion:

    using Microsoft.Azure.NotificationHubs;
    
  4. Program I klassen lägger du till följande metod eller ersätter den om den redan finns:

    private static async void SendTemplateNotificationAsync()
    {
        // Define the notification hub.
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("<connection string with full access>", "<hub name>");
    
        // Apple requires the apns-push-type header for all requests
        var headers = new Dictionary<string, string> {{"apns-push-type", "alert"}};
    
        // Create an array of breaking news categories.
        var categories = new string[] { "World", "Politics", "Business", "Technology", "Science", "Sports"};
    
        // Send the notification as a template notification. All template registrations that contain
        // "messageParam" and the proper tags will receive the notifications.
        // This includes APNS, GCM/FCM, WNS, and MPNS template registrations.
    
        Dictionary<string, string> templateParams = new Dictionary<string, string>();
    
        foreach (var category in categories)
        {
            templateParams["messageParam"] = "Breaking " + category + " News!";
            await hub.SendTemplateNotificationAsync(templateParams, category);
        }
    }
    

    Den här koden skickar ett mallmeddelande för var och en av de sex taggarna i strängmatrisen. Användningen av taggar säkerställer att enheterna endast tar emot meddelanden för de registrerade kategorierna.

  5. I föregående kod ersätter du platshållarna <hub name> och <connection string with full access> med ditt meddelandehubbs namn och anslutningssträngen för DefaultFullSharedAccessSignature från instrumentpanelen på din meddelandehubb.

  6. Lägg till följande rader i Main() metoden:

     SendTemplateNotificationAsync();
     Console.ReadLine();
    
  7. Skapa konsolappen.

Kör konsolappen för att skicka taggade meddelanden

Kör appen som skapades i föregående avsnitt. Meddelanden för de valda kategorierna visas som popup-meddelanden.

Nästa steg

I den här artikeln har du lärt dig hur du sänder senaste nytt efter kategori. Serverdelsprogrammet skickar taggade meddelanden till enheter som har registrerat sig för att ta emot meddelanden för taggen. Om du vill veta hur du skickar meddelanden till specifika användare oberoende av vilken enhet de använder går du vidare till följande självstudie: