Tutorial: Senden von Benachrichtigungen an bestimmte Geräte, die Anwendungen der universellen Windows-Plattform ausführen

Hinweis

Der Microsoft-Pushbenachrichtigungsdienst (MPNS) ist veraltet und wird nicht mehr unterstützt.

Übersicht

In diesem Tutorial wird gezeigt, wie Sie mit Azure Notification Hubs Benachrichtigungen zu aktuellen Nachrichten senden. In diesem Tutorial werden Windows Store- bzw. Windows Phone 8.1-Anwendungen (nicht Silverlight) behandelt. Informationen zu Windows Phone 8.1 Silverlight finden Sie unter Tutorial: Senden von Pushbenachrichtigungen an bestimmte Windows Phone-Geräte mit Azure Notification Hubs.

In diesem Tutorial erfahren Sie, wie Sie mithilfe von Azure Notification Hubs Pushbenachrichtigungen an bestimmte Windows-Geräte senden, die eine Anwendung der universellen Windows-Plattform (UWP) ausführen. Nach Abschluss des Tutorials können Sie sich für die Kategorien aktueller Nachrichten registrieren, die Sie interessieren. Sie erhalten nur Pushbenachrichtigungen für diese Kategorien.

Übertragungsszenarien können Sie durch das Einfügen von einem oder mehreren Tags ermöglichen, wenn Sie eine Registrierung im Notification Hub erstellen. Wenn Benachrichtigungen an ein Tag gesendet werden, erhalten alle Geräte, die für das Tag registriert wurden, diese Benachrichtigung. Weitere Informationen zu Tags finden Sie unter Weiterleitung und Tagausdrücke.

Hinweis

Windows Store- und Windows Phone-Projekte der Version 8.1 und älter werden in Visual Studio 2019 nicht unterstützt. Weitere Informationen finden Sie unter Visual Studio 2019 – Zielplattformen und Kompatibilität.

In diesem Tutorial führen Sie die folgenden Aufgaben aus:

  • Hinzufügen der Kategorieauswahl zur mobilen App
  • Registrieren für Benachrichtigungen
  • Senden von Benachrichtigungen mit Tags
  • Ausführen der App und Erzeugen von Benachrichtigungen

Voraussetzungen

Arbeiten Sie das Tutorial: Senden von Benachrichtigungen an universelle Windows-Plattform-Anwendungen mit Azure Notification Hubs durch, bevor Sie mit diesem Tutorial beginnen.

Hinzufügen der Kategorieauswahl zur App

