Share via


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

Opmerking

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

Overzicht

In deze zelfstudie leert u hoe u Azure Notification Hubs gebruikt om meldingen over belangrijk nieuws uit te zenden. In deze handleiding worden Windows Store- of Windows Phone 8.1-toepassingen (niet-Silverlight) behandeld. Als u zich richt op Windows Phone 8.1 Silverlight, raadpleeg Pushmeldingen naar specifieke Windows Phone-apparaten met behulp van Azure Notification Hubs.

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

Als u broadcastscenario's wilt inschakelen, neemt u een of meer tags op wanneer u een registratie in de Notification Hub maakt. Wanneer meldingen naar een tag worden verzonden, ontvangen alle apparaten die zijn geregistreerd voor de tag de melding. Zie Routerings- en tagexpressies voor meer informatie over tags.

Opmerking

Windows Store- en Windows Phone-projectversies 8.1 en eerder worden niet ondersteund in Visual Studio 2019. Zie Visual Studio 2019 Platform Targeting and Compatibility voor meer informatie.

In deze zelfstudie voert u de volgende taken uit:

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

Vereiste voorwaarden

Voltooi de zelfstudie: Meldingen verzenden naar Universal Windows Platform-apps met behulp van Azure Notification Hubs voordat u aan deze zelfstudie begint.

Selectie van categorieën toevoegen aan de app

De eerste stap is het toevoegen van UI-elementen aan uw bestaande hoofdpagina, zodat gebruikers categorieën kunnen selecteren die moeten worden geregistreerd. De geselecteerde categorieën worden opgeslagen op het apparaat. Wanneer de app wordt gestart, wordt er een apparaatregistratie gemaakt in uw Notification Hub, met de geselecteerde categorieën als tags.

  1. Open het projectbestand MainPage.xaml en kopieer de volgende code in 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 selecteerKlassetoevoegen>. Geef in Nieuw item toevoegen de klassemeldingen een naam en selecteer Toevoegen. Voeg indien nodig de public wijzigingsfunctie toe aan de klassedefinitie.

  3. Voeg de volgende using instructies toe aan het nieuwe bestand:

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

    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 gebruikt de lokale opslag om de nieuwscategorieën op te slaan die dit apparaat moet ontvangen. In plaats van de RegisterNativeAsync methode aan te roepen, roept u RegisterTemplateAsync aan om u te registreren voor de categorieën met behulp van een sjabloonregistratie.

    Als u meer dan één sjabloon wilt registreren, geeft u een sjabloonnaam op, bijvoorbeeld simpleWNSTemplateExample. U noemt de sjablonen zodat u ze kunt bijwerken of verwijderen. U kunt meer dan één sjabloon registreren om er één voor toastmeldingen en één voor tegels te hebben.

    Opmerking

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

    Zie Sjablonenvoor meer informatie.

  5. Voeg in het App.xaml.cs projectbestand 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 benaderen.

    Vervang in de code de tijdelijke aanduidingen <hub name> en <connection string with listen access> met de naam van uw Notification Hub en de verbindingsreeks voor DefaultListenSharedAccessSignature, die u eerder hebt verkregen.

    Opmerking

    Omdat referenties die met een client-app worden gedistribueerd meestal niet veilig zijn, moet u alleen de sleutel voor listen-toegang met uw client-app verdelen. Met listen-toegang kan uw app zich registreren voor meldingen, maar bestaande registraties kunnen niet worden gewijzigd en kunnen er geen meldingen worden verzonden. De volledige toegangssleutel 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 Notifications klasse om de lijst op te slaan in de lokale opslag. Ook worden de bijbehorende tags geregistreerd bij uw Notification Hub. Wanneer de categorieën worden gewijzigd, wordt de registratie opnieuw gemaakt met de nieuwe categorieën.

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

Registreren voor meldingen

In deze sectie registreert u zich bij de Notification Hub bij het opstarten met behulp van de categorieën die u hebt opgeslagen in lokale opslag.

Opmerking

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

  1. Als u de notifications klasse wilt gebruiken om u te abonneren op basis van categorieën, opent u het App.xaml.cs-bestand 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 hebt de InitNotificationsAsync methode gemaakt als onderdeel van de Zelfstudie: stuur meldingen naar Universal Windows Platform-apps met behulp van Azure Notification Hubs.

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

    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 voltooid. Er kan een set categorieën worden opgeslagen in de lokale opslag van het apparaat. Wanneer gebruikers de categorieselectie wijzigen, worden de opgeslagen categorieën gebruikt om zich te registreren bij de Notification Hub. In de volgende sectie definieert u een back-end waarmee categoriemeldingen naar deze app kunnen worden verzonden.

De UWP-app uitvoeren

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

    App Voor belangrijk nieuws

  2. Schakel een of meer categorieknoppen in en selecteer vervolgens Abonneren.

    De app converteert de geselecteerde categorieën naar tags en vraagt een nieuwe apparaatregistratie aan voor de geselecteerde tags van de Notification Hub. De app geeft de geregistreerde categorieën weer in een dialoogvenster.

    De wisselknop Categorie en de knop Abonneren

Een console-app maken om getagde meldingen te verzenden

In deze sectie verzendt u belangrijk nieuws als getagde sjabloonmeldingen van een .NET-console-app.

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

    1. Selecteer in het menu Bestand>Nieuw>Project.
    2. Selecteer in Een nieuw project makenConsole-app (.NET Framework) voor C# in de lijst met sjablonen en selecteer Volgende.
    3. Voer een naam voor de app in.
    4. Voor Solutionkiest u Toevoegen aan oplossingen 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 naar de Azure Notification Hubs SDK met behulp van het Microsoft.Azure.NotificationHubs-pakket.

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

    using Microsoft.Azure.NotificationHubs;
    
  4. Voeg in de klasse Program de volgende methode toe of vervang deze 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 tags in de tekenreeksmatrix. Het gebruik van tags zorgt ervoor dat apparaten alleen 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 uw Notification Hub en de verbindingsreeks voor DefaultFullSharedAccessSignature van het dashboard van uw Notification Hub.

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

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

De 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 toastmeldingen.

Volgende stappen

In dit artikel hebt u geleerd hoe u belangrijk nieuws per categorie uitzendt. De back-endtoepassing pusht getagde meldingen naar apparaten die zijn geregistreerd om meldingen voor die tag te ontvangen. Als u wilt weten hoe u pushmeldingen verzendt naar specifieke gebruikers, onafhankelijk van het apparaat dat ze gebruiken, gaat u verder met de volgende zelfstudie: