Los contenidos de este tema han sido tomados de las siguientes referencias:
- http://www.uco.es/iscbd/iscbd/
- Entornos para el desarrollo de aplicaciones móviles. Revista vínculos vol. 9 Número 1
- FUOC. Fundació per a la Universitat Oberta de Catalunya
- http://arqmoviles.blogspot.com.es/
- http://fundamentosweb-aro.blogspot.com.es/2013/02/sistemas-operativos-moviles.html
1
Introducción
Actualmente, estamos inmersos en la que se denomina
revolución tecnológica de las comunicaciones inalámbricas, similar a
la que protagonizaron en su momento la electricidad, la televisión, o el
ordenador, que supusieron nuevos modelos de negocio.
Internet se ha beneficiado de esta tecnología, lo que se conoce
como Internet móvil, que permite que dispositivos móviles y
personas se conecten a la Red desde cualquier lugar y en
cualquier momento.
4
Redes de ordenadores
En una red de ordenadores, podemos distinguir cuatro elementos
importantes que intervienen en su definición:
1. El protocolo de comunicación define el lenguaje y el conjunto de reglas
que facilitan la comunicación entre el emisor y el receptor, con el objetivo
de que se puedan entender e intercambiar información. El más conocido y
más extendido entre los ordenadores es el TCP/IP que utiliza Internet.
2. La topología define cómo los nodos de comunicación están
interconectados entre sí. Las topologías de red más comunes son en bus,
estrella, anillo o punto a punto.
3. La seguridad es el elemento que permite garantizar la confidencialidad, la
autenticación y la integridad de los datos.
4. El medio de transmisión es el elemento que diferencia más claramente
las tecnologías de comunicación con hilos de las inalámbricas. Es el
medio por el que viaja la señal que transfiere los datos.
2. Tarjeta de memoria como elemento seguro: con esta solución, una tarjeta de
memoria (SD, MMC, MS, etc) incorpora un chip seguro con un microcontrolador y
memoria flash. Esta solución permite que terceras partes puedan suministrar tarjetas
precargadas con su aplicación.
3. Tarjeta SIM como elemento seguro: con esta arquitectura, la tarjeta SIM incorpora
la aplicación de pago, así como cualquier otra aplicación NFC. La aplicación puede
almacenarse en el propio SIM o como un componente adicional en el conector del
SIM.
NFC Tag Tipo 1: estas etiquetas están basada en las especificaciones ISO-14443A, con
capacidad de lectura y escritura. También es posible configurar el tag para que sea de sólo
lectura. La capacidad de memoria es de 96 bytes extensible a 2 Kbytes. La velocidad de
comunicación es de 106 Kbits/s.
NFC Tag Tipo 2: basadas en las especificaciones ISO-14443A, con capacidad de lectura y
escritura o sólo lectura. La capacidad de memoria es de 48 bytes, ampliable hasta 2 Kbytes.
La velocidad de lectura es de sólo 106 Kbits/s.
NFC Tag Tipo 3: basadas en un estándar japonés conocido también como FeliCa. Los tags
vienen preconfigurados de fábrica como de lectura y escritura o sólo de lectura. La capacidad
de memoria es variable siendo su límite teórico de 1 Mbyte. La velocidad de comunicación es
de 212 Kbits/s o 424 Kbits/s.
NFC Tag Tipo 4: tags completamente compatibles con el estándar ISO-14443A y B. Son
configurados desde fábrica como de lectura y escritura o sólo de lectura. La capacidad de
memoria es variable hasta 32 KBytes con una velocidad de comunicación de 424 Kbits/s.
HiperRLAN
Las redes WWAN móviles (MWWAN) son las que han vivido una
expansión más espectacular en los últimos años. Actualmente las
MWWAN son el sistema de comunicación inalámbrico más utilizado, ya
que es el que utilizan las operadoras de telefonía móvil y cuenta con más
de 5.000 millones de usuarios en todo el mundo.
33
Dispositivos Móviles
Una gran cantidad de dispositivos electrónicos se clasifican
actualmente como dispositivos móviles, desde teléfonos, tablets, hasta
dispositivos como lectores de RFID. Es complicado determinar
cuáles son las características de los dispositivos móviles.
Características comunes que tienen los dispositivos móviles:
• Son aparatos pequeños.
• La mayoría de estos aparatos se pueden transportar en el bolsillo
del propietario o en un pequeño bolso.
• Tienen capacidad de procesamiento.
• Tienen conexión permanente o intermitente a una red.
• Tienen memoria (RAM, tarjetas MicroSD, flash, etc.).
• Normalmente se asocian al uso individual de una persona, tanto en
posesión como en operación, la cual puede adaptarlos a su gusto.
• Tienen una alta capacidad de interacción mediante la pantalla o el
teclado.
Ejemplo de movilidad:
Un comercial de una empresa farmacéutica carga en su tablet, antes de salir de la
oficina, los datos de los clientes que tiene que visitar. Durante su visita, actualiza o
modifica la información, y una vez terminada su ruta, ya en la oficina o desde el lugar
visitado, actualiza los datos en la aplicación corporativa.
Los teléfonos móviles simples (al contrario que los smartphones) representaron el
punto de partida para llegar primero a los web-enabled phones y después a los que
hoy se conocen como smartphones. Como dispositivos, se componen de apenas
algunos componentes. Son los siguientes:
• un micrófono
• un altavoz
• una pantalla de cristal líquido o plasma
• un teclado
• una antena
• una batería
• una placa de circuitos
Ventajas: Desventajas:
muy extendido poca potencia de proceso
ligero y transportable. poca memoria
económico capacidades de visualización limitada
prestaciones de comunicación innatas interacción avanzada difícil
Las sensibles al calor son las más usadas, pero raramente se usan
en pantallas. Se aplican en otros componentes de los dispositivos
móviles, tales como los botones.
Esta tecnología solo funciona con objetos calientes, de modo que tienen
un serio problema: si se tienen los dedos fríos (como puede ocurrir en
invierno) y se tocan estos teléfonos, puede pasar que el dispositivo no
responda.
Sensor infrarojo
Tipos de Sensores:
CCD: Un sensor CCD esta constituido de fotositos que estan ordenados
en una matriz XY de filas y columnas. Cada fotosito esta constituido de
un fotodiodo y un sector adyacente de carga la cual está protegida de la
luz.
CMOS: La razon por la cual la mayor parte ( por no decir todos) de los
telefonos moviles actuales utilizan sensores CMOS es porque estos
ofrecen un menor consumo de energia, se habla de aproximadamente de
10 veces menos consumo que un sensor CCD.
Ventajas: Desventajas:
Gran cantidad de aplicaciones disponibles. Alto consumo de la batería
Mucha variedad en dispositivos con Android Sistema operativo menos intuitivo
Generalmente el hardware tiene mayor Gráficos de menor calidad
capacidad Las actualizaciones dependen del fabricante
Más asequible
Desventajas:
No hay muchas aplicaciones disponibles
Pocos desarrolladores tienen acceso de programación.
La cantidad de usuarios ha venido decayendo.
70
Tema 2. Diseño y desarrollo de
aplicaciones móviles. Diseño y desarrollo
de sistemas móviles en el ciclo de vida
1
Estamos perdiendo la carrera de relevos
• Equipos auto-organizados
• El producto avanza en una serie de “Sprints"
de dos semanas a un mes de duración
• Los requisitos son capturados como
elementos de una lista de “Product Backlog"
• No hay prácticas de ingeniería prescritas
• Utiliza normas generativas para crear un
entorno ágil para la entrega de proyectos
• Uno de los “procesos ágiles”
Ingeniería de Sistemas Móviles
El Manifesto Ágil – una declaración de valores
Individuos
Individuos ee sobre
Procesos
Procesos yy
interacciones
interacciones herramientas
herramientas
Software
Software que
que sobre
Documentación
Documentación
funciona
funciona exhaustiva
exhaustiva
Colaboración
Colaboración sobre
Negociación
Negociación de
de
con
con el
el cliente
cliente contratos
contratos
Responder
Responder sobre
Seguimiento
Seguimiento
ante
ante el
el cambio
cambio de
de un
un plan
plan
Fuente: www.agilemanifesto.org
Ingeniería de Sistemas Móviles
Nivel de ruido de un proyecto
Lejos de
Acuerdo
Anarquía
Complejo
Requisitos
Co
m
pl
ic a Fuente: Strategic Management and
do Organizational Dynamics by Ralph
Stacey in Agile Software Development
with Scrum by Ken Schwaber and Mike
Cerca de Simple Beedle.
Acuerdo
Tecnología
Cerca de
Certeza
Lejos de
Certeza
Ingeniería de Sistemas Móviles
Scrum
24 horas
Sprint
2-4 semanas
Objetivo del Sprint
Sprint
Incremento del producto
Return Backlog
potencialmente entregable
Gift wrap
Cancel
Product
Backlog
Imagen disponible en
www.mountaingoatsoftware.com/scrum
Ingeniería de Sistemas Móviles
Sprints
Cambios
• Típicamente de 5 a 9 personas
• Multi-funcional:
• Programadores, testers, analistas, diseñadores, etc.
• Los miembros deben ser full-time
• Puede haber excepciones (Ej.: Infraestructura, SCM, etc.)
• Los equipos son auto-organizativos
• Idealmente, no existen títulos pero a veces se utilizan de
acuerdo a la organización
• Parámetros
• Diaria
• Dura 15 minutos
• Parados
• No para la solución de problemas
• Todo el mundo está invitado
• Sólo los miembros del equipo, ScrumMaster y Product
Owner, pueden hablar
• Ayuda a evitar otras reuniones innecesarias
2
¿Qué vas a hacer hoy?
3
¿Hay obstáculos en
en tu
tu camino?
camino?
• No es dar un status report al Scrum Master
• Se trata de compromisos delante de pares
Ingeniería de Sistemas Móviles
Sprint review
Comenzar a hacer
Dejar de hacer
Esto es sólo una
de las muchas
maneras de Continuar haciendo
hacer una
retrospectiva.
•Los requisitos
•Una lista de todos los
trabajos deseados en el
proyecto
•Idealmente cada tema tiene
valor para el usuarios o el
cliente
•Priorizada por el Product
Owner
Este
Este es
es el
el
•Repriorizada al comienzo
de cada Sprint
product
product backlog
backlog
Ingeniería de Sistemas Móviles
Ejemplo de Product Backlog
Ciencias Biológicas
Funciones de apoyo técnico
necesarios para estudios de
Aplicación con B.Datos
genética de poblaciones.
Hacer que la aplicación se
ejecute en SQL Server, además
de Oracle. Servicios Financieros
Tareas
Tareas LL M
M M
M JJ V
V
Codificar UI 8 4 8
Codificar negocio 16 12 10 4
Testear negocio 8 16 16 11 8
Escribir ayuda online 12
Escribir la clase foo 8 8 8 8 8
Agregar error logging 8 4
50
40
30
Hours
20
10
0
Mon Tue Wed Thu Fri
24 hours
Feedback
Potentially Shippable
Product Increment
Product Backlog
As prioritized by Product Owner
2 Recibir un correo Comunicación con Isabel de la Cruz Cambiar la fecha 950 0,5
cuando el pedido cliente envío del pedido,
se vaya a retrasar comprobar que se
recibe un correo en el
mail asociado al
cliente
Todos los miembros del equipo tienen que acordar el significado de la palabra
“terminado” – es decir, código “terminado” puede querer decir programado,
revisado, realizadas las pruebas unitarias, actualizado el manual de usuario, y
subido al servidor de preproducción. Si alguna de estas etapas falta, el
requisito no está finalizado, aunque el código esté programado
En los primeros intentos con Scrum, puede ser aconsejable añadir un campo
en el Product Backlog con la definición de “terminado” para cada historia,
para que no haya problemas. O puede ser simplemente “cuando el encargado
de pruebas del equipo diga que está terminado”
Recordemos que en Scrum una historia que esté terminada al 90% no está. O
es un entregable completamente funcional, o no contamos con él
A
B
C Sprint 1
D
No hay cambios DURANTE el Sprint
E
Product Backlog F Una vez cerrados los requisitos de un Sprint, sólo
los miembros del equipo pueden cambiarlos.
G Cualquier modificación o añadido deberá dejarse
para Sprints siguientes
H
…
Algunos valores:
0 = esta historia ya está hecha, o son sólo unos minutos de
trabajo
? = ni idea. Si el uso de esta carta es habitual, es necesario
trabajar más en la comprensión de las historias
Café = ¡me vendría bien una pausa!
Dos posibilidades:
Las estimaciones de todo el equipo son similares:
bingo, es difícil que todos estén muy equivocados. Se
puede escoger la media como estimación final.
Existen estimaciones muy discrepantes: digamos
que un miembro del equipo dice que 2, y otro opina
que 13. Lo más probable es que hayan entendido
requisitos distintos en la historia, o que uno de ellos se
haya dado cuenta de una complicación que los demás
no han visto. Se discute brevemente hasta aclarar la
situación, y se vota de nuevo, hasta llegar a un
consenso.
Si ya has realizado varios Sprints, ya sabes cuál es la media de trabajo que eres
capaz de absorber, cuántos puntos de historia terminas normalmente. Por
ejemplo, una velocidad de 20 significa que normalmente en cada Sprint el
equipo termina historias cuyas estimaciones ideales suman en total 20 puntos –
independientemente de que el Sprint fueran 4 semanas de 3 personas
Entonces ya sabemos:
Quién estima = todos
Cómo estimamos = con cartas
Qué significa “terminado” en cada tarea
Qué significa la “velocidad” del equipo
15 ALTA DE PEDIDO
Esta división en tareas puede variar
Cómo se prueba Prioridad
bastante a lo largo de la vida del Sprint,
Elegir cliente, seleccionar dos
así que en ocasiones no se detalla en productos del catálogo, seleccionar
20
ningún Excel ni otro tipo de soporte. Se modo de pago. Comprobar la creación
del pedido y asignación número pedido.
cuelga en el panel de la pared (ver a
continuación), y está disponible allí para Solicitante Estimación
cualquiera que desee consultarlo Yolanda Córdoba – Dpto. Ventas
Categoría 5
Diferencia entre historia y tarea: las Módulo Ventas
– Cualquier otra discusión que pueda surgir, se saca del daily scrum
y se comenta en reunión aparte
– Qué voy a hacer hoy: cada uno elige voluntariamente una o varias tareas a
las que va a dedicar el día, con el foco siempre de tratar de aportar lo más
posible al equipo. Es un compromiso delante de tus compañeros.
Solicitante Estimación
Yolanda Córdoba – Dpto. Ventas
Categoría 5
Módulo Ventas
Mostrar Generación
productos número Pruebs y
catálogo pedido debug
Calcular errores
importe
pedido +
impuestos
15
16 INFORME
ALTA DEPEDIDOS
PEDIDO
Cómo se prueba Prioridad
Elegir
Elegir
informe,
cliente,
filtrar
seleccionar
por criterios,
dos
productos
obtener listado
del catálogo, seleccionar
20
30
modo de pago. Comprobar la creación
del pedido y asignación número pedido. Imprevistos Si sobra tiempo…
Solicitante Estimaci ón
Yolanda Martínez
Rodrigo Córdoba
ó – Dpto. Ventas 15
17 MODIFICACION
ALTA DE PEDIDO
DE PEDIDO
Categoría 5
8 C ó mo se prueba Prioridad
Módulo Ventas Elegir un
cliente,
pedido,
seleccionar
cambiar datos
dos
De productos,
productos del cat ácomprobar que sale
logo, seleccionar
modocorrectamente
de pago. Comprobar la creaci ón 20
60
del pedido y asignaci ón n ú mero pedido.
Mostrar
Filtrado Calcular Solicitante Estimaci ón
Generaci ó n
campos
productos importe
Listado+pdf nListado
ú mero html Yolanda C órdoba – Dpto. Ventas
cat á logo pedido
pedido
impuestos
Categor ía 5
2
Mó dulo Ventas
Solicitante Estimación
Yolanda Córdoba – Dpto. Ventas
Categoría 5
Módulo Ventas
Mostrar Generación
productos
Calcular número
catálogo
importe pedido Pruebas y
pedido + debug
impuestos errores
15
16 INFORME
ALTA DEPEDIDOS
PEDIDO
Cómo se prueba Prioridad
Elegir
Elegir
informe,
cliente,
filtrar
seleccionar
por criterios,
dos
productos
obtener listado
del catálogo, seleccionar
20
30
modo de pago. Comprobar la creación
del pedido y asignación número pedido. Imprevistos Si sobra tiempo…
Solicitante Estimaci ón
Yolanda Martínez
Rodrigo Córdoba
ó – Dpto. Ventas 15
17 MODIFICACION
ALTA DE PEDIDO
DE PEDIDO
Categoría 5
8 C ó mo se prueba Prioridad
Módulo Ventas Elegir un
cliente,
pedido,
seleccionar
cambiar datos
dos
De productos,
productos del cat ácomprobar que sale
logo, seleccionar
modocorrectamente
de pago. Comprobar la creaci ón 20
60
del pedido y asignaci ón n ú mero pedido.
Filtrado
campos Calcular Solicitante
Generaci ó n Estimaci ón
importe Listado
Listado +pdf nú mero html Yolanda C órdoba – Dpto. Ventas
pedido
pedido
impuestos
Categor ía 5
2
Mó dulo Ventas
A medida que el equipo emprende las tareas, se van moviendo hacia la derecha
pedido +
Elegir cliente, seleccionar dos
impuestos
productos del catálogo, seleccionar
modo de pago. Comprobar la creación 20 Generación
número
del pedido y asignación número pedido. pedido
Solicitante Estimación
Yolanda Córdoba – Dpto. Ventas
Categoría 5
Módulo Ventas
Pruebas y
debug
errores
Filtrado
15
16 INFORME
ALTA DEPEDIDOS
PEDIDO campos
Solicitante Estimación
Yolanda Córdoba – Dpto. Ventas
Categoría 5
Módulo Ventas
Mostrar Generación
productos
Calcular número
catálogo
importe pedido Pruebas y
pedido + debug
impuestos errores
15
16 INFORME
ALTA DEPEDIDOS
PEDIDO
Cómo se prueba Prioridad Si a lo largo del Sprint se
realizan tareas no
Elegir
Elegir
informe,
cliente,
filtrar
seleccionar
por criterios,
dos
productos
obtener listado
del catálogo, seleccionar
20
30
modo de pago. Comprobar la creación
del pedido y asignación número pedido.
previstas inicialmente, se Imprevistos Si sobra tiempo…
Solicitante
Yolanda Martínez
Rodrigo Córdoba
ó – Dpto. Ventas
Estimaci ón
anotan aquí 15
17 MODIFICACION
ALTA DE PEDIDO
DE PEDIDO
Categoría 5
8 C ó mo se prueba Prioridad
Listado html
Módulo Ventas Elegir un
cliente,
pedido,
seleccionar
cambiar datos
dos
De productos,
productos del cat ácomprobar que sale
logo, seleccionar
modocorrectamente
de pago. Comprobar la creaci ón 20
60
del pedido y asignaci ón n ú mero pedido.
Filtrado
campos Calcular Solicitante
Generaci ó n Estimaci ón
importe Listado
Listado +pdf nú mero html Yolanda C órdoba – Dpto. Ventas
pedido
pedido
impuestos
Categor ía 5
2
Mó dulo Ventas
Listado html
20
10
En principio pensamos
terminar 50 puntos de
1 2 3 4 5 6 Días del Sprint
historia en 6 días
– Qué haré hoy: elige las tareas del día (puede escribir su nombre en los
post-it), y las mueve hacia la derecha si es necesario
A medida que se avanza en el trabajo, las estimaciones del trabajo que queda en
cada tarea decrecen en lugar de crecer (¡esperemos!) – cuando todos han
comentado sus tareas del día anterior, se suman las estimaciones del trabajo que
queda y se actualiza el burn-down
– Los miembros del equipo están mucho más comprometidos con los
resultados: si yo mismo dije ayer que el equipo podía confiar en que
terminara la tarea X, haré lo posible por no tener que desdecirme
– Existe mayor espíritu de cooperación: si un miembro del equipo se
enfrenta a un problema, el resto voluntariamente hará lo posible por
ayudar. No existen éxitos o fracasos individuales, es todo el equipo el
que triunfa o falla
– Hay que acostumbrarse a este nuevo enfoque: resulta mucho más
cómodo que mi jefe me diga qué hacer, que ser yo mismo el que tenga
que decidir dónde puedo aportar más
Si va todo bien:
– Los stakeholders tienen una visión real del grado de
avance del producto, comprueban de primera mano la
funcionalidad existente
– Pueden ajustar sus prioridades e historias para el
siguiente sprint, a partir de lo visto en la demo
– Es una inyección de moral para el equipo, que puede
demostrar el resultado de su (duro) trabajo y “palpar”
el progreso
– Qué nos gustaría empezar a hacer (que el Product Owner esté accesible
en su móvil)
– Que nos gustaría dejar de hacer (agrupar todos los bugs de Sprints
anteriores en una sola historia, los bugs más críticos deberían ser una
historia en sí mismos)
– Que nos gustaría continuar haciendo (traer bizcochos a los daily scrums)
Mejoró comunicación con Salimos tarde 4 días
Nos gustó… Product Owner No nos
gustó…
Nos Invitar a Juan Cervera a Alfredo por introducir la Se merece
gustaría… la demo del Sprint nueva herramienta de un regalo…
testeo
1
Ecosistema de
aplicaciones móviles.
2
Ecosistema de aplicaciones móviles.
Por ecosistema móvil nos referimos al conjunto de actores necesarios para poder
tener los dispositivos móviles y a las aplicaciones para los mismos. En concreto, en el
ecosistema móvil se incluyen las operadoras de telecomunicaciones, los fabricantes de
hardware y todos los elementos de software que intervienen en la ejecución de la
aplicación.
Derivación selectiva. Las modificaciones necesarias están localizadas en unos elementos concretos
(ya sean clases del código, ficheros de marcado, estilos u otros recursos), y existe un sistema o
herramienta que genera las diferentes versiones mediante la captura y el empaquetado de estos
elementos para cada escenario.
Derivación usando meta programación. Se trata de programar algo que se va a ejecutar en varios
escenarios. Para conseguir distintos comportamientos hay varias opciones:
Generación automática. El software se debe escribir de una manera específica y solo una vez. A
posteriori, existe un proceso que genera automáticamente las aplicaciones correctas para cada
escenario, normalmente transformando nuestra aplicación al código particular de cada escenario. En
este punto existen más variantes.
Todos en uno.
La aplicación es capaz de conocer la información necesaria para poder
adaptarse a todos los dispositivos. Por ejemplo, para evitar el problema de
diferentes pantallas, se genera una aplicación con ventanas autoescalables.
Son los dispositivos los que se adaptan; es decir, el software se escribe de
manera abstracta y, cuando se llega al problema de la fragmentación, se pasa
el testigo al dispositivo que sabe cómo tratarlo. Un ejemplo puede ser el
acceso a los contactos o a las llamadas de teléfonos mediante API abstractas.
18
Tipos de aplicaciones
Aplicaciones básicas
La aplicaciones básicas son aplicaciones de interacción básica con el
dispositivo que únicamente envían o reciben información puntual del
usuario.
Ventajas:
simplicidad
Facilidad de venta
gran cantidad de usuarios potenciales
Desventajas:
poca o casi nula capacidad de procesamiento del contexto
muy baja complejidad de las aplicaciones realizadas
limitaciones impuestas por la tecnología sobre los diseños de las
aplicaciones (ciento sesenta caracteres de texto)
Desventajas:
Es difícil soportar múltiples dispositivos, así como conseguir la misma experiencia
de usuario con varios tipos de navegadores.
Ofrecen grandes limitaciones a la hora de realizar programas, tanto de proceso
como de acceso a la información del dispositivo y del usuario. Por tanto, es difícil
conseguir aplicaciones contextualizadas.
En muchos casos está pensado para ser visualizado con conexiones lentas, pero
dichas conexiones pueden ser demasiado lentas y provocar una experiencia de usuario
deficiente.
En la actualidad, la mayoría de los dispositivos nuevos están incorporando estándares
más nuevos (como HTML 5), por lo que no se está trabajando en mejorar estos
estándares.
El número de dispositivos que solo pueden ver una página web con este tipo de
lenguajes de marcas está disminuyendo.
Ventajas:
Todos los puntos a favor de las aplicaciones web móviles.
Se pueden considerar, en lo que respecta a la instalación y la distribución,
como aplicaciones nativas.
Desventajas:
La mayoría de los inconvenientes de las aplicaciones web
móviles, a excepción de la instalación en el cliente.
La experiencia del usuario es, en ocasiones, contradictoria, pues
a pesar de tratarse de una aplicación nativa, requiere de conexión
a Internet para poder trabajar y funciona según los tiempos de
respuesta del navegador.
Ejemplo:Aplicaciones de acceso a información confidencial, como son las entidades
financieras "en línea", que distribuyen la aplicación, pero por su naturaleza no es
recomendable que haya datos en el dispositivo físico.
26
Estrategias de desarrollo de AM. Desarrollos web
Desarrollos web
Todas las aplicaciones que están basadas en lenguajes de marcas. Quedan excluidas
las aplicaciones que requieren de un preproceso para poder ser distribuidas.
Se incluyen además aplicaciones web basadas en aplicaciones propietarias, como, por
ejemplo, Flash y Flash lite. Estas aplicaciones tienen el mismo modelo de desarrollo.
Una vez que sabemos el dispositivo, tenemos que conocer sus capacidades.
Wacapps: Son aplicaciones escritas en HTML 5 con soporte para la distribución por
parte de las operadoras.
Flash: Son aplicaciones que corren sobre un player propietario. Si existe el player
correspondiente, no necesitan ser portadas. Se escriben de igual manera que las
aplicaciones de sobremesa y tienen las mismas restricciones.
Java ME: Son aplicaciones escritas en Java, con todas las peculiaridades de los
perfiles J2ME, y se ejecutan mediante una máquina virtual, con sus
correspondientes restricciones. Actualmente están en casi el ochenta porciento de
los dispositivos móviles del mercado.
Unity3D: Entorno para desarrollar juegos nativos o web para cada plataforma, como
Play Station, Wii, PC, Mac, etc. También da soporte para las Android e Iphone.
Solución: Tener una página de llegada con la información clara de la última información de
la aplicación y las acciones más importantes.
Se recomienda:
Usarlo solo para las acciones más obvias e
importantes
Usarlo cuando el objeto no tenga una vista
especialmente diseñada para él. En ese caso,
hay que ir a esa vista y mostrar allí la
información.
No usar en contextos donde se soporten
múltiples selecciones.
Solución: En lugar de esperar a que la lista se cargue, se pueden mostrar los datos
relevantes y cargar la lista inmediatamente. Los datos que faltan se pueden cargar cuando
el usuario lo pida, o bien cuando la aplicación prevea que va a ser así (por ejemplo,
cuando se desplace hacía el final de la lista).
Mensajes de alerta
Se recomienda:
Usarlo solo para mensajes importantes y necesarios. Este tipo de mensajes son
muy invasivos, y el usuario, en lugar de sentirse agradecido por recibirlos, puede
acabar ignorándolos.
Realizar alguna acción cuando sea necesario; mostrar una de las opciones como
atajo para dicha acción. Por ejemplo, si hay un problema de espacio en el disco,
una de las acciones irá al gestor de aplicaciones instaladas para eliminar las que
no necesitemos.
1.- Modelo
Es la capa encargada de los datos, es decir, la que se encarga de hacer peticiones a
las bases de datos para enviar o recibir información. Estas bases de datos pueden
estar alojadas de forma local en nuestra app o de forma remota en un servidor
externo.
2.- Vista
Se trata del código que nos permitirá presentar los datos que el modelo nos
proporciona, como ejemplo podríamos decir que en una aplicación es el código HTML
que nos permite mostrar la salida de los datos procesados.
3.- Controlador
Es la capa que sirve de enlace entre la vista y el modelo. Envía comandos al modelo
para actualizar su estado, y a la vista correspondiente para cambiar su presentación.
1- NodeJs (https://nodejs.org/en/)
$ sudo apt-get install nodejs
$ sudo apt-get install npm
2- IONIC
$ sudo npm install -g cordova ionic
3- Otras dependencias:
Comando genérico:
$ ionic platform add <nombre-de-la-plataforma>
1- Desde un navegador:
$ ionic serve
Podemos añadir en ambos casos la opción --
2- Desde un emulador consolelogs or -c para ver en el terminal la información
que imprime por consola la aplicación.
$ ionic emulate <PLATFORM>
$ ionic emulate android Si no queremos ejecutar el proyecto y solamente
queremos compilarlo y generar el código destino de la
plataforma podemos usar la opción build indicando
3- Desde un dispositivo real también la plataforma de compilación:
Estructura de un proyecto
hooks/ - Esta carpeta se utiliza para añadir scripts que se ejecutarán cuando se produzcan determinados eventos, como por ejemplo
antes o después, de la compilación, etc. En la propia carpeta se incluye un fichero con instrucciones para su utilización.
platforms/ - Contiene el código específico de las plataformas móviles para las cuales se va a compilar, como por ejemplo Android,
iOS, etc. El código de esta carpeta es generado y no se ha de modificar manualmente.
plugins/ - Contiene los plugins o módulos instalados para nuestra aplicación, los cuales se utilizan para añadir funcionalidad como el
acceso a las características nativas del móvil.
resources/ - Recursos específicos de las plataformas. En esta carpeta podremos colocar aquellos assets que sean únicos o
dependientes de una plataforma en concreto.
scss/ - Código SCSS que será compilado a la carpeta www/css/
www/ - Contiene el código fuente principal de nuestra aplicación web: HTML, CSS, JavaScript, imágenes, etc. Esta carpeta es donde
tendremos que desarrollar la aplicación web de forma centralizada y después utilizarla para la compilación para las distintas
plataformas.
css/ - Aquí colocaremos todas las hojas de estilo que se usen en la aplicación.
img/ - En esta carpeta almacenaremos las imágenes de nuestro proyecto.
js/ - Contendrá todo el código JavaScript de la aplicación.
lib/ - Aquí guardaremos todas las librerías que se usen en nuestro código. Por defecto ya viene incluido todo el código de la librería
Ionic (Javascipts, CSS, etc.) para que lo podamos cargar desde nuestro proyecto.
templates/ - Esta carpeta viene preparada para almacenar las plantillas o vistas de la aplicación (en algunas versiones no se crea
por defecto).
index.html - Este es el fichero principal que se abrirá al cargar la aplicación. Aquí tendremos que cargar todo lo necesario y mostrar
el contenido de la primera pantalla.
Primero carga la hoja de estilo de Ionic, la cual aplicará los estilos visuales a los
componentes
se incluye por defecto vacía para que escribamos en ella nuestros estilos CSS personalizados
API JavaScript de
Cordova.
En Ionic, la forma de incluir componentes es mediante el uso de clases CSS sobre etiquetas HTML o
mediante el uso de directivas de AngularJS (permiten definir bloques de código HTML con estilos y
funcionalidad asociada). En este caso se utilizan las directivas ion-pane, ion-header-bar y ion-content.
El punto de inicio de una aplicación Ionic es el fichero index.html, como mínimo debe
contener:
Funcionamiento:
Para crear un enlace que nos lleve a un estado indicado en la configuración simplemente
tenemos que usar el atributo ui-sref con el nombre del estado deseado.
Cuidado: Si ponemos un enlace a una dirección que no existe o a un state que no existe
no mostrará un error. Al pulsar intentará cambiar de pantalla pero volverá a mostrarse la
misma donde estaba.
<ion-view title="About">
<ion-content>
Mi nombre es {{user.name}}.
</ion-content>
</ion-view>
Los parámetros que recibe la función del controlador serán inyectados por Angular en la
propia llamada. Podemos usar estos parámetros para cargar servicios o clases que
necesitemos.
En este ejemplo se inyecta la variable $scope que permite pasar datos a la vista, también
se inyecta $stateParams que sirve para recuperar los parámetros de llamada a la ruta o
pantalla actual, y por último se carga superService que es un servicio que se ha creado
para acceder los datos del usuario.
El método getUser() del servicio superService devolverá un
objeto con el siguiente formato:
var user = {
name: "Juan"
}
<ion-view title="About">
<ion-content> Al llamar a esta página en primer lugar se ejecutará el controlador
Mi nombre es Juan. asociado, el cual asignará al $scope la variable user con los datos del
</ion-content> usuario. A continuación se procesará la plantilla, la cual accederá a la
</ion-view> variable user.name para obtener el nombre del usuario y sustituirlo.
Por ejemplo, si se define en la configuración una ruta para mostrar la vista detalle de un
usuario de esta forma:
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('userDetail', {
url: '/user/:userId'
});
})
El parámetro userId que recibe esta ruta lo podríamos recoger en el controlador de la forma:
.controller('miSuperPaginaCtrl', function($scope, $stateParams, superService)
{
var userId = $stateParams.userId;
// Usamos userId para obtener los datos del usuario
$scope.user = superService.getUser( userId );
})
!!!CUIDADO!!!
El nombre de variable debe ser el mismo que esté definido, de otra forma obtendríamos el
valor undefined.
Más información se puede encontrar en:
https://docs.angularjs.org/guide/controller
http://mcgivery.com/controllers-ionicangular/
Las vistas contienen la descripción de la parte gráfica de una pantalla (código HTML,
CSS, directivas o componentes de Ionic, etc.). Se refieren al concepto de "templates"
según la librería Angular.
Todas las vistas se guardarán dentro de la carpeta "templates/" en diferentes ficheros
con la extensión .html.
<div ng-show="!autores.length">
La lista está vacía
</div>
El valor pasado a ng-if/ng-show puede ser una variable, expresión o una función, por ejemplo:
<div ng-show="mostrarAviso()">
Aviso de ejemplo!
</div>
más información:
https://docs.angularjs.org/guide/templates
Y en el controlador podríamos añadir dicho método al $scope simplemente haciendo:
https://docs.angularjs.org/api/ng/directive
$scope.mostrarAviso = function(){ http://mcgivery.com/creating-views-with-ionic/
return false;
}
La capa de datos en una aplicación Ionic o Angular proporciona los datos desde un
almacenamiento local o externo. Para ello se utilizan unas clases conocidas como
Servicios o Factories.
Los servicios siempre tienen que devolver un objeto (ya que al inyectarlos se les llamará
con new).
Factories son más versátiles y podrán devolver lo que queramos ya que simplemente se
ejecutará la función que lo define.
El controlador solicita los datos a la capa de datos para prepararlos y pasárselos a la
vista. La capa de datos definirá una serie de métodos para el acceso a los datos.
En el ejemplo anterior los datos estaban guardados en una variable, pero lo más común es que provengan de un
servicio remoto o desde una base de datos. Si el servicio tarda en devolver los resultados hay que trabajar de
forma asíncrona o la aplicación se bloquea.
Al realizar una petición asíncrona la función del servicio no devuelve el valor directamente, sino que usará la
función. Por ejemplo, para hacer una consulta HTTP a una API externa sería:
.factory('superService', function($http) {
return {
getUser: function() {
return $http.get("url-de-consulta").then(function(response) {
//...
return response;
});
},
} Dentro de la función then podemos procesar los datos obtenidos y después devolver la respuesta.
}) Para usar este servicio desde un controlador lo realizaremos como en el ejemplo anterior: solicitamos
que el servicio se inyecte en los parámetros, llamamos al método de forma normal
awesomeService.getUser() pero la respuesta la tenemos que procesar con la función then. Esta
función se queda esperando a recibir la respuesta y una vez obtenida se ejecutará la función
asignada como primer parámetro:
.controller('MiSuperControladorCtrl', function($scope,
superService) {
awesomeService.getUser().then(function(response){
$scope.user = response;
});
}) Se puede asignar un segundo parámetro a la
función then (otra función callback) que se llamará
más información en:
https://docs.angularjs.org/api/ng/service/$q cuando la petición al servicio o la respuesta fallen.
http://mcgivery.com/ionic-using-factories-and-web-services-for-dynamic-data/
Las directivas son marcadores sobre los elementos del DOM (como los atributos, los nombres de elementos o
etiquetas, o las clases CSS) que indican al compilador HTML de Angular ($compile) que asigne un determinado
comportamiento a dicho elemento del DOM o incluso que lo transforme por un bloque completo de contenido.
Las directivas permiten transformar el aspecto y comportamiento del código HTML por otro que definamos
nosotros. En Ionic, todas las etiquetas que empiezan con ion- son directivas de Angular que tienen un
comportamiento y un aspecto asociado. Por ejemplo <ion-list> procesa mediante una directiva de Angular y genera
el código y comportamiento correspondiente a un listado:
IonicModule.directive('ionList', [ '$timeout',
function($timeout) {
return {
restrict: 'E',
require: ['ionList', '^?$ionicScroll'],
controller: '$ionicList',
compile: function($element, $attr) {
//... etc ...
}
}
} La línea restrict: 'E' indica si la directiva se refiere a un atributo, a un elemento o una clase
]); CSS.
<ion-nav-bar class="bar-positive">
<ion-nav-back-button class="button-clear">
<i class="ion-chevron-left padding-left"></i>
</ion-nav-back-button>
</ion-nav-bar>
<ion-nav-view></ion-nav-view>
</body>
</html>
angular.module('starter', ['ionic'])
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', {
url: '',
templateUrl: 'templates/home.html',
controller: 'homeCtrl'
})
.state('about', {
url: '/about',
templateUrl: 'templates/about.html',
controller: 'aboutCtrl'
});
En la carpeta templates se ubican las plantillas necesarias. En este caso las plantillas
home.html y about.html:
<ion-view title="Inicio">
<ion-content> home.html
Aplicación de ejemplo.
<a ui-sref="about">Información
sobre el autor</a>
</ion-content>
</ion-view>
<ion-view title="Autor">
<ion-content>
El autor de esta aplicación es
{{author.name}}.
about.html </ion-content>
</ion-view>
Servicio aboutService
.factory('aboutService', function() {
return {
getAuthor: function() {
var author = { name: "Juan" };
return author;
},
}
})
Probar la aplicación:
$ionic serve
$ ionic emulate
$ ionic run
Instalar ngCordova
Para instalar:
<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>
Para usarlo hay que inyectarlo en el módulo como una dependencia de Angular, por
ejemplo:
angular.module('myApp', ['ngCordova'])
Uso
Añadir un plugin:
Para eliminar usamos plugin remove con el nombre del plugin a eliminar. Este nombre
puede no ser el mismo que el que usamos para instalar, así que lo tenemos que consultar
usando: cordova plugin list.
Puede ocurrir que después de instalar un plugin (ej. sqlite) no se instala todo lo necesario
en la plataforma. En ese caso se debe hacer:
Ejemplo:
Para usar el plugin para trabajar con SQLite:
$ ionic plugin add https://github.com/litehelpers/Cordova-sqlite-storage.git
$scope.execute = function() {
var query = "INSERT INTO test_table (data, data_num) VALUES (?,?)";
$cordovaSQLite.execute(db, query, ["test", 100]).then(function(res) {
console.log("insertId: " + res.insertId);
}, function (err) {
console.error(err);
});
Más información en:
}; http://ngcordova.com/docs/plugins/sqlite/
});
Antes de compilar la versión final, revisar los plugins que hemos utilizado durante el
desarrollo. Por ejemplo, por defecto viene incluido el plugin para la mostrar el texto de
depuración por consola, se debe quitar:
Para generar la versión release para Android (o cualquier otra plataforma) se debe usar el
siguiente comando:
Documentación
Iconos: http://ionicons.com/
Código: http://codecanyon.net/category/mobile/native-web
Previsualización de las Apps: http://view.ionic.io
ngCordova - Versión de Cordova para Angular: http://ngcordova.com
Ionic creator - Crea pantallas básicas de Ionic visualmente: http://creator.ionic.io
Ejemplos de apps hechas con Ionic: http://showcase.ionicframework.com/
Libro sobre Ionic: http://manning.com/wilken/?a_aid=ionicinactionben&a_bid=1f0a0e1d
Las aplicaciones resultantes son híbridas, es decir que no son realmente aplicaciones
nativas al dispositivo (ya que el renderizado se realiza mediante vistas web y no con
interfaces gráficas específicas de cada sistema),
Las aplicaciones PhoneGap no suelen hablar directamente con una base de datos.
Arquitectura
La vista web utilizada por PhoneGap es la misma vista web utilizada por el sistema
operativo nativo.
- PhoneGap proporciona una API que nos permite acceder a las funcionalidades
nativas de los dispositivos móviles utilizando Javascript. Así, podemos desarrollar toda
la lógica de nuestra aplicación en Javascript y utilizar la API de PhoneGap para
acceder a las funcionalidades nativas del dispositivo.
Las aplicaciones PhoneGap son desarrolladas con HTML, CSS y Javascript, sin
embargo, el producto final de una aplicación PhoneGap es un archivo binario (IPA,
APK, XAP…) listo para ser distribuido en los correspondientes marketplaces
Para aplicaciones iOS se genera un archivo IPA (iOS Application Archive), para
Android se genera in archivo APK (Android Package), para Windows Phone se genera
un archivo XAP (Application Package), etc…Estos formatos son los mismo utilizados
por las aplicaciones “nativas” y se pueden distribuir a traves de los canales
correspondientes (iTunes Store, Android Market, Amazon Market, BlackBerry App
World, Windows Phone Marketplace, etc…)
El servidor suele ser un servidor web (Apache, IIS, nginx, etc..) que sirve una
aplicación escrita en un lenguaje de servidor como Java, PHP, Ruby, Node.js, etc…
PhoneGap es agnóstico en cuanto a tecnología backend y puede trabajar con
cualquier aplicacion en el servidor que utilice protocolos web estándares. La aplicación
en el servidor implementa la lógica de negocio y los cálculos, y generalmente se
encarga de leer/escribir en la base de datos.
Funcionalidad nativa
http://developer.android.com/sdk/
Google nos propone descargar Android Studio como
. entorno de desarrollo, pero se puede instalar
únicamente las librerías SDK para compilar, usando la
compilación en consola de Phonegap (CLI).
$ gedit .bashrc
export ANDROID_HOME="/home/USER/android-sdk-linux/tools"
export ANDROID_PLATFORM_TOOLS="/home/USER/android-sdk-linux/platform-tools"
$ android
.
es necesario crear un enlace simbólico al
fichero binario de NodeJS, ya que el instalador
de Ubuntu lo nombra como nodejs, para evitar
ambigüedad con otra aplicación del repositorio
que se llama node.
Nos permite hacer debug de nuestra aplicación sobre un navegador sin necesidad de
compilar la aplicación e instalarla en un emulador o un dispositivo.
.
Se recomienda que la depuración se realice junto con el
navegador Chrome, ya que hay ciertas versiones de
Ripple que pueden producir errores al ejecutarse sobre
Firefox
Crear la aplicación
.
Ingeniería de Sistemas Móviles
Phonegap (Creando aplicaciones)
Añadir plataformas
$ cd hello
$ cordova platform add ios
$ cordova platform add android
$ cordova platform add blackberry10
Construir la aplicación
De forma predeterminada, el cordova create script genera una
aplicación basada en web esquelética cuya portada del proyecto es
$ cordova build el archivo www/index.html. Editar esta aplicación que quieras, pero
$ cordova build ios cualquier inicialización debe especificarse como parte del
controlador de eventos deviceready, que se hace referencia por
defecto a www/js/index.js
En este caso, una vez se ejecuta prepare , puede utilizar como una
$ cordova prepare ios alternativa Xcode SDK de Apple para modificar y compilar el código
$ cordova compile ios específico de plataforma que Córdoba se genera dentro de platforms/ios .
Puede utilizar el mismo enfoque con SDK de otras plataformas.
Para incluir las funcionalidades nativas del dispositivo es necesario añadir plugins que
proporcionan acceso a núcleo de las APIs de Córdoba.
Para incluir las funcionalidades nativas del dispositivo es necesario añadir plugins que
proporcionan acceso a núcleo de las APIs de Córdoba.
Contactos:
$ cordova plugin add org.apache.cordova.contacts
Globalización:
$ cordova plugin add org.apache.cordova.globalization
Para incluir las funcionalidades nativas del dispositivo es necesario añadir plugins que
proporcionan acceso a núcleo de las APIs de Córdoba.
SplashScreen:
$ cordova plugin add org.apache.cordova.splashscreen
Uso plugin ls (o plugin list , o plugin por sí mismo) permite los pluguins instalados
actualmente:
Personalización
2- Se crea un archivo css vacío www/css/overrides.css, que se aplicaría para todas las
versiones no-Android.
body { font-size:14px; }
Introducción
Los dispositivos BLE y la Web Física
Plataforma para la gestión de proyectos
mediante la web física
Caso de Uso: Aplicación al Turismo
Gastronómico
Conclusiones
2
Introducción
3
Bluetooth 4.0
5
Bluetooth 4.0
6
Bluetooth 4.0
7
ibeacon
8
ibeacon
9
ibeacon
10
Eddystone specifications
11
Eddystone-UID
12
Eddystone-URL
13
Eddystone-TLM
14
UID vs URL
15
La web Física
16
Plataforma para la gestión de proyectos mediante
la web física
Se distribuyen una serie de dispositivos BLE en un área de interés
(ciudad, recinto ferial, etc.).
Cada uno de estos dispositivos trasmite un servicio genérico, el real
está asignado en la base de datos.
El servidor garantiza una completa personalización de estos servicios y
aplicaciones.
Los servicios con independencia del beacon al que estén asociado
estarán destinados a:
✔ Distribución de contenidos multimedia.
✔ Encuestas de satisfacción.
✔ Campañas de promoción.
17
Plataforma para la gestión de proyectos mediante
la web física
18
Caso de uso:
Una aplicación al turismo gastronómico
Para evaluar el sistema propuesto se implementó un proyecto destinado al turismo
gastronómico, consistente en simular una Feria gastronómica en la que un conjunto de
stands de diferentes empresas/instituciones dan a conocer sus productos, eventos
gastronómicos de la ciudad/entorno y oferta turística-gastronómica.
19
Caso de uso:
Una aplicación al turismo gastronómico
Los turistas/usuarios que se encuentren en una ciudad, pueden interaccionar de forma más
cercana con los productos gastronómicos, las empresas y los objetivos turísticos de la
misma. Entre otras cosas, los usuarios podrán obtener información general y particular de
los productos, los eventos gastronómicos y de las empresas o stands donde se presentan.
Además, podrán realizar la evaluación de los productos, obtener bonificaciones, y compartir
la experiencia en las redes sociales.
20
Conclusiones
21
FIN