Senden plattformübergreifender Benachrichtigungen mit Azure Notification HubsSend cross-platform notifications with Azure Notification Hubs

Dieses Tutorial baut auf dem vorherigen Tutorial Senden von Benachrichtigungen an bestimmte Benutzer mit Azure Notification Hubs auf.This tutorial builds on the previous tutorial, Send notifications to specific users by using Azure Notification Hubs. Das vorherige Tutorial beschreibt, wie Sie Pushbenachrichtigungen an alle Geräte eines bestimmten authentifizierten Benutzers senden können.That tutorial describes how to push notifications to all devices that are registered to a specific authenticated user. Der dort verwendete Ansatz erfordert mehrere Anforderungen zum Senden einer Benachrichtigung an jede unterstützte Clientplattform.That approach required multiple requests to send a notification to each supported client platform. Azure Notification Hubs unterstützt Vorlagen, mit denen Sie angeben können, wie ein bestimmtes Gerät Benachrichtigungen empfangen soll.Azure Notification Hubs supports templates, with which you can specify how a specific device wants to receive notifications. Auf diese Weise können Sie den Versand plattformübergreifender Benachrichtigungen vereinfachen.This method simplifies sending cross-platform notifications.

Dieser Artikel zeigt, wie Sie die Vorteile von Vorlagen nutzen können, um eine Benachrichtigung zu senden, die alle Plattformen berücksichtigt.This article demonstrates how to take advantage of templates to send a notification that targets all platforms. In diesem Artikel wird eine einzelne Anforderung zum Senden einer plattformneutralen Benachrichtigung verwendet.This article uses a single request to send a platform neutral notification. Ausführlichere Informationen zu Vorlagen finden Sie unter Überblick über Notification Hubs.For more detailed information about templates, see Notification Hubs overview.

Wichtig

Windows Phone-Projekte der Version 8.1 und früher werden in Visual Studio 2019 nicht unterstützt.Windows Phone projects 8.1 and earlier are not supported in Visual Studio 2019. Weitere Informationen finden Sie unter Visual Studio 2019 – Zielplattformen und Kompatibilität.For more information, see Visual Studio 2019 platform targeting and compatibility.

Hinweis

Mit Notification Hubs kann ein Gerät mehrere Vorlagen mit demselben Tag registrieren.With Notification Hubs, a device can register multiple templates by using the same tag. In diesem Fall werden bei einer eingehenden Nachricht für das entsprechende Tag mehrere Benachrichtigungen an das Gerät übermittelt (eine pro Vorlage).In this case, an incoming message that targets the tag results in multiple notifications being delivered to the device, one for each template. 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.This process enables you to display the same message in multiple visual notifications, such as both as a badge and as a toast notification in a Windows Store app.

Senden von plattformübergreifenden Benachrichtigungen mit VorlagenSend cross-platform notifications using templates

In diesem Abschnitt wird der Beispielcode verwendet, den Sie im Tutorial Senden von Benachrichtigungen an bestimmte Benutzer mit Azure Notification Hubs erstellt haben.This section uses the sample code you built in the Send notifications to specific users by using Azure Notification Hubs tutorial. Sie können das vollständige Beispiel von GitHub herunterladen.You can download the complete sample from GitHub.

Um plattformübergreifende Benachrichtigungen mit Vorlagen zu senden, gehen Sie wie folgt vor:To send cross-platform notifications using templates, do the following:

  1. Erweitern Sie im Projektmappen-Explorer in Visual Studio den Ordner Controllers, und öffnen Sie dann die Datei RegisterController.cs.In Visual Studio in Solution Explorer, expand the Controllers folder, and then open the RegisterController.cs file.

  2. Suchen Sie in der Put-Methode nach dem Codeblock, mit dem eine neue Registrierung erstellt wird, und ersetzen Sie den Inhalt von switch durch den folgenden Code:Locate the block of code in the Put method that creates a new registration, and then replace the switch content with the following code:

    switch (deviceUpdate.Platform)
    {
        case "mpns":
            var toastTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                "<wp:Notification xmlns:wp=\"WPNotification\">" +
                    "<wp:Toast>" +
                        "<wp:Text1>$(message)</wp:Text1>" +
                    "</wp:Toast> " +
                "</wp:Notification>";
            registration = new MpnsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate);
            break;
        case "wns":
            toastTemplate = @"<toast><visual><binding template=""ToastText01""><text id=""1"">$(message)</text></binding></visual></toast>";
            registration = new WindowsTemplateRegistrationDescription(deviceUpdate.Handle, toastTemplate);
            break;
        case "apns":
            var alertTemplate = "{\"aps\":{\"alert\":\"$(message)\"}}";
            registration = new AppleTemplateRegistrationDescription(deviceUpdate.Handle, alertTemplate);
            break;
        case "fcm":
            var messageTemplate = "{\"data\":{\"message\":\"$(message)\"}}";
            registration = new FcmTemplateRegistrationDescription(deviceUpdate.Handle, messageTemplate);
            break;
        default:
            throw new HttpResponseException(HttpStatusCode.BadRequest);
    }
    

    Dieser Code ruft die plattformspezifische Methode zur Erstellung einer Vorlagenregistrierung anstelle der Systemregistrierung auf.This code calls the platform-specific method to create a template registration instead of a native registration. Da Vorlagenregistrierungen von nativen Registrierungen abgeleitet sind, müssen Sie vorhandene Registrierungen nicht ändern.Because template registrations derive from native registrations, you don't need to modify existing registrations.

  3. Öffnen Sie im Projektmappen-Explorer im Ordner Controllers die Datei NotificationsController.cs.In Solution Explorer, in the Controllers folder, open the NotificationsController.cs file. Ersetzen Sie die Post-Methode durch den folgenden Code:Replace the Post method with the following code:

    public async Task<HttpResponseMessage> Post()
    {
        var user = HttpContext.Current.User.Identity.Name;
        var userTag = "username:" + user;
    
        var notification = new Dictionary<string, string> { { "message", "Hello, " + user } };
        await Notifications.Instance.Hub.SendTemplateNotificationAsync(notification, userTag);
    
        return Request.CreateResponse(HttpStatusCode.OK);
    }
    

    Dieser Code sendet an alle Plattformen gleichzeitig eine Benachrichtigung.This code sends a notification to all platforms at the same time. Sie geben keine native Nutzlast an.You don't specify a native payload. Über Notification Hubs wird die richtige Nutzlast erstellt und an alle Geräte mit dem angegebenen Tagwert übermittelt, wie in den registrierten Vorlagen festgelegt.Notification Hubs builds and delivers the correct payload to every device with the provided tag value, as specified in the registered templates.

  4. Veröffentlichen Sie das Web-API-Projekt erneut.Republish your Web API project.

  5. Führen Sie die Client-App erneut aus, und vergewissern Sie sich, dass die Registrierung erfolgreich war.Run the client app again to verify that the registration has succeeded.

  6. Stellen Sie die Client-App optional auf einem zweiten Gerät bereit, und führen Sie die App aus.Optionally, deploy the client app to a second device, and then run the app. Auf jedem Gerät wird eine Benachrichtigung angezeigt.A notification is displayed on each device.

Nächste SchritteNext steps

Nach Abschluss dieses Tutorials finden Sie weitere Informationen zu Notification Hubs und Vorlagen in den folgenden Artikeln:Now that you've completed this tutorial, find out more about Notification Hubs and templates in these articles: