Zelfstudie: Meldingen verzenden naar specifieke apparaten met Universal Windows Platform-toepassingen

Notitie

Microsoft Push Notification Service (MPNS) is afgeschaft en wordt niet meer ondersteund.

Overzicht

In deze zelfstudie wordt gedemonstreerd hoe u met Azure Notification Hubs meldingen voor belangrijk nieuws verzendt. In deze zelfstudie worden de toepassingen Windows Store of Windows Phone 8.1 (niet-Silverlight) besproken. Als uw doel Windows Phone 8.1 Silverlight is, raadpleegt u Pushmeldingen verzenden naar specifieke Windows Phone-apps met Azure Notification Hubs.

In deze zelfstudie leert u hoe u Azure Notification Hubs gebruikt om pushmeldingen te versturen naar specifieke Windows-apparaten waarop een UWP-toepassing (Universal Windows Platform) wordt uitgevoerd. Nadat u de zelfstudie hebt voltooid, kunt u zich registreren voor de laatste nieuwscategorieën waarin u bent geïnteresseerd. U ontvangt alleen pushmeldingen voor deze categorieën.

Om Broadcast-scenario's mogelijk te maken, voegt u een of meer tags (of labels) toe wanneer u een registratie maakt in Notifications Hub. Wanneer meldingen worden verzonden naar een tag, ontvangen alle apparaten die zijn geregistreerd voor de tag de melding. Zie Routering en tagexpressies voor meer informatie over tags.

Notitie

Projectversies 8.1 en lager van Windows Store en Windows Phone worden niet ondersteund in Visual Studio 2019. Zie Geschikte platforms voor Visual Studio 2019 en compatibiliteit voor meer informatie.

In deze zelfstudie gaat u de volgende taken uitvoeren:

  • Categorieselectie toevoegen aan de mobiele app
  • Registreren voor meldingen
  • Getagde meldingen verzenden
  • De app uitvoeren en meldingen genereren

Vereisten

U moet de Zelfstudie: Meldingen verzenden naar Universal Windows Platform-apps met behulp van Azure Notification Hubs hebben voltooid voordat u aan deze zelfstudie begint.

Categorieselectie toevoegen aan de app

De eerste stap is het toevoegen van UI-elementen aan de bestaande hoofdpagina, zodat gebruikers categorieën kunnen selecteren waarvoor ze zich willen registreren. De geselecteerde categorieën worden op het apparaat opgeslagen. Wanneer de app wordt gestart, wordt er een apparaatregistratie gemaakt in uw meldingshub, met de geselecteerde categorieën als tags.

  1. Open het projectbestand MainPage.xaml en kopieer de volgende code naar het Grid-element:

    <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. Klik in Solution Explorer met de rechtermuisknop op het project en selecteer Toevoegen>Klasse. Geef in Nieuw item toevoegende klasse de naam Meldingenen selecteer Toevoegen. Voeg indien nodig de modifier public toe aan de klassedefinitie.

  3. Voegde volgende using-instructies toe aan het nieuwe codebestand:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  4. Kopieer de volgende code naar de nieuwe klasse Notifications:

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

    Deze klasse gebruik de lokale opslag voor het opslaan van de nieuwscategorieën die dit apparaat moet ontvangen. In plaats van de methode RegisterNativeAsync aan te roepen, verstuurt u een aanroep naar RegisterTemplateAsync om u te registreren voor de categorieën met behulp van een registratiesjabloon.

    Als u meer dan één sjabloon wilt registreren, geeft u een sjabloonnaam op (zoals VoorbeeldEenvoudigWNSsjabloon). U geef de sjablonen een naam zodat u ze kunt bijwerken of verwijderen. U kunt meer dan één sjabloon registreren voor pop-upmeldingen en één voor tegels.

    Notitie

    Met Notification Hubs kan een apparaat meerdere sjablonen registreren met behulp van dezelfde tag. In dit geval wordt een inkomend bericht dat gericht is op de tag in meerdere meldingen bezorgd bij het apparaat, één voor elke sjabloon. Met dit proces kunt u hetzelfde bericht weergeven in meerdere visuele meldingen, zoals een badge en als een pop-upmelding in een Windows Store-app.

    Zie Sjablonen voor meer informatie.

  5. Voeg in het projectbestand App.xaml.cs de volgende eigenschap toe aan de App-klasse:

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

    U gebruikt deze eigenschap om een Notifications-exemplaar te maken en te gebruiken.

    Vervang de tijdelijke aanduidingen <hub name> en <connection string with listen access> in de code door de naam van de meldingshub en de verbindingsreeks voor DefaultFullSharedAccessSignature die u eerder hebt opgevraagd.

    Notitie

    Omdat referenties die worden gedistribueerd met een client-app meestal niet beveiligd zijn, moet u met uw client-app alleen de sleutel voor listen-toegang distribueren. Uw app kan dan worden geregistreerd voor meldingen, maar bestaande registraties kunnen niet worden gewijzigd, en er kunnen geen meldingen worden verzonden. De sleutel voor volledige toegang wordt gebruikt in een beveiligde back-endservice voor het verzenden van meldingen en het wijzigen van bestaande registraties.

  6. Voeg in het bestand MainPage.xaml.cs de volgende regel toe:

    using Windows.UI.Popups;
    
  7. Voeg in het bestand MainPage.xaml.cs de volgende methode toe:

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

    Met deze methode maakt u een lijst met categorieën en gebruikt u de klasse Notifications om de lijst op te slaan in de lokale opslag. Daarnaast worden de bijbehorende tags geregistreerd bij uw meldingshub. Wanneer de categorieën wijzigen, wordt de registratie opnieuw gemaakt met de nieuwe categorieën.