Der erste Schritt besteht darin, der vorhandenen Hauptseite Benutzeroberflächenelemente hinzuzufügen, die dem Benutzer die Auswahl der Kategorien für die Registrierung ermöglichen. Die ausgewählten Kategorien werden auf dem Gerät gespeichert. Wenn die App gestartet wird, wird eine Geräteregistrierung in Ihrem Notification Hub mit den ausgewählten Kategorien als Tags erstellt.

  1. Öffnen Sie die Projektdatei MainPage.xaml, und kopieren Sie folgenden Code in das 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. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Hinzufügen>Klasse aus. Geben Sie unter Neues Element hinzufügen der Klasse den Namen Benachrichtigungen, und wählen Sie Hinzufügen aus. Fügen Sie der Klassendefinition ggf. den Modifizierer public hinzu.

  3. Fügen Sie der neuen Datei die folgenden using-Anweisungen hinzu:

    using Windows.Networking.PushNotifications;
    using Microsoft.WindowsAzure.Messaging;
    using Windows.Storage;
    using System.Threading.Tasks;
    
  4. Kopieren Sie den folgenden Code in die neue 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);
    }
    

    Diese Klasse verwendet den lokalen Speicher, um Nachrichtenkategorien zu speichern, die das Gerät empfangen soll. Anstelle der RegisterNativeAsync-Methode rufen Sie RegisterTemplateAsync auf, um die Registrierung für die Kategorien mithilfe einer Vorlagenregistrierung durchzuführen.

    Wenn Sie mehrere Vorlagen registrieren möchten, geben Sie einen Vorlagennamen an (z. B. simpleWNSTemplateExample). Benennen Sie die Vorlagen so, dass Sie sie später aktualisieren oder löschen können. Sie können mehrere Vorlagen registrieren, beispielsweise eine für Popupbenachrichtigungen und eine für Kacheln.

    Hinweis

    Mit Notification Hubs kann ein Gerät mehrere Vorlagen mit demselben Tag registrieren. In diesem Fall werden bei einer eingehenden Nachricht für das entsprechende Tag mehrere Benachrichtigungen an das Gerät übermittelt (eine pro Vorlage). Auf diese Weise können Sie dieselbe Nachricht in mehreren visuellen Darstellungen anzeigen, z.B. als Signal und als Popupbenachrichtigung in einer Windows Store-App.

    Weitere Informationen finden Sie unter Vorlagen.

  5. Fügen Sie in der Projektdatei App.xaml.cs der Klasse App die folgende Eigenschaft hinzu:

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

    Mit dieser Eigenschaft erstellen Sie eine Notifications-Instanz und greifen darauf zu.

    Ersetzen Sie im Code die Platzhalter <hub name> und <connection string with listen access> durch den Namen Ihres Notification Hubs und die Verbindungszeichenfolge für DefaultListenSharedAccessSignature, die Sie zuvor abgerufen haben.

    Hinweis

    Da Anmeldenamen, die mit einer Client-App verteilt werden, normalerweise nicht sehr sicher sind, sollten Sie nur den Schlüssel für den Abhörzugriff mit Ihrer Client-App verteilen. Der Abhörzugriff ermöglicht der App, sich für Benachrichtigungen zu registrieren, aber es können keine vorhandenen Registrierungen geändert und keine Benachrichtigungen versendet werden. Der Vollzugriffsschlüssel wird in einem gesicherten Back-End-Dienst für das Versenden von Benachrichtigungen und das Ändern vorhandener Registrierungen verwendet.

  6. Fügen Sie in der Projektdatei MainPage.xaml.cs die folgende Zeile hinzu:

    using Windows.UI.Popups;
    
  7. Fügen Sie in der Projektdatei MainPage.xaml.cs die folgende Methode hinzu:

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

    Diese Methode erstellt eine Liste von Kategorien und verwendet die Notifications-Klasse zum Speichern der Liste im lokalen Speicher. Außerdem registriert sie die entsprechenden Tags in Ihrem Notifications Hub. Wenn die Kategorien geändert werden, wird die Registrierung mit den neuen Kategorien neu erstellt.

Ihre App kann jetzt einen Satz von Kategorien im lokalen Speicher auf dem Gerät speichern. Die App registriert sich beim Notification Hub, wenn Benutzer die Kategorieauswahl ändern.

Registrieren für Benachrichtigungen

In diesem Abschnitt führen Sie die Registrierung beim Notification Hub während des Startvorgangs durch, wobei die im lokalen Speicher gespeicherten Kategorien verwendet werden.

Hinweis

Da sich der durch den Windows Notification Service (WNS) zugeteilte Kanal-URI jederzeit ändern kann, sollten Sie sich regelmäßig für Benachrichtigungen registrieren, um Benachrichtigungsfehler zu vermeiden. Dieses Beispiel registriert sich jedes Mal für Benachrichtigungen, wenn die App gestartet wird. Für häufig ausgeführte Apps (öfters als einmal täglich) können Sie zum Einsparen von Bandbreite die Registrierung wahrscheinlich überspringen, wenn seit der letzten Registrierung weniger als ein Tag vergangen ist.

  1. Öffnen Sie die Datei App.xaml.cs, und aktualisieren Sie die InitNotificationsAsync-Methode, sodass zum Abonnieren von Kategorien die Klasse notifications verwendet wird.

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

    Dadurch wird sichergestellt, dass beim Start der App die Kategorien aus dem lokalen Speicher abgerufen werden. Anschließend wird eine Registrierung für diese Kategorien angefordert. Sie haben die Methode InitNotificationsAsync im Rahmen des Tutorials Senden von Benachrichtigungen an Apps für die universelle Windows-Plattform mit Azure Notification Hubs erstellt.

  2. Fügen Sie in der Projektdatei MainPage.xaml.cs der Methode OnNavigatedTo den folgenden Code hinzu:

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

    Durch diesen Code wird die Hauptseite basierend auf dem Status der zuvor gespeicherten Kategorien aktualisiert.

