Skicka plattformsoberoende meddelanden med Azure Notification Hubs

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

Den här artikeln visar hur du kan dra 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 Notification Hubs översikt.

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 med taggen som mål 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 en aktivitetsikon 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.

Det här avsnittet använder den exempelkod 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.

Så här skickar du plattformsoberoende meddelanden med hjälp av mallar:

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

  2. Leta upp kodblocket i Put metoden som skapar en ny registrering och ersätt sedan innehållet med följande switch 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. I Solution Explorer öppnar du filen NotificationsController.cs i mappen Controllers. 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 inte någon intern nyttolast. Notification Hubs skapar och levererar rätt nyttolast till varje enhet med det angivna taggvärdet, som anges i de registrerade mallarna.

  4. Publicera om webb-API-projektet.

  5. Kör klientappen igen för att verifiera att registreringen har lyckats.

  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 de här artiklarna: