Introducción a las notificaciones sin procesar
Las notificaciones sin procesar son breves notificaciones de inserción de carácter general. Guardan un propósito estrictamente instructivo y no incluyen ningún componente de interfaz de usuario. Al igual que con otras notificaciones push, la característica Servicios de notificaciones push de Windows (WNS) entrega notificaciones sin procesar desde el servicio en la nube a la aplicación.
Puedes usar notificaciones sin procesar para diversos propósitos, incluido desencadenar la aplicación para ejecutar una tarea en segundo plano si el usuario ha concedido permiso a la aplicación para hacerlo. Mediante el uso de WNS para comunicarse con la aplicación, puede evitar la sobrecarga de procesamiento de la creación de conexiones de socket persistente, el envío de mensajes HTTP GET y otras conexiones de servicio a aplicación.
Importante
Para comprender las notificaciones sin procesar, es mejor familiarizarse con los conceptos descritos en la introducción a Los Servicios de notificaciones push de Windows (WNS).
Al igual que con las notificaciones push del sistema, el icono y el distintivo, se inserta una notificación sin procesar desde el servicio en la nube de la aplicación a través de un identificador uniforme de recursos (URI) de canal asignado a WNS. WNS, a su vez, entrega la notificación al dispositivo y a la cuenta de usuario asociada a ese canal. A diferencia de otras notificaciones push, las notificaciones sin procesar no tienen un formato especificado. El contenido de la carga está completamente definido por la aplicación.
Como ilustración de una aplicación que podría beneficiarse de las notificaciones sin procesar, echemos un vistazo a una aplicación teórica de colaboración de documentos. Considere dos usuarios que editan el mismo documento al mismo tiempo. El servicio en la nube, que hospeda el documento compartido, podría usar notificaciones sin procesar para notificar a cada usuario cuando el otro usuario realice los cambios. Las notificaciones sin procesar no contendrán necesariamente los cambios en el documento, sino que, en su lugar, indicarían la copia de cada usuario de la aplicación para ponerse en contacto con la ubicación central y sincronizar los cambios disponibles. Mediante el uso de notificaciones sin procesar, la aplicación y su servicio en la nube pueden ahorrar la sobrecarga de mantener conexiones persistentes todo el tiempo que el documento está abierto.
Funcionamiento de las notificaciones sin procesar
Todas las notificaciones sin procesar son notificaciones push. Por lo tanto, la configuración necesaria para enviar y recibir notificaciones push también se aplica a las notificaciones sin procesar:
- Debe tener un canal WNS válido para enviar notificaciones sin procesar. Para obtener más información sobre cómo adquirir un canal de notificación de inserción, consulte Cómo solicitar, crear y guardar un canal de notificación.
- Debes incluir la funcionalidad de Internet en el manifiesto de la aplicación. En el editor de manifiestos de Microsoft Visual Studio, encontrará esta opción en la pestaña Capacidades como Internet (cliente). Para obtener más información, consulta Funcionalidades.
El cuerpo de la notificación está en un formato definido por la aplicación. El cliente recibe los datos como una cadena terminada en NULL (HSTRING) que solo la aplicación debe entender.
Si el cliente está sin conexión, WNS almacenará en caché las notificaciones sin procesar solo si el encabezado X-WNS-Cache-Policy se incluye en la notificación. Sin embargo, solo se almacenará en caché una notificación sin procesar y se entregará una vez que el dispositivo vuelva a estar en línea.
Solo hay tres rutas de acceso posibles para que una notificación sin procesar se realice en el cliente: se entregarán a la aplicación en ejecución a través de un evento de entrega de notificaciones, se enviarán a una tarea en segundo plano o se quitarán. Por lo tanto, si el cliente está sin conexión y WNS intenta entregar una notificación sin procesar, se quita la notificación.
Creación de una notificación sin procesar
Enviar una notificación sin procesar es similar al envío de un icono, notificación del sistema o notificación de inserción de distintivos, con estas diferencias:
- El encabezado Content-Type HTTP debe establecerse en "application/octet-stream".
- El encabezado HTTP X-WNS-Type debe establecerse en "wns/raw".
- El cuerpo de la notificación puede contener cualquier carga de cadena inferior a 5 KB de tamaño, pero no debe ser una cadena vacía.
Las notificaciones sin procesar están pensadas para usarse como mensajes cortos que desencadenan la aplicación para realizar una acción, como para ponerse en contacto directamente con el servicio para sincronizar una mayor cantidad de datos o para realizar una modificación de estado local en función del contenido de la notificación. Tenga en cuenta que no se puede garantizar que se entreguen las notificaciones push de WNS, por lo que la aplicación y el servicio en la nube deben tener en cuenta la posibilidad de que la notificación sin procesar no llegue al cliente, como cuando el cliente está sin conexión.
Para obtener más información sobre el envío de notificaciones push, consulte Inicio rápido: Envío de una notificación push.
Recepción de una notificación sin procesar
Hay dos vías a través de las cuales la aplicación puede recibir notificaciones sin procesar:
- A través de eventos de entrega de notificaciones mientras se ejecuta la aplicación.
- A través de las tareas en segundo plano desencadenadas por la notificación sin procesar si la aplicación está habilitada para ejecutar tareas en segundo plano.
Una aplicación puede usar ambos mecanismos para recibir notificaciones sin procesar. Si una aplicación implementa tanto el controlador de eventos de entrega de notificaciones como las tareas en segundo plano desencadenadas por notificaciones sin procesar, el evento de entrega de notificaciones tendrá prioridad cuando se ejecute la aplicación.
- Si la aplicación se está ejecutando, el evento de entrega de notificaciones tendrá prioridad sobre la tarea en segundo plano y la aplicación tendrá la primera oportunidad de procesar la notificación.
- El controlador de eventos de entrega de notificaciones puede especificar, estableciendo la propiedad PushNotificationReceivedEventArgs.Cancel del evento en true, que la notificación sin procesar no debe pasarse a su tarea en segundo plano una vez que se cierra el controlador. Si la propiedad Cancel está establecida en false o no está establecida (el valor predeterminado es false), la notificación sin procesar desencadenará la tarea en segundo plano después de que el controlador de eventos de entrega de notificaciones haya realizado su trabajo.
Eventos de entrega de notificaciones
La aplicación puede usar un evento de entrega de notificaciones (PushNotificationReceived) para recibir notificaciones sin procesar mientras la aplicación está en uso. Cuando el servicio en la nube envía una notificación sin procesar, la aplicación en ejecución puede recibirla controlando el evento de entrega de notificaciones en el URI del canal.
Si la aplicación no se está ejecutando y no usa tareas en segundo plano), WNS quita cualquier notificación sin procesar enviada a esa aplicación al recibirla. Para evitar desperdiciar los recursos del servicio en la nube, debe considerar la posibilidad de implementar lógica en el servicio para realizar un seguimiento de si la aplicación está activa. Hay dos orígenes de esta información: una aplicación puede indicar explícitamente al servicio que está listo para empezar a recibir notificaciones y WNS puede indicar al servicio cuándo detenerse.
La aplicación notifica al servicio en la nube: la aplicación puede ponerse en contacto con su servicio para informarle de que la aplicación se está ejecutando en primer plano. La desventaja de este enfoque es que la aplicación puede acabar contactando con el servicio con mucha frecuencia. Sin embargo, tiene la ventaja de que el servicio siempre sabrá cuándo la aplicación está lista para recibir notificaciones sin procesar entrantes. Otra ventaja es que cuando la aplicación se pone en contacto con su servicio, el servicio sabe enviar notificaciones sin procesar a la instancia específica de esa aplicación en lugar de difundir.
El servicio en la nube responde a los mensajes de respuesta de WNS: El servicio de aplicaciones puede usar la información X-WNS-NotificationStatus y X-WNS-DeviceConnectionStatus devuelta por WNS para determinar cuándo dejar de enviar notificaciones sin procesar a la aplicación. Cuando el servicio envía una notificación a un canal como HTTP POST, puede recibir uno de estos mensajes en la respuesta:
- X-WNS-NotificationStatus: eliminado: indica que el cliente no recibió la notificación. Es una suposición segura de que la respuesta eliminada se debe a que la aplicación ya no está en primer plano en el dispositivo del usuario.
- X-WNS-DeviceConnectionStatus: desconectado o X-WNS-DeviceConnectionStatus: tempconnected: indica que el cliente de Windows ya no tiene una conexión con WNS. Tenga en cuenta que para recibir este mensaje de WNS, debe solicitarlo estableciendo el encabezado X-WNS-RequestForStatus en HTTP POST de la notificación.
El servicio en la nube de la aplicación puede usar la información de estos mensajes de estado para detener los intentos de comunicación a través de notificaciones sin procesar. El servicio puede reanudar el envío de notificaciones sin procesar una vez que se pone en contacto con la aplicación, cuando la aplicación vuelve a entrar en primer plano.
Tenga en cuenta que no debe confiar en X-WNS-NotificationStatus para determinar si la notificación se entregó correctamente al cliente.
Para más información, consulte Encabezados de solicitud y respuesta del servicio de notificaciones push.
Tareas en segundo plano desencadenadas por notificaciones sin procesar
Importante
Antes de usar las tareas en segundo plano de notificaciones sin procesar, se debe conceder a una aplicación acceso en segundo plano a través de BackgroundExecutionManager.RequestAccessAsync.
La tarea en segundo plano debe registrarse con pushNotificationTrigger. Si no está registrado, la tarea no se ejecutará cuando se reciba una notificación sin procesar.
Una tarea en segundo plano desencadenada por una notificación sin procesar permite al servicio en la nube de la aplicación ponerse en contacto con la aplicación, incluso cuando la aplicación no se está ejecutando (aunque podría desencadenarla para ejecutarse). Esto sucede sin que la aplicación tenga que mantener una conexión continua. Las notificaciones sin procesar son el único tipo de notificación que puede desencadenar tareas en segundo plano. Sin embargo, aunque las notificaciones push del sistema, el icono y el distintivo no pueden desencadenar tareas en segundo plano, las tareas en segundo plano desencadenadas por notificaciones sin procesar pueden actualizar iconos e invocar notificaciones del sistema a través de llamadas API locales.
Como ilustración de cómo funcionan las tareas en segundo plano desencadenadas por las notificaciones sin procesar, vamos a considerar una aplicación que se usa para leer libros electrónicos. En primer lugar, un usuario compra un libro en línea, posiblemente en otro dispositivo. En respuesta, el servicio en la nube de la aplicación puede enviar una notificación sin procesar a cada uno de los dispositivos del usuario, con una carga que indica que se compró el libro y que la aplicación debe descargarla. A continuación, la aplicación se pone en contacto directamente con el servicio en la nube de la aplicación para comenzar una descarga en segundo plano del nuevo libro para que, más adelante, cuando el usuario inicie la aplicación, el libro ya está ahí y listo para su lectura.
Para usar una notificación sin procesar para desencadenar una tarea en segundo plano, la aplicación debe:
- Solicite permiso para ejecutar tareas en segundo plano (que el usuario puede revocar en cualquier momento) mediante BackgroundExecutionManager.RequestAccessAsync.
- Implemente la tarea en segundo plano. Para obtener más información, consulte Compatibilidad de la aplicación con tareas en segundo plano.
A continuación, se invoca la tarea en segundo plano en respuesta a PushNotificationTrigger, cada vez que se recibe una notificación sin procesar para la aplicación. La tarea en segundo plano interpreta la carga específica de la aplicación de la notificación sin procesar y actúa sobre ella.
Para cada aplicación, solo se puede ejecutar una tarea en segundo plano a la vez. Si se desencadena una tarea en segundo plano para una aplicación para la que ya se está ejecutando una tarea en segundo plano, la primera tarea en segundo plano debe completarse antes de que se ejecute la nueva.
Otros recursos
Para obtener más información, descargue el ejemplo de notificaciones sin procesar para Windows 8.1 y el ejemplo de notificaciones push y periódicas para Windows 8.1 y vuelva a usar su código fuente en la aplicación de Windows 10.
Temas relacionados
- Directrices para las notificaciones sin procesar
- Inicio rápido: Creación y registro de una tarea en segundo plano de notificación sin procesar
- Inicio rápido: Interceptación de notificaciones push para aplicaciones en ejecución
- RawNotification
- BackgroundExecutionManager.RequestAccessAsync