[Windows Phone 8.1] Update Task

Command-RefreshIntroducción

Con la llegada de nuevo SDK siempre esperamos novedades significativas que nos permitan crear cada vez mejores aplicaciones y otorgar experiencias de usuario más completas. Con la llegada del SDK de Windows Phone 8.1 contamos con nuevos controles, nuevas APIs, herramientas, etc.

Entre la enorme cantidad de novedades contamos con una nueva background task realmente útil llamada Update Task.

Como podemos adivinar por su nombre, este background task se ejecuta cuando la aplicación se actualiza. Esto nos permite mostrar información al usuario, actualizar datos, actualizar settings, etc.

En este artículo vamos a aprender como utilizar el Update Task.

¿Te apuntas?

Creando el Update Task

Teniendo una aplicación Windows Phone 8.1 nos centramos en añadir la background task. Para añadir la background task debemos añadir un componente WinRT.

Añadir un componente Windows Runtime

Añadir un componente Windows Runtime

Una vez creado el componente WinRT renombraremos la clase a UpdateTask. La clase UpdateTask implementa la interfaz IBackgroundTask. Esta interfaz cuenta con un único método llamado Run. Este método sera al que el sistema llamará para iniciar la background task y es necesario en todas las tareas en segundo plano.

namespace UpdateTask
{
    public sealed class UpdateTask : IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {

        }
    }
}

NOTA:  La clase de la tarea en segundo plano debe ser una clase public y sealed.

La Task tendrá como objetivo notificar al usuario de una nueva versión. Por lo tanto, en el método Run vamos a lanzar una notificación Toast y vamos a actualizar el Tile de la aplicación.

Creamos un método para lanzar una notificación Toast:

/// <summary>
/// Muestra una notificación Toast para notificar al usuario de la nueva versión.
/// </summary>
private void ShowNotification()
{
     var toastnotifier = ToastNotificationManager.CreateToastNotifier();
     var toastDescriptor = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
     var txtNodes = toastDescriptor.GetElementsByTagName("text");

     txtNodes[0].AppendChild(toastDescriptor.CreateTextNode("Nueva versión!"));
     txtNodes[1].AppendChild(toastDescriptor.CreateTextNode(string.Format("Actualizada : {0}", DateTime.Now)));

     var toast = new ToastNotification(toastDescriptor);

     toastnotifier.Show(toast);
}

Utilizamos la clase PushNotificationChannelManager encargada de crear objetos que se utilizan para recuperar canales de notificaciones de inserción de Servicios de notificaciones de inserción de Windows (WNS). Utilizamos el método CreateToastNotifier que crea una nueva instancia de ToastNotification, que permite generar una notificación Toast para la aplicación.

Otro método actualizará el Tile de la aplicación:

/// <summary>
/// Actualiza el Tile de la aplicación notificando de la nueva versión.
///
/// Catálogo de plantillas de Tiles: http://msdn.microsoft.com/es-es/library/windows/apps/hh761491.aspx
/// </summary>
private void UpdateTileStatus()
{
     var tileContent = TileUpdateManager.GetTemplateContent(
                       TileTemplateType.TileSquare150x150Text01);

     var tileText = tileContent.SelectNodes("tile/visual/binding/text");

     tileText[0].InnerText = "Nueva versión!";
     tileText[1].InnerText = "Actualizada";
     tileText[2].InnerText = DateTime.Now.ToString();

     var notification = new TileNotification(tileContent);
     var updater = TileUpdateManager.CreateTileUpdaterForApplication();

     updater.Update(notification);
}

La clase TileUpdateManager crea objetos de tipo TileUpdater utilizados para actualizar el Tile de Aplicación. Esta clase también nos facilita el acceso al contenido XML de las plantillas de Tile para poder personalizar dicho contenido.

En el método Run de la Task ejecutaremos ambos métodos:

public void Run(IBackgroundTaskInstance taskInstance)
{
     ShowNotification();
     UpdateTileStatus();
}

Una vez terminada nuestra Task debemos añadir la referencia a la misma de nuestro proyecto Windows Phone. Clic derecho, opción “Add references”:

Añadimos la referencia a la background task

Añadimos la referencia a la background task

Tras añadir la referencia al componente WinRT debemos realizar algunos cambios en el archivo Package.appxmanifiest. Nos dirigimos a la pestaña “Capabilites”. Añadimos una nueva capacidad de tipo Update Task:

Añadimos la capacidad Update Task en el Package.appxmanifiest

Añadimos la capacidad Update Task en el Package.appxmanifiest

En las propiedades de la capacidad debemos definir la propiedad Entry Point, es decir, el nombre completo de la clase de nuestra background task incluido namespace:

Entry Point

Entry Point

Y todo listo!

NOTA: Para que nuestro ejemplo funcione en su totalidad antes de abandonar el archivo de manifiesto debemos activar la capacidad de notificaciones Toast en nuestra aplicación.

Probando el Update Task

Es hora de verificar que todo funciona correctamente. Tras lanzar nuestra aplicación al menos una vez, podemos simular una actualización de la aplicación modificando la versión de la misma en el archivo Package.appxmanifiest.

Actualizamos la versión de la aplicación

Actualizamos la versión de la aplicación

Tras ejecutar la aplicación:

El resultado

El resultado

Recibiremos una notificación Toast indicandonos la nueva versión además de haber sido actualizado el Tile de la aplicación.

Podéis descargar el ejemplo realizado a continuación:

Más información

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s