Cómo solicitar, crear y guardar un canal de notificación (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
Nota ¿No usas JavaScript? Consulta Cómo solicitar, crear y guardar un canal de notificación (XAML).
Puedes abrir un identificador uniforme de recursos (URI) de canal a través del cual tu aplicación puede recibir notificaciones de inserción. Después, puedes enviar el canal a tu servidor, que lo usa para enviar notificaciones de inserción, y cerrarlo cuando dejes de necesitarlo. Un canal es una dirección única que representa un solo usuario en un solo dispositivo para una aplicación específica o un icono secundario.
Deberías solicitar un nuevo canal cada vez que se inicia la aplicación y actualizar el servidor de nube cuando el URI cambie. Para obtener más detalles, consulta la sección de notas.
Importante Los canales de notificación expiran automáticamente después de 30 días.
Lo que debes saber
Tecnologías
- Windows Runtime
Requisitos previos
- Información de trabajo sobre los términos y conceptos de iconos y notificaciones, además de XML. En este tema se supone que ya sabes crear una aplicación básica de la Tienda Windows con JavaScript mediante las API de Windows en tiempo de ejecución.
- Familiaridad con los conceptos de notificación de inserción y los Servicios de notificaciones de inserción de Windows (WNS), así como sus requisitos y funcionamiento. Estos se tratan en la introducción a los servicios de notificaciones de inserción de Windows (WNS).
Instrucciones
Paso 1: Solicita un URI de canal
En este ejemplo, se solicita un URI de canal. La solicitud se hace a la Plataforma de cliente de notificación, la cual solicita, a su vez, el URI de canal a WNS. Cuando se completa la solicitud, el valor devuelto es un objeto PushNotificationChannel que contiene el URI.
var channel;
var pushNotifications = Windows.Networking.PushNotifications;
var channelOperation = pushNotifications.PushNotificationChannelManager.createPushNotificationChannelForApplicationAsync();
return channelOperation.then(function (newChannel) {
channel = newChannel;
// Success. The channel URI is found in newChannel.uri.
},
function (error) {
// Could not create a channel. Retrieve the error through error.number.
}
);
Paso 2: Envía el URI de canal al servidor
El URI de canal se empaquete en una solicitud HTTP POST y se envía al servidor.
Importante Esta información debe enviarse al servidor de manera segura. Deberías requerir que la aplicación se autentique con el servidor cuando transmite el URI de canal. Cifra la información y usa un protocolo seguro, como HTTPS.
var serverUrl = "https://www.contoso.com";
var xhr = new WinJS.xhr({
type: "POST",
url: serverUrl,
headers: {"Content-Type": "application/x-www-form-urlencoded"},
data: "channelUri=" + channel.uri
}).then(function (req) {
// Channel URI successfully sent to server. Retrieve the response from req.response.
},
function (req) {
// Could not send channel URI to server. Retrieve the error through req.statusText.
}
);
Observaciones
Solicitud de canales
Deberías solicitar un nuevo canal cada vez que se invoque a la aplicación mediante la siguiente lógica:
- Solicita un canal.
- Compara el nuevo canal con el canal anterior. Si el canal es el mismo, no necesitas hacer nada más. Ten en cuenta que esto requiere que tu aplicación almacene el canal localmente cada vez que la aplicación lo envíe correctamente a tu servicio, para que puedas tener el canal con el que compararlo más tarde.
- Si el canal ha cambiado, envía el nuevo canal a tu servicio web. Incluye la lógica de control de errores que siempre envía un nuevo canal en estos casos:
- Tu aplicación nunca antes ha enviado un canal al servicio web.
- El último intento de tu aplicación de enviar el canal al servicio web no se pudo realizar correctamente.
Las diferentes llamadas al método createPushNotificationChannelForApplicationAsync no siempre devuelven un canal diferente. Si el canal no ha cambiado desde la última llamada, para ahorrar tráfico de Internet, la aplicación no debería volver a enviar ese mismo canal al servicio. Una aplicación puede tener varios URI de canal válidos a la vez. Como cada canal único sigue siendo válido hasta que expira, solicitar un nuevo canal no supondría ningún problema porque no afecta al tiempo de expiración de los canales anteriores.
Al solicitar un nuevo canal cada vez que se invoca la aplicación, te aseguras de tener siempre acceso a un canal válido. Esto es especialmente importante si para tu escenario de icono o sistema es fundamental que el contenido siempre esté activo. Si te preocupa que un usuario no vaya a ejecutar tu aplicación más de una vez cada 30 días, puedes implementar una tarea en segundo plano para ejecutar el código de solicitud del canal de forma periódica.
Control de errores en solicitudes de canales
La llamada al método createPushNotificationChannelForApplicationAsync puede producir errores si Internet no está disponible. Para hacerlo, agrega una lógica de reintento al código que se muestra en el paso 2. Recomendamos tres intentos con un tiempo de espera de 10 segundos entre cada intento no satisfactorio. Si se produce un error en los tres intentos, la aplicación debería esperar hasta la siguiente vez que el usuario la inicie para intentarlo de nuevo.
Cerrar canales
La aplicación puede detener inmediatamente la entrega de notificaciones en todos los canales llamando al método close. Aunque esto no será algo que haga normalmente la aplicación, podría haber ciertos casos en los que sería recomendable detener todas las entregas de notificaciones a la aplicación. Por ejemplo, si la aplicación tiene el concepto de cuentas de usuario y un usuario cierra sesión en esa aplicación, lo razonable sería esperar que el icono deje de mostrar la información personal de ese usuario. Para borrar correctamente el contenido del icono y detener la entrega de las notificaciones, deberás hacer lo siguiente:
- Detén todas las actualizaciones de iconos llamando al método PushNotificationChannel.close en cualquiera de los canales de notificaciones que envíen notificaciones de iconos, notificaciones del sistema o notificaciones sin procesar a un usuario. Al llamar al método close, se garantiza que no se entregarán más notificaciones de ese usuario al cliente.
- Borra el contenido del icono llamando al método TileUpdater.clear para quitar del icono los datos del usuario anterior.
Temas relacionados
Ejemplo de notificaciones de inserción y periódicas
Introducción a los Servicios de notificaciones de inserción de Windows (WNS)
Inicio rápido: envío de una notificación de inserción
Cómo autenticar con los Servicios de notificaciones de inserción de Windows (WNS)
Cómo administrar la expiración y renovación del canal
Instrucciones y lista de comprobación de notificaciones de inserción
Solicitud de servicio de notificaciones de inserción y encabezados de respuesta