Uw app kan nu een set categorieën opslaan in de lokale opslag op het apparaat. De app wordt geregistreerd bij de meldingshub wanneer gebruikers de categorieselectie wijzigen.

Registreren voor meldingen

In dit gedeelte registreert u zich tijdens het opstarten bij de meldingshub met behulp van de categorieën die u hebt opgeslagen in de lokale opslag.

Notitie

Omdat de kanaal-URI die wordt toegewezen door WNS (Windows Notification Service) op elk moment kan veranderen, moet u zich regelmatig registreren voor meldingen om fouten te voorkomen. In dit voorbeeld wordt er elke keer dat de app wordt gestart een registratie voor meldingen vastgelegd. Voor apps die u regelmatig uitvoert (bijv., meer dan één keer per dag), kunt u de registratie waarschijnlijk overslaan om bandbreedte te besparen als er minder dan een dag is verstreken sinds de vorige registratie.

  1. Als u de klasse notifications wilt gebruiken om u te abonneren op basis van categorieën, opent u het bestand App.xaml.cs en werkt u vervolgens de InitNotificationsAsync-methode bij.

    // *** 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();
    

    Dit proces zorgt ervoor dat wanneer de app wordt gestart, de categorieën worden opgehaald uit de lokale opslag. Vervolgens wordt de registratie van deze categorieën aangevraagd. U heeft de methode InitNotificationsAsync gemaakt als deel van de zelfstudie Meldingen verzenden naar Universeel Windows-platform-apps met behulp van Azure Notification Hubs.

  2. Voeg in het projectbestand MainPage.xaml.cs de volgende code toe aan de methode OnNavigatedTo:

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

    Met deze code wordt de hoofdpagina bijgewerkt op basis van de status van eerder opgeslagen categorieën.

De app is nu klaar Het kan nu een set categorieën opslaan in de lokale opslag op het apparaat. Wanneer gebruikers de categorieselectie wijzigen, worden de opgeslagen categorieën gebruikt voor registratie bij de meldingshub. In het volgende gedeelte definieert u een back-end die categoriemeldingen naar deze app kan verzenden.

De UWP-app uitvoeren

  1. Druk in Visual Studio op F5 om de app te compileren en te starten. De UI van de app biedt een reeks schakelopties waarmee u de categorieën kunt kiezen waarop u zich wilt abonneren.

    De app Breaking News

  2. Zet een of meer categorieën op On en selecteer vervolgens Subscribe.

    De app zet de geselecteerde categorieën om in tags en vraagt bij Notification Hubs een nieuwe apparaatregistratie aan voor de geselecteerde tags. In de app worden de geregistreerde categorieën in een dialoogvenster weergegeven.

    Schakelopties voor categorieën en de knop Subscribe

Een console-app maken om getagde meldingen te verzenden

In deze sectie verzendt u het laatste nieuws als gelabelde sjabloonmeldingen vanuit een .NET-console-app.

  1. Maak in Visual Studio een nieuwe Visual C#-consoletoepassing:

    1. Selecteer in het menu Bestand>Nieuw>Project.
    2. Selecteer bij Een nieuw project maken de Consoletoepassing (.NET Framework) voor C# in de lijst met sjablonen en selecteer Volgende.
    3. voer een naam voor de app in.
    4. Bij Oplossing kiest u Aan oplossing toevoegen en selecteert u Maken om het project te maken.
  2. Selecteer Tools>NuGet Package Manager>Package Manager Console en voer vervolgens in het consolevenster de volgende opdracht uit:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Met deze actie wordt een verwijzing toegevoegd aan de Azure Notification Hubs SDK met het Microsoft.Azure.NotificationHubs-pakket.

  3. Open het bestand Program.cs en voeg de volgende using-instructie toe:

    using Microsoft.Azure.NotificationHubs;
    
  4. Voeg in de klasse Program de volgende methode toe of vervang de methode als deze al bestaat:

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

    Met deze code wordt een sjabloonmelding verzonden voor elk van de zes labels in de tekenreeksmatrix. Het gebruik van labels zorgt ervoor dat apparaten meldingen ontvangen voor de geregistreerde categorieën.

  5. Vervang in de voorgaande code de tijdelijke aanduidingen <hub name> en <connection string with full access> door de naam van de meldingenhub en de verbindingsreeks voor DefaultFullSharedAccessSignature uit het dashboard van de meldingenhub.

  6. Voeg de volgende regels toe in de methode Main():

     SendTemplateNotificationAsync();
     Console.ReadLine();
    
  7. Bouw de console-app.

Console-app uitvoeren om getagde meldingen te verzenden

Voer de app uit die u in de vorige sectie hebt gemaakt. Meldingen voor de geselecteerde categorieën worden weergegeven als pop-upmeldingen.

Volgende stappen

In dit artikel hebt u geleerd hoe u belangrijk nieuws per categorie kunt broadcasten. De back-endtoepassing verstuurt getagde pushmeldingen naar apparaten die zich hebben geregistreerd voor het ontvangen van meldingen voor die tag. Als u wilt weten hoe u pushmeldingen kunt verzenden naar specifieke gebruikers, ongeacht welk apparaat ze gebruiken, gaat u verder met de volgende zelfstudie: