Compartir a través de


Cómo usar WNS para entregar notificaciones de inserción sin procesar a una aplicación de pantalla de bloqueo (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

En este tema se muestra cómo usar el servicio de notificaciones de Windows (WNS) y las notificaciones de inserción sin procesar en una aplicación de Windows en tiempo de ejecución para que una aplicación de pantalla de bloqueo reciba notificaciones de red en segundo plano. En él explicamos cómo registrar un canal de notificaciones de inserción y enviarlo al servidor, registrar una tarea en segundo plano para que una notificación de inserción sin procesar la active, enviar una notificación de inserción sin procesar al canal y activar la tarea en segundo plano.

Lo que debes saber

Tecnologías

Requisitos previos

  • La siguiente información es válida para cualquier aplicación de Windows en tiempo de ejecución conectada o habilitada para red que dependa de conexiones de red que usan notificaciones de inserción sin procesar para estar siempre conectada. Este tema es válido para las aplicaciones escritas en JavaScript y HTML en Windows 8.1, Windows Phone 8.1 y Windows Server 2012 R2.

    Las aplicaciones de JavaScript, las aplicaciones escritas en C++/XAML y las aplicaciones que usan .NET Framework 4.5 en C#, VB.NET, o C++ administrado, admiten conectividad de red en segundo plano usando notificaciones de inserción sin procesar. Para obtener más información acerca de las tareas de red en segundo plano aplicables a las aplicaciones JavaScript, consulta Dar soporte a tu aplicación mediante tareas en segundo plano.

Instrucciones

Usar WNS para entregar notificaciones de inserción sin procesar a una aplicación de pantalla de bloqueo

No es necesario que las aplicaciones que usan WNS se estén ejecutando para recibir notificaciones de inserción; al usuario le puede parecer que se están ejecutando cuando realmente no lo están. Por ejemplo, una aplicación meteorológica puede mostrar siempre el tiempo más reciente en un icono dinámico actualizado. También se puede usar WNS para entregar notificaciones en pantalla a los usuarios cuando sucedan eventos importantes. Un buen ejemplo de una notificación en pantalla es una noticia de última hora. Cualquier dispositivo que ejecute Windows 8.1, Windows Phone 8.1 o Windows Server 2012 R2. con conexión a Internet puede usar WNS. Estas notificaciones de WNS se suelen entregar tan pronto como se envían.

Aunque WNS contribuye al funcionamiento de los iconos dinámicos y las notificaciones en la pantalla Inicio de Windows 8.1, también sirve para permitir escenarios de conectividad en tiempo real, como MI, VoIP y correo electrónico. Cuando una aplicación que usa WNS se agrega a la pantalla de bloqueo, se puede usar para activar una tarea en segundo plano. Una tarea en segundo plano es parte del código de tu aplicación que se ejecuta cuando la aplicación está en segundo plano (ya no está en primer plano).

Algunos ejemplos de una tarea en segundo plano que se puede activar mediante una notificación de WNS incluyen los siguientes:

  • Llamar a la API de la notificación de recuento para que incremente un icono de notificación de una aplicación de correo electrónico en la pantalla de bloqueo a fin de indicar que ha llegado un nuevo mensaje
  • Llamar a la API de notificación del sistema de modificación para generar una notificación para una aplicación VoIP que indica que hay una llamada telefónica entrante para el usuario

Existen cuatro tipos de notificación de inserción:

  • Actualización de icono
  • Actualización de notificación
  • Notificación del sistema
  • Notificación sin procesar

Todas las aplicaciones de Windows en tiempo de ejecución pueden usar las tres primeras notificaciones de inserción cuando se encuentran en primer plano. Las únicas aplicaciones que pueden recibir notificaciones de inserción sin procesar de WNS son las de la pantalla de bloqueo. Las notificaciones sin procesar permiten que las aplicaciones de pantalla de bloqueo ejecuten código en forma de tarea en segundo plano cuando la notificación de inserción sin procesar llega de WNS, incluso si la aplicación no está en primer plano.

La mayoría de las aplicaciones no necesitan ser de pantalla de bloqueo y pueden usar WNS sin estar en la pantalla de bloqueo. Todas las aplicaciones pueden usar WNS para actualizar iconos y notificaciones, así como para generar notificaciones del sistema cuando estén en primer plano. El uso de WNS con una aplicación de pantalla de bloqueo es una versión más avanzada del uso de WNS para activar iconos dinámicos y generar notificaciones para los usuarios. Los desarrolladores deberían familiarizarse con la documentación de WNS en MSDN antes de intentar usar WNS con una pantalla de bloqueo. Si quieres obtener más información, consulta la introducción a las notificaciones de inserción.

Necesitarás una clave secreta que se haya aprovisionado a través de la Tienda Windows para enviar notificaciones de inserción a WNS. Si quieres más información sobre cómo autenticar con WNS y configurar tu aplicación, consulta el tema sobre cómo autenticar con los Servicios de notificaciones de inserción de Windows (WNS).

Los siguientes pasos muestran cómo enviar una notificación de inserción sin procesar a una aplicación de pantalla de bloqueo.

  • Registrarte en un canal de notificación de inserción de WNS y enviarlo a tu servidor.
  • Enviar una notificación de inserción sin procesar con el formato correcto a WNS mediante el canal de notificación.
  • Escribir una tarea en segundo plano que se activa mediante una notificación de inserción sin procesar.

Las notificaciones de inserción sin procesar se entregan a una aplicación cliente mediante el servidor de aplicaciones de un desarrollador, realizando un HTTP PUSH de una carga XML bien formada a un canal de notificación. La aplicación cliente genera un canal de notificación que se envía a tu servidor de aplicaciones y se usa para enviar la notificación de inserción. El canal de notificación es exclusivo de la instancia de tu aplicación en la cuenta del usuario en Windows 8.1.

JJ679947.wedge(es-es,WIN.10).gifRegistrarte en un canal de notificación de inserción y enviarlo a tu servidor

  1. Regístrate en un canal llamando a uno de los métodos CreatePushNotificationChannelForApplicationAsync de la clase PushNotificationChannelManager en el espacio de nombres Windows.Networking.PushNotifications.

    Esto generará un canal de notificación de inserción para tu aplicación, con un aspecto similar al siguiente:

    https://db3.notify.windows.com/?token=AQQAAADX3Wr8MA%2fCoZk4n1CmR5ZU7tdic6ksvG4TQq1tiyZtpetjfzuPHSjvliEeqaqJcPuo1jrVnbyCZvnbuU%2byLvZNDONTgUNu6lavpl5EGtWx7iQgpGkyHLbZeosxioQ42Cg%3d
    
  2. Envía el canal al servidor. Los canales expiran después de 30 días, así que deberías seguir los procedimientos recomendados:

    • Regístrate en un nuevo canal de notificación de inserción cada vez que se inicie la aplicación y envíalo a tu servidor para reemplazar el canal que se enlazó antes al usuario.
    • Para un equipo local que esté siempre encendido, ejecuta una tarea en segundo plano para renovar el canal de vez en cuando antes de que el canal expire. Esto se conoce como temporizador de mantenimiento.

JJ679947.wedge(es-es,WIN.10).gifRegistrar una tarea en segundo plano que activarla con una notificación de inserción sin procesar

  1. Para crear una tarea en segundo plano que se ejecute cuando se reciba una notificación de inserción sin procesar, debes especificar el archivo de JavaScript que contiene el código fuente que la tarea en segundo plano vaya a activar. Para hacerlo, asegúrate de que el manifiesto de la aplicación apunte al archivo de código fuente de la tarea en segundo plano. El manifiesto de la aplicación debe contener el nombre del archivo de código fuente de JavaScript de la tarea en segundo plano.

    El siguiente ejemplo agrega extensiones para una tarea en segundo plano PushNotifyTask bajo el elemento <Application> en un manifiesto de la aplicación.

      <Extensions>
        <Extension Category="windows.backgroundTasks" StartPage="js\backgroundTask.js">
          <BackgroundTasks>
            <Task Type="pushNotification" />
          </BackgroundTasks>
        </Extension>
      </Extensions>
    
  2. La aplicación tiene que abrir el canal para las notificaciones de inserción sin procesar.

    El siguiente ejemplo muestra cómo abrir un canal para una notificación de inserción sin procesar.

    
        // Open the channel. See the "Push and Polling Notifications" sample for more detail
        function openNotificationsChannel() {
            var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();
            WinJS.log && WinJS.log("Opening a channel...", "sample", "status");
            return channelOperation.then(function (newChannel) {
                WinJS.log && WinJS.log("Channel request succeeded!", "sample", "status");
                document.getElementById("scenario1ChannelOutput").value = newChannel.uri;
                SdkSample.channel = newChannel;
            },
                function (error) {
                    WinJS.log && WinJS.log("Could not create a channel (error number: " + error.number + ")", "sample", "error");
                }
            );
        }
    
  3. La aplicación también debe registrar la tarea en segundo plano que se va a activar cuando se reciba una notificación de inserción sin procesar.

    En la siguiente muestra se indica cómo registrar una tarea en segundo plano para una notificación de inserción sin procesar.

        // Register the background task for raw notifications
        //
        function registerBackgroundTask() {
            var taskBuilder = new background.BackgroundTaskBuilder();
            var trigger = new background.PushNotificationTrigger();
            taskBuilder.setTrigger(trigger);
            taskBuilder.taskEntryPoint = sampleTaskEntryPoint;
            taskBuilder.name = sampleTaskName;
    
            try {
                var task = taskBuilder.register();
                task.addEventListener("completed", backgroundTaskComplete);
                WinJS.log && WinJS.log("Background task registered", "sample", "status");
            } catch (e) {
                WinJS.log && WinJS.log("Registration error: " + e.message, "sample", "error");
                unregisterBackgroundTask();
            }
        }
    
        function unregisterBackgroundTask() {
            var iter = background.BackgroundTaskRegistration.allTasks.first();
            while (iter.hasCurrent) {
                var task = iter.current.value;
                if (task.name === sampleTaskName) {
                    task.unregister(true);
                    return true;
                }
                iter.moveNext();
            }
            return false;
        }
    
  4. También debes proporcionar código para la función que se ejecuta cuando se desencadena la tarea en segundo plano.

    Para obtener más información sobre cómo escribir una tarea en segundo plano para recibir notificaciones de red en segundo plano que usan notificaciones de inserción sin procesar, consulta Cómo escribir una tarea en segundo plano para notificaciones de inserción sin procesar.

    Nota  

    No puedes hacer referencia a elementos de la interfaz de usuario (UI) de tu aplicación en una tarea en segundo plano porque los elementos de interfaz de usuario de tu aplicación no se están ejecutando. Esto significa que todas las devoluciones de llamadas para el transporte de red no deben tener afinidad con el subprocesamiento controlado simple (STA) de interfaz de usuario. Las tareas en segundo plano no deben acceder a ningún objeto que tenga afinidad con STA de interfaz de usuario (también denominado STA de la aplicación).

    Cuando tu código se esté ejecutando en la tarea en segundo plano, puedes configurar la aplicación para la activación, sincronizar el estado entre el cliente y el servidor, y generar una notificación para el usuario.

     

Las notificaciones de inserción sin procesar son parecidas a las notificaciones y las notificaciones de icono. La principal diferencia es que la carga de una notificación de inserción sin procesar no contiene atributos que actualicen partes de la interfaz de usuario de Windows 8.1. La carga de la notificación de inserción sin procesar es todos los datos de contexto que se pasan directamente a tu aplicación cuando se activa la tarea en segundo plano. La aplicación debe comprender el formato de los datos de contexto enviados por el servidor.

Para que el servidor pueda enviar una notificación de inserción sin procesar, debes hacer lo siguiente:

JJ679947.wedge(es-es,WIN.10).gifEnviar una notificación de inserción sin procesar al canal y activar la tarea en segundo plano

  1. Asegúrate de haber registrado tu aplicación con la Tienda Windows y de tener una clave privada y el SID del paquete.

  2. Escribe código en tu servidor de aplicaciones para realizar la autenticación con WNS con la clave privada y el SID de paquete, antes de enviar una notificación de inserción del servidor.

  3. Crea una notificación de inserción sin procesar de WNS adecuada y realiza un HTTP POST al canal de notificación que hayas recibido previamente de la aplicación Windows en tiempo de ejecución. HTTP POST debería incluir varios encabezados HTTP adicionales:

    • X-WNS-Type=wns/raw
    • Content-Type=application/octet-stream
    • Authorization=La cadena “Bearer”, un espacio y después el token de autorización recibido en el paso de autenticación

    El cuerpo de HTTP POST debe incluir todo el contexto que quieras proporcionarle a la aplicación cliente cuando ejecute la tarea en segundo plano desencadenada por la recepción de la notificación de inserción sin procesar. La cantidad máxima de datos que se pueden incluir en la carga de la notificación sin procesar es 5 kB.

    Cuando el cliente recibe la notificación, se activa la tarea en segundo plano y se pasa la carga de datos especificada, a la que se puede acceder mediante el código de la tarea en segundo plano de tu aplicación.

Pasos previos

Para obtener más información sobre cómo crear una aplicación de pantalla de bloqueo para que reciba notificaciones de red en segundo plano que usan notificaciones de inserción sin procesar, consulta Inicio rápido: crear una aplicación de pantalla de bloqueo que notificaciones de inserción sin procesar en segundo plano.

Pasos posteriores

Para obtener más información sobre cómo escribir una tarea en segundo plano para recibir notificaciones de red en segundo plano que usan notificaciones de inserción sin procesar, consulta Cómo escribir una tarea en segundo plano para notificaciones de inserción sin procesar.

Para obtener más información sobre las directrices y listas de comprobación para usar notificaciones de inserción sin procesar, consulta

Directrices y lista de comprobación para notificaciones de inserción sin procesar.

Temas relacionados

Otros recursos

Agregar compatibilidad para redes

Redes en segundo plano

Directrices y lista de comprobación de notificaciones sin procesar

Cómo autenticar con los Servicios de notificaciones de inserción de Windows (WNS)

Cómo usar WNS para entregar notificaciones de inserción sin procesar a una aplicación de pantalla de bloqueo

Cómo escribir una tarea en segundo plano para notificaciones de inserción sin procesar

Introducción a las pantallas de bloqueo

Introducción a las notificaciones de inserción

Cómo crear una aplicación de pantalla de bloqueo que usa notificaciones de inserción sin procesar en segundo plano

Dar soporte a tu aplicación mediante tareas en segundo plano

Solución de problemas y depuración de las conexiones de red

Referencia

HttpClient

HttpClientHandler

IXMLHTTPRequest2

System.Net.Http

Windows.ApplicationModel.Background

Windows.Networking.BackgroundTransfer

Windows.Networking.PushNotifications

Windows.Networking.Sockets

Windows.Web.Http

Muestras

Muestra de tarea en segundo plano

Muestra de aplicaciones de pantalla de bloqueo

Ejemplo de notificaciones de inserción y periódicas del lado cliente

Ejemplo de notificaciones sin procesar