Enviar notificações entre plataformas com os Hubs de Notificação do Azure

Este tutorial se baseia no anterior, Enviar notificações para usuários específicos usando os Hubs de Notificação do Azure. Nele, foi descrito como enviar notificações por push a todos os dispositivos registrados para um usuário autenticado específico. Nessa abordagem, várias solicitações eram necessárias para enviar uma notificação a cada plataforma de cliente com suporte. Os Hubs de Notificação do Azure dão suporte a modelos, com os quais é possível especificar como um dispositivo específico deseja receber notificações. Esse método simplifica o envio de notificações de multiplaforma.

Este artigo demonstra como aproveitar os modelos para enviar uma notificação que se destina a todas as plataformas. Aqui, será usada uma única solicitação para isso. Para obter informações detalhadas sobre modelos, consulte Visão geral de Hubs de Notificação.

Importante

Não há suporte para projetos do Windows Phone 8.1 e anterior no Visual Studio 2019. Para saber mais, consulte Direcionamento e compatibilidade da plataforma Visual Studio 2019.

Observação

Com os Hubs de Notificação, um dispositivo pode registrar vários modelos usando a mesma tag. Nesse caso, uma mensagem de entrada direcionada à tag resulta na entrega de várias notificações ao dispositivo, uma para cada modelo. Esse processo permite exibir a mesma mensagem em várias notificações visuais, como uma notificação e como uma notificação do sistema em um aplicativo da Windows Store.

Enviar notificações multiplataforma usando modelos

Observação

O MPNS (Serviço de Notificação por Push da Microsoft) foi preterido e não é mais compatível.

Esta seção usa o código de exemplo que você criou no tutorial Enviar notificações para usuários específicos usando Hubs de Notificação do Azure. É possível baixar o exemplo completo por meio do GitHub.

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

  1. No Gerenciador de Soluções do Visual Studio, expanda a pasta Controladores e abra o arquivo RegisterController.cs.

  2. Localize o bloco do código no método Put que cria um novo registro e, em seguida, substitua o conteúdo switch 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);
    }
    

    Esse código chama o método da plataforma específica para criar um registro de modelo em vez de um registro nativo. Como os registros de modelo são derivados de registros nativos, você não precisa modificar os registros existentes.

  3. No Gerenciador de Soluções, expanda a pasta Controladores e abra o arquivo NotificationsController.cs. Substitua o método Post pelo seguinte código:

    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. Uma carga nativa não é especificada. Os Hubs de Notificação desenvolve e fornece a carga correta para cada dispositivo com o valor marca fornecido, conforme especificado nos modelos registrados.

  4. Republique seu projeto de API Web.

  5. Execute o aplicativo cliente novamente para verificar se o registro foi bem-sucedido.

  6. Opcionalmente, implante o aplicativo cliente em um segundo dispositivo e, em seguida, execute-o. Uma notificação é exibida em cada dispositivo.

Próximas etapas

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