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