Die App ist nun vollständig. Sie kann jetzt einen Satz von Kategorien im lokalen Speicher des Geräts speichern. Wenn Benutzer die Kategorieauswahl ändern, werden die gespeicherten Kategorien für die Registrierung beim Notification Hub verwendet. Im nächsten Abschnitt definieren Sie ein Back-End, das Kategoriebenachrichtigungen an diese App senden kann.

Ausführen der UWP-App

  1. Drücken Sie in Visual Studio F5, um die App zu kompilieren und zu starten. Die Benutzeroberfläche der App bietet verschiedene Umschaltmöglichkeiten, mit denen Sie die Kategorien auswählen können, die Sie abonnieren möchten.

    App für aktuelle Nachrichten

  2. Aktivieren Sie eine oder mehrere Kategorien, und wählen Sie dann Abonnieren aus.

    Die App konvertiert die ausgewählten Kategorien in Tags, und fordert eine neue Geräteregistrierung für die ausgewählten Tags vom Notification Hub an. In der App werden die registrierten Kategorien in einem Dialogfeld angezeigt.

    Umschalter für Kategorien und Schaltfläche „Subscribe“ (Abonnieren)

Erstellen einer Konsolen-App zum Senden von Benachrichtigungen mit Tags

In diesem Abschnitt senden Sie Neuigkeiten als Vorlagenbenachrichtigungen mit Tags über eine .NET-Konsolen-App.

  1. Erstellen Sie in Visual Studio eine neue Visual C#-Konsolenanwendung:

    1. Wählen Sie im Menü die Optionen Datei>Neu>Projekt aus.
    2. Wählen Sie unter Neues Projekt erstellen die Option Console App (.NET Framework) (Konsolen-App (.NET Framework)) für C# in der Liste der Vorlagen und dann Weiter aus.
    3. Geben Sie einen Namen für die App ein.
    4. Wählen Sie für Projektmappe die Option Zur Projektmappe hinzufügen aus, und wählen Sie dann Erstellen aus, um das Projekt zu erstellen.
  2. Wählen Sie die Optionen Extras>NuGet-Paket-Manager>Paket-Manager-Konsole aus, und führen Sie im Konsolenfenster den folgenden Befehl aus:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Dadurch wird mithilfe des Microsoft.Azure.NotificationHubs-Pakets ein Verweis auf das Azure Notification Hubs-SDK hinzugefügt.

  3. Öffnen Sie die Datei Program.cs, und fügen Sie die folgende using-Anweisung hinzu:

    using Microsoft.Azure.NotificationHubs;
    
  4. Fügen Sie in der Program -Klasse die folgende Methode hinzu, oder ersetzen Sie sie, falls sie bereits vorhanden ist:

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

    Dieser Code sendet eine Vorlagenbenachrichtigung für jedes der sechs Tags im Zeichenfolgenarray. Durch die Verwendung von Tags wird sichergestellt, dass Geräte nur Benachrichtigungen für die registrierten Kategorien erhalten.

  5. Ersetzen Sie im obigen Code die Platzhalter <hub name> und <connection string with full access> durch den Namen Ihres Notification Hubs und die Verbindungszeichenfolge für DefaultFullSharedAccessSignature aus dem Dashboard für Ihren Notification Hub.

  6. Fügen Sie in der Main()-Methode die folgenden Zeilen hinzu:

     SendTemplateNotificationAsync();
     Console.ReadLine();
    
  7. Erstellen Sie die Konsolenanwendung.

Ausführen der Konsolen-App zum Senden von Benachrichtigungen mit Tags

Führen Sie die im vorherigen Abschnitt erstellte App aus. Die Benachrichtigungen für die ausgewählten Kategorien werden als Popupbenachrichtigungen angezeigt.

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie aktuelle Nachrichten nach Kategorie übermittelt werden. Die Back-End-Anwendung sendet Benachrichtigungen mit Tags an Geräte, die sich für den Empfang von Benachrichtigungen für dieses Tag registriert haben. Um zu erfahren, wie Sie Pushbenachrichtigungen an bestimmte Benutzer senden, unabhängig davon, welche Geräte sie verwenden, fahren Sie mit dem folgenden Tutorial fort: