Skicka plattformsoberoende meddelanden med Azure Notification Hubs

Den här självstudien bygger på den föregående självstudien Skicka meddelanden till specifika användare med hjälp av Azure Notification Hubs. Den här självstudien beskriver hur du skickar push-meddelanden till alla enheter som är registrerade på en specifik autentiserad användare. Den metoden krävde flera begäranden för att skicka ett meddelande till varje klientplattform som stöds. Azure Notification Hubs stöder mallar där du kan ange hur en specifik enhet vill ta emot meddelanden. Den här metoden förenklar sändning av plattformsoberoende meddelanden.

Den här artikeln visar hur du drar nytta av mallar för att skicka ett meddelande som riktar sig till alla plattformar. Den här artikeln använder en enskild begäran för att skicka ett plattformsneutralt meddelande. Mer detaljerad information om mallar finns i Översikt över Notification Hubs.

Viktigt

Windows Phone projekt 8.1 och tidigare stöds inte i Visual Studio 2019. Mer information finns i Visual Studio 2019-plattformens mål och kompatibilitet.

Anteckning

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 att flera meddelanden levereras 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.

Skicka plattformsoberoende meddelanden med hjälp av mallar

Anteckning

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

I det här avsnittet används exempelkoden som du skapade i självstudien Skicka meddelanden till specifika användare med hjälp av Azure Notification Hubs . Du kan ladda ned det fullständiga exemplet från GitHub.

Om du vill skicka plattformsoberoende meddelanden med hjälp av mallar gör du följande:

  1. I Visual Studio i Solution Explorer expanderar du mappen Controllers och öppnar sedan filen RegisterController.cs.

  2. Leta upp kodblocket i metoden Put som skapar en ny registrering och ersätt switch sedan innehållet med följande kod:

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

    Den här koden anropar den plattformsspecifika metoden för att skapa en mallregistrering i stället för en intern registrering. Eftersom mallregistreringar härleds från interna registreringar behöver du inte ändra befintliga registreringar.

  3. Öppna filen NotificationsController.cs i mappen Controllers i Solution Explorer. Ersätt metoden Post med följande kod:

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

    Den här koden skickar ett meddelande till alla plattformar samtidigt. Du anger ingen inbyggd nyttolast. Notification Hubs skapar och levererar rätt nyttolast till varje enhet med det angivna taggvärdet, enligt vad som anges i de registrerade mallarna.

  4. Publicera om ditt webb-API-projekt.

  5. Kör klientappen igen för att kontrollera att registreringen har slutförts.

  6. Du kan också distribuera klientappen till en andra enhet och sedan köra appen. Ett meddelande visas på varje enhet.

Nästa steg

Nu när du har slutfört den här självstudien kan du läsa mer om Notification Hubs och mallar i följande artiklar: