Aplicaciones de Windows
Contraer la tabla de contenido
Expandir la tabla de contenido

Cómo usar WNS para entregar notificaciones de inserción sin procesar a una aplicación de pantalla de bloqueo (aplicaciones de la Tienda Windows con JavaScript y HTML)

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 la Tienda Windows para que una aplicación de pantalla de bloqueo reciba notificaciones de red en segundo plano. Describe 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 la Tienda Windows 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 se aplica a las aplicaciones escritas en JavaScript en Windows 8 y Windows Server 2012.

    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 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, 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 la Tienda Windows 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 el Servicio 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.

JJ679947.wedge(es-ar,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-ar,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. 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-ar,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 antes de la aplicación de la Tienda Windows. El 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
Inicio rápido: 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
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

 

 

Mostrar:
© 2018 Microsoft