En este vídeo veremos cómo realizar transferencia de ficheros en Background para que un fichero se siga descargando en Background aunque la aplicación no esté ejecutándose. También veremos que capacidades de comunicación por sockets nos deja a nuestra disposición Windows Phone.
1. 19/09/2011
Nuevos servicios en
Background
Background Background
Notifications Transfers
Multitasking
Background Background
Agents Audio
Transferencia de archivos en Background Requisitos de la aplicación
Descargas archivos ejecutándose segundo plano Transferencias iniciadas por el usuario o consciente
Continúan aunque aplicación no esté ejecutándose primer de que se están ejecutando
plano
Posibilidad de mostrar transferencias en proceso
Posibilidad de encolar transferencias (subidas o descargas)
Posibilidad de cancelar transferencias activas o
APIs consulta estado transferencias e indicadores de
progreso
pendientes
Nombre de espacio:
Microsoft.Phone.BackgroundTransferService Posibilidad forzar transferencias sólo cuando haya
• BackgroundTransferService gestión transferencias existentes WiFi
• BackgroundTransferRequest una única petición
• GET HTTP descarga y POST HTTP subida Obligatorio
Recomendado
1
2. 19/09/2011
Restricciones del sistema de archivos Cabeceras reservadas
Transferencias requieren ruta archivo local BackgroundTransferRequest.Headers almacena
• Descargas ruta específica de almacenamiento caberas HTTP
• Subidas ruta en la que se encuentra el archivo a enviar
Cabeceras reservadas al SO
• Todas las rutas locales en almacenamiento aislado en If-Modified-Since
If-None-Match
directorio Transfers If-Range
Range
• Creado por el SO durante instalación
Unless-Modified-Since
• Puede albergar estructura de directorio adicional
Agregar alguna a la colección de cabeceras
• Iniciar transferencia fuera directorio Transfers NotSupportedException !!
Exception!!
Políticas de transferencia de archivos Políticas de transferencia de archivos
Transferencias iniciadas cuando se cumplan requisitos SO obliga a cumplir restricciones
BackgroundTransferRequest.TransferPreferences Máximo número total de transferencias concurrentes
2
(de todas las aplicaciones del dispositivo)
Máximo número total de transferencias encoladas
500
SO obliga a cumplir restricciones Límites
(de todas las aplicaciones del dispositivo)
Máximo número de cabeceras HTTP por petición 10
Máximo archivo subida 5MB Máximo tamaño de cabeceras HTTP 16K cada una
20 MB (Si se sobrepasa TransferPreferenc es cambia a
Máximo tamaño de descarga en conexión de datos
Máximo tamaño de descarga sobre WiFi sin
AllowBattery se precisa WiFi para la transferencia)
Servicio de transferencia segundo plano
100MB
Tamaños
alimentación externa No se ejecuta en redes
Máximo tamaño de descarga sobre WiFi con
alimentación externa y TransferPreferences = None Sin límite • 2G
o AllowCellular • EDGE
5 ( transferencias no eliminadas de la cola automáticamente
Máximo número de peticiones en cola (activas y
aplicaciones deben llamar al método
• GPRS Estándar
pendientes) / aplicación
Remove(backgroundTransferR equest) Requiere redes 3G o superiores
2
3. 19/09/2011
Mejores prácticas Mejores prácticas
Tras lanzar la aplicación Al agregar nuevas transferencias
o Recorrer cada transferencia en background mediante o Comprobar si se ha llegado al límite de 5 transferencias simultáneas
BackgroundTransferenceService.Request • Límite alcanzado alertar al usuario y esperar
cancelar alguna transferencia
guardar en almacenamiento aislado información de la nueva
o Registrar evento TransferStatusChanged en cada una
transferencia y lanzarla después
• Útil para responder a cambios de estado
o Llamar al método BackgroundTransferenceService.Add() en bloque
try catch Mostrar mensaje si excepción
o Registrar evento TransferProgressChanged en cada una
o Utilizar /Shared/Transfers como directorio raíz
• Útil para informar acerca del progreso de transferencias activas
• Especificar propiedad DownloadLocation en archivos de descarga
• Especificar propiedad UploadLocation en archivos de subida
o Comprobar si ha finalizado o cambiado el estado de cada una
o Especificar dirección del servidor remoto en la propiedad RequestUri
en la propiedad TransferStatus
escapar caracteres especiales con Uri.EscapeUriString
Mejores prácticas Mejores prácticas
Cuando una transferencia finaliza Interfaz de Usuario
o Transferencia iniciada por el usuario ej. mediante un botón
o Propiedad TransferStatus tendrá valor Completed o Transferencia iniciada por la app informar al usuario
o Vista del estado y progreso de todas las transferencias
o Comprobar en StatusCode si fue exitosa (200 ó 206) o Mecanismo para cancelar cualquiera o todas las transferencias
o Restringir transferencias a la existencia de alimentación externa y
o Comprobar TransferError si no se completó correctamente WiFi
o Ofrecer al usuario opción de permitir transferencias sobre redes de
o Llamar al método BackgroundTransferenceService.Remove() para datos y sin alimentación externa (TransferPreferences)
eliminarla de la cola (límite 5 transferencias) o Si la transferencia está en un estado de espera notificar al
usuario con un mensaje la razón, posibilidad de cancelar
3
4. 19/09/2011
Mejores prácticas Mejores prácticas
Otras En el servidor
o No modificar archivo destino del directorio /Shared/transfers hasta o Incluir en las cabeceras de respuesta Content-lenght
fin de transferencia
indica tamaño y progreso
o Propiedad Tag para almacenar datos personalizados asociados a
una transferencia
o Debe soportar peticiones Range soporte para
o Manejadores de evento TransferStatusChanged y pausar y resumir transferencias
TransferProgressChanged deben retornar rápido
o Acceso almacenamiento aislado en otro hijo o Probar funcionalidad del servidor desde una
aplicación distinta a la de transferencias
o TotalBytesToReceive tamaño del archivo
(navegador…)
Requisitos adicionales de certificación Transferencia de archivos en Background
Requisito Pruebas
1. Lanzar la applicación. Demo
Minimizar consumo batería con pantalla 2. Bloquear el dispositivo.
bloqueada 3. Verificar que la aplicacación detiene alizaciones del UI, timers
activos y demás actividades no críticas.
How to: Implement Background File Transfers for
1. Lanzar la applicación. Windows Phone
Batería superior a 6 2. Reproducir un archivo de música.
horas 3. Bloquear el dispositivo.
Apps que reproducen 4. Comprobar que el tiempo de batería es superior a 6 horas.
audio bajo pantalla 1. Lanzar la applicación.
bloqueada App en estado idle si no 2. Verificar que no se está reproduciéndo ningún archivo de música.
estaba reproduciendo 3. Bloquear el dispositivo.
música al bloquear 4. Comprobar que la aplicación no reproduce música y está en
estado idle.
1. Cargar el dispositivo al 100%.
Apps que no 2. Activar modo vuelo.
Batería superior a 120
reproducen audio bajo 3. Lanzar la applicación.
horas
pantalla bloqueada 4. Bloquear el dispositivo.
5. Comprobar que el tiempo de batería es superior a 120 horas.
4
5. 19/09/2011
Recursos
Centro de desarrollo de WP7 en MSDN
http://msdn.microsoft.com/es-es/windowsphone/default.aspx
AppHub
http://create.msdn.com/
Windows Phone Developer Blog
http://windowsteamblog.com/windows_phone/b/wpdev
MobileNUG
http://www.mobilenug.es
Forums
http://forums.create.msdn.com/forums/
5