Idioma: HTML | XAML

Cómo solicitar, crear y guardar un canal de notificación (XAML)

Applies to Windows and Windows Phone

Nota  ¿No usas C#/VB/C++? Consulta Cómo solicitar, crear y guardar un canal de notificación (HTML).

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: Agrega declaraciones de espacios de nombres

Windows.UI.Notifications incluye las API de notificaciones del sistema.



using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;
using Windows.Networking.PushNotifications;

Paso 2: 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.



PushNotificationChannel channel = null;

try
{
    channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
}

catch (Exception ex)
{ 
    // Could not create a channel. 
}

Paso 3: 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.



String serverUrl = "http://www.contoso.com";

// Create the web request.
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
byte[] channelUriInBytes = System.Text.Encoding.UTF8.GetBytes("ChannelUri=" + channel.Uri);

// Write the channel URI to the request stream.
Stream requestStream = await webRequest.GetRequestStreamAsync();
requestStream.Write(channelUriInBytes, 0, channelUriInBytes.Length);

try
{
    // Get the response from the server.
    WebResponse response = await webRequest.GetResponseAsync();
    StreamReader requestReader = new StreamReader(response.GetResponseStream());
    String webResponse = requestReader.ReadToEnd();
}

catch (Exception ex)
{
    // Could not send channel URI to server.
}

Observaciones

Solicitud de canales

Deberías solicitar un nuevo canal cada vez que se invoque a la aplicación mediante la siguiente lógica:

  1. Solicita un canal.
  2. 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.
  3. 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 PushNotificationChannel.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:

  1. 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.
  2. 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)
Instrucciones y lista de comprobación de notificaciones de inserción
Solicitud de servicio de notificaciones de inserción y encabezados de respuesta

 

 

Mostrar:
© 2014 Microsoft