Enviar notificações para várias plataformas com os Hubs de Notificação do Azure

Este tutorial baseia-se no tutorial anterior, Enviar notificações a utilizadores específicos através dos Hubs de Notificação do Azure. Este tutorial descreve como enviar notificações push para todos os dispositivos registados num utilizador autenticado específico. Essa abordagem exigia vários pedidos para enviar uma notificação para cada plataforma de cliente suportada. Os Hubs de Notificação do Azure suportam modelos, com os quais pode especificar como um dispositivo específico quer receber notificações. Este método simplifica o envio de notificações entre plataformas.

Este artigo demonstra como tirar partido dos modelos para enviar uma notificação destinada a todas as plataformas. Este artigo utiliza um único pedido para enviar uma notificação neutra da plataforma. Para obter informações mais detalhadas sobre modelos, veja Notification Hubs overview (Descrição geral dos Hubs de Notificação).

Importante

Windows Phone projetos 8.1 e anteriores não são suportados no Visual Studio 2019. Para obter mais informações, veja Visual Studio 2019 platform targeting and compatibility (Filtragem e compatibilidade da plataforma do Visual Studio 2019).

Nota

Com os Notification Hubs, um dispositivo pode registar vários modelos com a mesma etiqueta. Neste caso, uma mensagem recebida que visa a etiqueta resulta na entrega de várias notificações no dispositivo, uma para cada modelo. Este processo permite-lhe apresentar a mesma mensagem em várias notificações visuais, como um distintivo e uma notificação de alerta numa aplicação da Loja Windows.

Enviar notificações entre plataformas com modelos

Nota

O Serviço de Notificações Push da Microsoft (MPNS) foi preterido e já não é suportado.

Esta secção utiliza o código de exemplo que criou no tutorial Enviar notificações a utilizadores específicos através dos Hubs de Notificação do Azure . Pode transferir o exemplo completo a partir do GitHub.

Para enviar notificações entre plataformas com modelos, faça o seguinte:

  1. No Visual Studio no Explorador de Soluções, expanda a pasta Controllers e, em seguida, abra o ficheiro RegisterController.cs.

  2. Localize o bloco de código no método que cria um novo registo e, em Put seguida, substitua o switch conteúdo pelo seguinte código:

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

    Este código chama o método específico da plataforma para criar um registo de modelo em vez de um registo nativo. Uma vez que os registos de modelos derivam de registos nativos, não precisa de modificar os registos existentes.

  3. No Explorador de Soluções, na pasta Controladores, abra o ficheiro NotificationsController.cs. Substitua o método Post pelo código abaixo:

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

    Este código envia uma notificação para todas as plataformas ao mesmo tempo. Não especifica um payload nativo. Os Hubs de Notificação compilam e fornecem o payload correto a todos os dispositivos com o valor de etiqueta fornecido, conforme especificado nos modelos registados.

  4. Volte a publicar o projeto da API Web.

  5. Execute a aplicação cliente novamente para verificar se o registo foi bem-sucedido.

  6. Opcionalmente, implemente a aplicação cliente num segundo dispositivo e, em seguida, execute a aplicação. É apresentada uma notificação em cada dispositivo.

Passos seguintes

Agora que concluiu este tutorial, saiba mais sobre os Hubs de Notificação e os modelos nestes artigos: