Envío de notificaciones entre plataformas con Azure Notification Hubs

Este tutorial se basa en el anterior, Envío de notificaciones a usuarios concretos mediante Azure Notification Hubs. En ese tutorial se describe cómo insertar notificaciones en todos los dispositivos que están registrados en un usuario autenticado concreto. Ese enfoque requería que varias solicitudes enviaran una notificación a cada plataforma de cliente compatible. Azure Notification Hubs admite plantillas, que le permiten especificar cómo un dispositivo específico desea recibir notificaciones. Este método simplifica el envío de notificaciones entre plataformas.

En este artículo se muestra cómo aprovechar las plantillas para enviar una notificación que se dirige a todas las plataformas. En este artículo se usa una única solicitud para enviar una notificación que no tiene en cuenta la plataforma. Para más información sobre las plantillas, consulte Introducción a Notification Hubs.

Importante

Windows Phone 8.1 y las versiones anteriores no se admiten en Visual Studio 2019. Para más información, consulte Compatibilidad y destinatarios de la plataforma de Visual Studio 2019.

Nota

Con Notification Hubs, un dispositivo puede registrar varias plantillas con la misma etiqueta. En este caso, un mensaje entrante dirigido a esa etiqueta da lugar a que se entreguen varias notificaciones al dispositivo, una por cada plantilla. Este proceso le permite mostrar el mismo mensaje en varias notificaciones visuales, como distintivo y como notificación del sistema en una aplicación de la Tienda Windows.

Envío de notificaciones entre plataformas mediante plantillas

Nota

El Servicio de notificaciones push de Microsoft (MPNS) está en desuso y ya no se admite.

En esta sección se usa el código de ejemplo que se creó en el tutorial Envío de notificaciones a usuarios concretos mediante Azure Notification Hubs. Puede descargar el ejemplo completo de GitHub.

Para enviar notificaciones entre plataformas mediante plantillas, haga lo siguiente:

  1. En Visual Studio, en el Explorador de soluciones, expanda la carpeta Controladores y, después, abra el archivo RegisterController.cs.

  2. Encuentre el bloque de código en el método Put que crea un nuevo registro y reemplace el contenido de switch por el código siguiente:

    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 llama al método específico de la plataforma para crear un registro de plantilla en lugar de un registro nativo. Como los registros de plantilla se obtienen de registros nativos, no es necesario modificar los registros existentes.

  3. En el Explorador de soluciones, en la carpeta Controllers, abra el archivo NotificationsController.cs. Reemplace el método Post por el código siguiente:

    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 envía una notificación a todas las plataformas al mismo tiempo. No se especifica una carga nativa. Notification Hubs crea y entrega la carga correcta a cada dispositivo con el valor tag proporcionado, como se especifica en las plantillas registradas.

  4. Vuelva a publicar el proyecto de API Web.

  5. Vuelva a ejecutar la aplicación cliente para comprobar que el registro se ha realizado correctamente.

  6. Opcionalmente, implemente la aplicación cliente en un segundo dispositivo y ejecute la aplicación. Aparece una notificación en cada dispositivo.

Pasos siguientes

Ahora que ha completado este tutorial, puede obtener más información acerca de Notification Hubs y las plantillas en estos artículos: