A Alvarez A GT FM 1221 Memoria
A Alvarez A GT FM 1221 Memoria
Diciembre de 2021
Esta obra está sujeta a una licencia de
Reconocimiento-NoComercial-
SinObraDerivada 3.0 España de Creative
Commons
FICHA DEL TRABAJO FINAL
La idea del proyecto surge de observar el boom que vive ahora mismo todo lo
relacionado con las criptomonedas, que ha llevado a un aumento considerable
del número de aplicaciones relacionadas con este mundo en la store de Android.
La mayoría de esas aplicaciones se basan en mostrar información global sobre
las diferentes criptomonedas que se encuentran en el mercado, siendo
complementada según las preferencias y elecciones del usuario. Por ello, se ha
desarrollado una aplicación que, a partir de las criptomonedas que el usuario
decida seguir, se organice el resto de la información proporcionada por la
aplicación, sin necesidad de mostrar aquella que sea superflua al usuario. Las
elecciones del usuario son la piedra angular del funcionamiento de la aplicación.
3
Al finalizar este proyecto, se ha conseguido crear una aplicación con buen
rendimiento, que consume mucha información en tiempo real a partir de APIs
externas, y con un diseño minimalista y agradable a la vista.
The idea of the project comes from observing the boom that everything related
to cryptocurrencies is experiencing right now, which has led to a considerable
increase in the number of applications related to this world in the Android store.
Most of these applications are based on displaying global information about the
different cryptocurrencies that are on the market, being complemented according
to the user’s preferences and choices. Therefore, an application has been
developed that, based on the cryptocurrencies that the user chooses to follow,
organizes the rest of the information provided by the application, without the need
to show that which is superfluous to the user. The user’s choices are the
cornerstone of the application’s operation.
Due to the deviations suffered in the planning, the delivered product does not
have all the proposed functionalities.
At the end of this project, we have managed to create an application with good
performance, which consumes a lot of information in real time from external APIs,
and with a minimalist and pleasing design.
4
Índice
1. Introducción ................................................................................................. 11
1.1 Contexto y justificación del Trabajo.......................................................... 11
1.2 Objetivos del Trabajo ............................................................................... 15
1.2.1 Objetivos funcionales ....................................................................... 15
1.2.2. Objetivos no funcionales ................................................................. 16
1.3 Enfoque y método seguido....................................................................... 16
1.4 Planificación del Trabajo .......................................................................... 18
1.4.1. Recursos de hardware y software .................................................. 18
1.4.2. Planificación de tareas .................................................................... 20
1.4.3. Planificación temporal de tareas ..................................................... 21
1.4.4. Riesgos en la planificación ............................................................. 22
1.5 Breve sumario de productos obtenidos .................................................... 23
1.6 Breve descripción de los otros capítulos de la memoria .......................... 23
2. Diseño .......................................................................................................... 24
2.1. Encuestas................................................................................................ 24
2.1.1. Pregunta 1 ...................................................................................... 24
2.1.2. Pregunta 2 ...................................................................................... 25
2.1.3. Pregunta 3 ...................................................................................... 25
2.1.4. Pregunta 4 ...................................................................................... 26
2.1.5. Pregunta 5 ...................................................................................... 26
2.1.6. Pregunta 6 ...................................................................................... 27
2.1.7. Pregunta 7 ...................................................................................... 27
2.1.8. Pregunta 8 ...................................................................................... 28
2.1.9. Pregunta 9 ...................................................................................... 28
2.1.10. Pregunta 10 .................................................................................. 29
2.1.11. Conclusiones ................................................................................ 29
2.2. Usuarios y contexto de uso ..................................................................... 30
2.2.1. Personas y escenarios de uso ........................................................ 30
2.3. Diseño conceptual ................................................................................... 33
2.3.1. Árbol de navegación ....................................................................... 33
2.3.2. Flujo de interacción ......................................................................... 35
2.4. Prototipado .............................................................................................. 36
2.4.1. Sketches ......................................................................................... 36
2.4.2. Prototipado de alta fidelidad ........................................................... 44
2.4.3. Evaluación ...................................................................................... 49
2.5. Diseño técnico ......................................................................................... 52
2.5.1. Definición de los casos de uso ....................................................... 52
2.5.2. Diseño de la arquitectura ................................................................ 71
3. Implementación ........................................................................................... 74
3.1. Desarrollo ................................................................................................ 74
3.1.1. Librerías utilizadas .......................................................................... 77
3.2. Pruebas ................................................................................................... 78
3.3. Observaciones tras implementación ....................................................... 84
4. Conclusiones ............................................................................................... 85
5. Glosario ........................................................................................................ 87
5
6. Bibliografía ................................................................................................... 87
7. Anexos ......................................................................................................... 89
7.1. Manual de usuario ................................................................................... 89
6
Lista de figuras
7
Figura 45. Pantalla detalle alerta....................................................................... 48
Figura 46. Pantalla usuario ............................................................................... 48
Figura 47. Pantalla preferencias ....................................................................... 48
Figura 48. Primera implementación tras evaluación de usuarios...................... 49
Figura 49. Segunda implementación tras evaluación de usuarios .................... 50
Figura 50. Segunda implementación tras evaluación de usuarios (2) .............. 50
Figura 51. Tercera implementación tras evaluación de usuarios ...................... 51
Figura 52. Patrón arquitectónico MVVM, establecido por Google .................... 71
Figura 53. Arquitectura limpia, definida por Robert C. Martin ........................... 73
Figura 54. Diagrama entidad – relación de la base de datos ............................ 73
Figura 55. Clase Either...................................................................................... 75
Figura 56. Métodos que se encuentra en la clase abstracta BaseService ....... 76
Figura 57. Imágenes manual de usuario ........................................................... 89
Figura 58. Imágenes manual de usuario (2) ..................................................... 90
Figura 59. Imágenes manual de usuario (3) ..................................................... 90
Lista de tablas
9
Tabla 45. Pruebas en pantalla de una noticia ................................................... 82
Tabla 46. Pruebas en pantalla de noticias guardadas ...................................... 82
Tabla 47. Pruebas en pantalla de conversión ................................................... 83
Tabla 48. Pruebas en pantalla de usuario......................................................... 84
Tabla 49. Pruebas en pantalla de preferencias del usuario .............................. 84
10
1. Introducción
Pero, ¿Qué son las criptomonedas y qué las hacen tan especiales? Las
criptomonedas son un medio digital de intercambio, que cumplen el papel de una
moneda fiduciaria. Sin embargo, su valor se basa en algo digital, ya que utiliza
métodos criptográficos para asegurar transacciones financieras, controlar la
creación de nuevas unidades y verificar las transferencias de activos [4]. Estos
métodos criptográficos se basan en la tecnología blockchain. Esta tecnología
11
está compuesta por una red de ordenadores independientes del control
centralizado y que mantiene un registro de todas las transacciones que han
ocurrido y que ocurrirán en un futuro [3].
§ The Crypto App – Widgets, Alertas, Noticias [6] es una aplicación que
permite hacer un seguimiento de los tipos de cambio entre las diferentes
criptomonedas, recibir noticias y alertas en tiempo real sobre cualquier
criptomoneda y calcular cambios a otras monedas o viceversa. Entre las
diversas funcionalidades que contempla, destacan las siguientes:
12
o Posibilidad de configurar una lista prioritaria con las criptomonedas
favoritas del usuario.
o Visualización detallada con gráficos de las criptomonedas actuales.
o Posibilidad de configurar alertas de precio.
o Posibilidad de agregar widgets.
o Información sobre las últimas novedades sobre criptomonedas.
o Interfaz agradable para el usuario.
13
§ CoinMarketCap – Rastreador de precios criptográficos [8] se define
como el sitio web de seguimiento de precios de criptoactivos más
referenciado del mundo en el espacio de criptomonedas, facilitando a los
usuarios minoristas información imparcial, de alta calidad y precisa que
permita al usuario sacar sus propias conclusiones. Las funcionalidades
más destacadas son:
Tras realizar un análisis de las aplicaciones similares elegidas, vemos que todas
tienen un punto en común, ofrecen información global que viene complementada
con información personal según las preferencias y elecciones del usuario. Esto
puede proporcionar una información más completa sobre el mundo de las
criptomonedas, sin embargo, tal cantidad de información puede hacer que el
usuario no se sienta cómodo, haciendo que la experiencia de usuario sea pobre.
14
1.2 Objetivos del Trabajo
15
§ Gestión de alertas: El usuario podrá establecer alertas para cuando una
criptomoneda varíe su precio en un rango específico.
16
criptomonedas. Aquellas que proporcionan información del mundo relacionado
con las criptomonedas, y aquellas que proporcionan todo lo anterior, además de
incluir una wallet. Una wallet es una herramienta con la que los usuarios
almacenan y gestionan sus criptomonedas, permitiendo enviar y recibir
criptomonedas a través de blockchain [9].
17
La versión mínima de la API de Android elegida será la versión 8.0-8.1, más
conocida como Oreo. Al elegir esta versión, se ocupa un 78,3% del mercado
Android [10]. Gracias a esto, no tendremos que realizar demasiadas tareas de
mantenimiento, aprovechando todos los beneficios que nos aporta esta versión.
18
Hardware
Software
Entorno de desarrollo integrado (IDE) Android Studio: Software que cuenta con
herramientas y servicios para que los
desarrolladores puedan crear aplicaciones
Android.
19
1.4.2. Planificación de tareas
Tareas
Plan de trabajo
Definición de la idea
Contexto y justificación del trabajo
Estudio de mercado
Definición de objetivos funcionales y no funcionales
Enfoque y método seguido
Planificación del trabajo
Diseño de la aplicación
Usuarios y contexto de uso
Diseño conceptual
Prototipado
Evaluación
Definición de casos de uso
Diseño de arquitectura
Implementación de las funcionalidades
Registro de usuario
Login de usuario
Logout de usuario
Eliminar cuenta de usuario
Gestión de preferencias de la aplicación
Gestión de criptomonedas
Gestión de la evolución de las criptomonedas
Gestión del detalle de las criptomonedas
Calculadora de conversión
Gestión de alertas
Gestión de noticias
Filtro de noticias
Guardado de noticias
Testing
Entrega final
Revisión y corrección de la memoria
Manual de usuario
Elaboración de la presentación
Tabla 2. Definición de tareas
20
1.4.3. Planificación temporal de tareas
21
Figura 7. Planificación temporal de las tareas de la PEC 3 - Implementación
22
1.5 Breve sumario de productos obtenidos
§ APK nativa para dispositivos que utilicen el sistema operativo Android con
una versión 8.0 – 8.1 o superior.
23
2. Diseño
2.1. Encuestas
2.1.1. Pregunta 1
24
2.1.2. Pregunta 2
2.1.3. Pregunta 3
25
2.1.4. Pregunta 4
2.1.5. Pregunta 5
26
2.1.6. Pregunta 6
2.1.7. Pregunta 7
27
2.1.8. Pregunta 8
2.1.9. Pregunta 9
28
2.1.10. Pregunta 10
2.1.11. Conclusiones
Las conclusiones más relevantes que se pueden sacar tras el análisis de las
respuestas obtenidas son las siguientes:
29
2.2. Usuarios y contexto de uso
Persona
Datos personales
Nombre: Judith Gómez
Edad: 38 años
Sexo: Mujer
30
Ocupación: Product Owner
Estado civil: Casada y con dos hijos
Residencia: Madrid
Biografía
Judith vive con su pareja y sus hijos en las afueras de Madrid y trabaja como
Product Owner en una empresa mediana dedicada a la consultoría IT.
Judith posee un móvil Android de alta gama utilizado, en gran medida, para
una productividad mayor en su día a día.
Escenario
31
Persona
32
Escenario
33
Figura 21. Árbol de navegación
34
2.3.2. Flujo de interacción
35
2.4. Prototipado
2.4.1. Sketches
36
Tras la pantalla de Splash, las pantallas que se mostrarán son la de registro, o
la de login. Esta última se mostrará si el usuario ya está registrado. En ambas
pantallas, el usuario podrá identificarse a través de su email, sin embargo, se da
la posibilidad de poder ingresar en la aplicación a través de sus redes sociales.
37
• La última sección estará formada por aquellas criptomonedas que haya
agregado el usuario, en las cuales, se ha hecho una inversión.
Esta pantalla se mostrará cuando el usuario pulse sobre una tarjeta de la sección
de evolución de criptomonedas. Esta pantalla mostrará una gráfica más
detallada sobre la evolución de dicha criptomoneda, además de ver las
características que tenga en el mercado en ese momento.
38
Figura 27. Pantalla noticias
Esta pantalla mostrará las noticias relacionadas con las criptomonedas que haya
seleccionado el usuario, en el caso de que el usuario no tenga seleccionada
ninguna, se mostrarán todas las noticias más relevantes con el mundo de las
criptomonedas. Cada noticia de la lista de noticias será mostrada en tamaños
diferentes.
Dentro de está pantalla se tendrá dos botones. Un botón que permitirá acceder
a la sección de noticias guardadas, y un botón que permitirá filtrar las noticias.
Cuando el usuario pulse en el botón de filtros, aparecerá un modal. El modal
permitirá filtrar por las criptomonedas que tenga el usuario, seleccionándolas de
modo individual. Sin embargo, también se proporcionará la opción de mostrar
noticias de todas las criptomonedas. Además, en este modal también se podrá
ordenar las noticias en base a su fecha de publicación, mostrando primero las
noticias que tengan una fecha de publicación más actual o más antigua.
39
Figura 28. Pantalla noticias guardadas
Esta pantalla mostrará aquellas noticias que el usuario haya decidido guardar,
ya sea porque le resultan interesantes o porque quiere guardarlas para leer más
tarde. Las noticias se mostrarán en una vista de lista estándar.
40
La pantalla de detalle de una noticia tendrá un botón que permitirá guardar la
noticia que se está revisando, para poder consultarla más tarde. La noticia se
mostrará embebida, es decir, se utilizará un objeto de la librería proporcionada
por el framework de Android que permitirá ver la noticia como si se estuviese
viéndola en la web de origen.
41
Figura 31. Pantalla alertas
42
La pantalla del detalle de una alerta podrá revisarse de dos formas: una vista en
forma de consulta, donde se mostrará la alerta sin poder modificar ninguna de
sus características; y una vista en modo modificación. A ésta ultima podrá
accederse cuando se cree una nueva, o cuando se pulse sobre el botón de
modificación que vendrá implementado en la propia pantalla.
43
Figura 34. Pantalla preferencias
44
usuario fuera más simple, accesible y minimalista con el fin de que la experiencia
de usuario sea lo más agradable posible.
45
Figura 37. Vista menú Figura 38. Vista añadir criptomoneda
46
Figura 41. Pantalla noticias guardadas Figura 42. Pantalla detalle noticia
47
Figura 45. Pantalla detalle alerta Figura 46. Pantalla usuario
48
2.4.3. Evaluación
Una vez finalizado el prototipado en alta fidelidad, este fue evaluado por
una serie de usuarios con el fin de mejorar la experiencia de usuario entre las
pantallas diseñadas.
Estos usuarios detectaron ciertos factores, que se han tenido en cuenta, para
mejorar la experiencia de usuario.
49
Para ello, se ha decidido implementar un swipe de derecha a izquierda (acceder
a la pantalla de noticias) y de izquierda a derecha (acceder a la pantalla principal)
entre estás dos pantallas, para que se puede acceder a ellas de la forma más
dinámica posible, sin quitar la opción de acceder a cada una de ellas desde el
menú de navegación.
Otro punto importante que han detectado algunos de los usuarios es la de poder
actualizar los datos de las criptomonedas cuando ellos quieran. La opción de
establecer un periodo de tiempo de actualización de datos mediante la pantalla
de preferencias les ha parecido bien, sobre todo, para la configuración de alertas.
Pero también quieren recibir los datos actualizados cuando ellos demanden.
Figura 49. Segunda implementación tras evaluación de usuarios Figura 50. Segunda implementación tras evaluación de usuarios (2)
50
En la pantalla de home el botón se encuentra en la vista de las gráficas de cada
criptomoneda, y permite actualizar los datos de dicha criptomoneda en tiempo
real. Cuando el botón se pulse, se informará al usuario que se están actualizando
los datos y posteriormente aparecerán en pantalla refrescados. Esto tendrá un
efecto secundario ya que, si tenemos esa criptomoneda en la sección de
portfolio, los datos que se muestran también se verán afectados y se actualizarán
con el valor correspondiente en ese momento.
Un usuario detectó una funcionalidad que, tras estudiarla, sería bastante útil
implementarla. El usuario comentó que le parecía un poco tedioso el tener que
ir desde la pantalla de detalle de una criptomoneda a la pantalla de alertas y
crear una alerta allí.
51
Se ha añadido un botón para añadir alertas desde la pantalla de detalle de una
criptomoneda. Cuando se pulse en este botón, se abrirá la pantalla de detalle de
una alerta, y se podrá configurar la alerta que quiera el usuario. Una vez creada,
se volverá a la pantalla de detalle de una criptomoneda.
52
Prerrequisitos El usuario debe estar registrado en la aplicación
(CU – 01).
Flujo § Usuario abre la aplicación.
§ Si las credenciales de login han
caducado o nunca ha iniciado sesión, la
aplicación muestra la pantalla de login y
el usuario debe iniciar sesión mediante la
autenticación a través de sus redes
sociales, o rellenar sus credenciales de
acceso.
§ Si el usuario ha rellenado sus
credenciales, la aplicación comprueba
que son correctas.
§ La aplicación dirige al usuario a la
pantalla de home.
Requisitos a posteriori El usuario ha iniciado sesión correctamente.
Comentarios Si el usuario no ha introducido sus credenciales
correctamente, la aplicación mostrará un modal
informando del error.
Tabla 7. CU – 02: Login de usuario
53
§ El usuario pulsa en el botón de cerrar
sesión.
§ La aplicación cierra la sesión del usuario
identificado.
§ La aplicación redirige al usuario a la
pantalla de login.
Requisitos a posteriori El usuario ya no está identificado en la aplicación.
Comentarios
Tabla 9. CU – 04: Logout de usuario
Flujo alternativo 1:
Flujo alternativo 2:
Flujo alternativo 3:
54
Comentarios Si el usuario es la primera vez que entra en la
aplicación, las secciones de criptomonedas y
portfolio se encontrarán vacías, mostrando un
mensaje que le invite añadir información.
Tabla 10. CU – 05: Acceso a la pantalla de home
55
Requisitos a posteriori La aplicación cuenta con una criptomoneda
menos.
Comentarios
Tabla 12. CU – 07: Eliminar criptomoneda
56
• El usuario pulsa el botón de añadir.
• La aplicación almacena la información
añadida.
• El modal se cierra.
• La aplicación recarga la sección de
portfolio.
Requisitos a posteriori La aplicación cuenta con una criptomoneda en la
que se ha realizado una inversión.
Comentarios
Tabla 14. CU – 09: Añadir criptomoneda al portfolio
57
Prerrequisitos El usuario debe:
• Estar registrado en la aplicación (CU –
01).
• Estar identificado en la aplicación (CU –
02).
• Haber añadido previamente una
criptomoneda a la sección
criptomonedas de la pantalla de home
(CU – 06).
• Haber añadido previamente una
criptomoneda a la sección portfolio de la
pantalla de home (CU – 09).
Flujo • El usuario se encuentra en la pantalla de
home.
• El usuario realiza un swipe de derecha a
izquierda en una de las criptomonedas
añadidas en la sección de portfolio.
• El usuario pulsa en el botón de eliminar.
• La aplicación elimina la información
relacionada sobre la criptomoneda en la
sección de portfolio.
• La aplicación recarga la sección de
portfolio.
Requisitos a posteriori La aplicación ya no cuenta con la inversión
realizada en una criptomoneda.
Comentarios
Tabla 16. CU – 11: Eliminar criptomoneda del portfolio
58
CU – 13: Actualizar la información en la pantalla de detalle de una
criptomoneda
Descripción Permite al usuario actualizar información
detallada sobre una criptomoneda.
Prioridad Baja
Actores Usuario identificado.
Prerrequisitos El usuario debe:
• Estar registrado en la aplicación (CU –
01).
• Estar identificado en la aplicación (CU –
02).
• Haber añadido previamente una
criptomoneda a la sección
criptomonedas de la pantalla de home
(CU – 06).
Flujo • El usuario se encuentra en la pantalla de
detalle de una criptomoneda.
• El usuario pulsa el botón de actualizar.
• La aplicación actualiza la información de
la criptomoneda.
• La aplicación muestra la información
detallada actualizada.
Requisitos a posteriori La información detallada de la criptomoneda se
ha actualizado.
Comentarios
Tabla 18. CU – 13: Actualizar la información en la pantalla de detalle de una criptomoneda
59
Comentarios El intervalo de tiempo disponible es:
• 1d (1 día)
• 1s (1 semana)
• 1m (1 mes)
• 3m (3 meses)
• 6m (6 meses)
• 1ª (1 año)
Tabla 19. CU – 14: Modificar el intervalo de tiempo en la gráfica mostrada en la pantalla de detalle de una criptomoneda
60
• El usuario pulsa el botón de noticias.
• La aplicación redirige al usuario a la
pantalla de noticias.
• La aplicación muestra las noticias en
forma de mosaico.
Flujo alternativo 1:
61
Comentarios Si el usuario no ha añadido ninguna criptomoneda
en la sección criptomonedas de la pantalla de
home (CU - 06), la lista de criptomonedas que se
muestra en el modal estará bloqueada, y estará
seleccionada el valor Todas. Los valores de
ordenación estarán relacionados con la fecha de
publicación de la noticia.
Tabla 22. CU – 17: Filtrar noticias
Flujo alternativo 1:
62
• El usuario pulsa en el botón de
guardados.
• La aplicación redirige al usuario a la
pantalla de noticias guardadas.
• La aplicación muestra las noticias
guardadas en modo lista.
Requisitos a posteriori Se muestra al usuario aquellas noticias
relacionadas con el mundo de las criptomonedas
que haya decidido guardar para volver a leer o
para leer más tarde. Todas las noticias que se
encuentran en la lista pueden pulsarse para
acceder al detalle de la noticia.
Comentarios Si el usuario no tiene ninguna noticia guardada,
se mostrará una imagen informando de que no se
hay noticias guardadas.
Tabla 24. CU – 19: Acceder a noticias guardadas
63
• La aplicación muestra un botón de
borrar.
• El usuario pulsa el botón de borrar.
• La aplicación borra la información
almacenada relacionada con la noticia
guardada.
• La aplicación recarga la lista de noticias
guardadas.
Requisitos a posteriori La aplicación ya no cuenta con la noticia
guardada.
Comentarios
Tabla 26. CU – 21: Borrar una noticia guardada
64
de las otras criptomonedas que el usuario haya
agregado en la sección de criptomonedas en la
pantalla de home.
Comentarios
Tabla 27. CU – 22: Convertir un valor
65
• El usuario pulsa el botón del menú de
navegación.
• El usuario pulsa el botón de alertas.
• La aplicación redirige al usuario a la
pantalla de alertas.
• La aplicación muestra las alertas
creadas por el usuario en forma de lista.
Requisitos a posteriori El usuario podrá revisar las alertas que ha creado.
Todas las alertas que se encuentran en la lista
pueden pulsarse para acceder al detalle de la
alerta.
Comentarios Si el usuario no ha creado ninguna alerta, la
pantalla de alertas no mostrará nada.
Tabla 29. CU – 24: Acceder a la pantalla de alertas
Flujo alternativo 1:
66
EditText para que el usuario lo rellene
con el valor de aumento del precio /
porcentaje del precio de la criptomoneda
y un EditText para que el usuario lo
rellene con el valor de disminución del
precio / porcentaje del precio de la
criptomoneda.
• El usuario selecciona y rellena la
información requerida.
• El usuario pulsa el botón de guardar.
• La aplicación almacena la información.
• La aplicación redirige al usuario a la
pantalla de detalle de una criptomoneda.
Requisitos a posteriori La aplicación permite al usuario crear una alerta
para detectar la evolución del precio de una
criptomoneda en base a unos valores
determinados por el mismo.
Comentarios
Tabla 30. CU – 25: Añadir una alerta
67
• El usuario pulsa el botón de editar.
• La aplicación permite al usuario
modificar los valores que haya
establecido anteriormente al crear la
alerta.
• El usuario modifica la información.
• El usuario pulsa el botón de guardar.
• La aplicación almacena la información.
• La aplicación redirige al usuario a la
pantalla de alertas.
Requisitos a posteriori El usuario podrá modificar una alerta ya creada y
consultar, posteriormente, la alerta actualizada.
Comentarios
Tabla 32. CU – 27: Editar una alerta
68
Flujo • El usuario se encuentra identificado,
pero sin tener la aplicación abierta.
• La aplicación tendrá un proceso en
segundo plano que irá preguntando cada
X tiempo si el precio de una
criptomoneda ha cambiado en base a la
alerta que haya creado el usuario
previamente.
• El proceso detecta que ha cambiado el
precio de la criptomoneda.
• La aplicación envía una notificación al
usuario informando de que el precio de
una criptomoneda ha variado en base a
la alerta que haya creado.
Requisitos a posteriori El usuario podrá recibir notificaciones
relacionadas con las alertas en los precios de las
criptomonedas que el haya definido.
Comentarios
Tabla 34. CU – 29: Notificar al usuario del cambio de precio de una criptomoneda
69
Flujo • El usuario se encuentra en la pantalla de
cuenta del usuario.
• El usuario pulsa el botón de editar.
• La aplicación muestra la información
relacionada con el usuario identificado, y
permite a este mismo poder editarla.
• El usuario modifica su información
personal.
• El usuario pulsa en el botón de guardar.
• La aplicación almacena la información
actualizada.
• La aplicación muestra la información
actualizada en modo vista.
Requisitos a posteriori El usuario podrá modificar su información
personal y, consultar posteriormente, la
información actualizada.
Comentarios
Tabla 36. CU – 31: Modificar la información del usuario
Flujo alternativo 1:
70
Comentarios La configuración inicial tendrá unos valores por
defecto cuando el usuario se registre y se
identifique por primera vez en la aplicación.
Tabla 37. CU – 32: Acceder a la pantalla de preferencias
71
Un patrón arquitectónico MVVM tiene como finalidad la de separar la lógica de
negocio de la interfaz de usuario, facilitando las pruebas, mantenimiento y la
estabilidad de los proyectos en los que se emplee. Está compuesto por 3
componentes:
• Model: Está compuesto por todas las clases relacionadas con el acceso
de datos, reglas de negocio y obtención de la información. Además, es el
encargado de exponer los datos necesarios al componente ViewModel
de forma que puedan ser consumidos fácilmente. También recibe
cualquier evento del componente ViewModel que necesite para realizar
cualquier operación necesaria sobre los datos. Es importante seguir el
principio single responsability para la creación de un modelo por cada
objeto lógico de la fuente de datos.
Los beneficios que aporta este patrón arquitectónico sobre los demás existentes
son:
Pero no todo son beneficios. Cualquier tipo de patrón arquitectónico tiene sus
desventajas:
72
Se ha decidido también, implementar otra arquitectura que va a servir de
complemento a la anteriormente mencionada, y es la arquitectura limpia.
73
• USER_PREFERENCES: Entidad que representa las preferencias que
defina el usuario.
• USER: Representa la información referente al usuario. Esta tabla se
rellenará cuando el usuario decida registrarse o identificarse mediante el
formulario correspondiente.
• USER_PASSWORD: Representa la contraseña de acceso con la que se
registrará el usuario. Esta tabla se rellenará cuando el usuario se registre
mediante el formulario proporcionado.
• SAVED_NEWS: Aquí se almacenará la información relacionada con las
noticias que haya guardado el usuario.
• CRYPTOCURRENCY: Representa aquellas criptomonedas que el
usuario ha decidido añadir a la aplicación para su seguimiento. Se
almacenará la información básica para poder realizar la petición a la API
externa y obtener sus datos completos.
• INVESTMENT: Guarda la información relacionada con la inversión
realizada por el usuario en una o más criptomonedas.
• ALARM: Representa las alarmas que ha creado el usuario sobre la
evolución del precio de una o más criptomonedas.
Los datos proporcionados por las APIs externas serán serializadas a entidades
dentro de la aplicación. Sin embargo, para evitar estar constantemente haciendo
llamadas a las APIs, se va a implementar un mecanismo de caché para que la
experiencia de usuario sea lo más satisfactoria posible.
Por lo tanto, está aplicación implementará dos formas de almacenar los datos:
una, mediante el almacenamiento de datos de forma relacional a través de la
librería Room (Base de datos local); y otra mediante el almacenamiento de datos
de forma no relacional, a través de la librería de firebase (Base de datos remota).
3. Implementación
3.1. Desarrollo
74
la base de datos local; y el manejo de su resultado. Por ello, se ha implementado
una clase denominada Either.
Para todas las peticiones que se hacen a APIs externas, se ha decidido crear
una clase abstracta que tiene definida dos funciones: Una función que permite
realizar la petición y obtener los datos tal cual los devuelve la API; y otra función
que permite realizar la petición y convertir los datos obtenidos según las
necesidades del servicio.
75
Figura 56. Métodos que se encuentra en la clase abstracta BaseService
Todas las llamadas a APIs externas hacen uso de una URL, unos parámetros,
una función que convierte datos (en caso de que sea necesario) y un objeto
httpClient que permite realizar la llamada. Configurando todos estos objetos
como parámetros, se puede encapsular todas las llamadas en una clase
abstracta evitando repetir código y haciéndolo más robusto.
Otras de las problemáticas que se han encontrado ha sido la de crear una toolbar
diferente para las pantallas que forman la aplicación. Para solucionarlo, se ha
creado una Activity base que contiene dos secciones: una sección donde se
implementará el contenido de la pantalla, y otra sección donde se implementará
el toolbar específico.
76
La clase que hace referencia a la Activity base está compuesta de dos funciones
principales:
Toda Activity que necesite de un toolbar específico, debe heredar esta clase y
establecer la información pertinente en cada función explicada anteriormente.
Estas funciones deben ser llamadas justo en la función onCreate.
Las librerías que han sido utilizadas para conseguir los objetivos en el
desarrollo de la aplicación son:
77
• Lyfecycle: Permite definir los objetos que tienen un ciclo de vida en
Android junto con su estado e información de eventos. Es una librería
necesaria para poder utilizar ViewModels.
• MPAndroidChart: Librería que permite establecer gráficas en Android.
• Material Design: Permite hacer uso de componentes específicos en
Android. Se ha hecho un uso específico para la creación de toolbars.
• Glide: Permite cargar imágenes. Su uso es intuitivo y permite mostrar la
imagen de diferentes formas.
• Swipe Reveal Layout: Librería que permite añadir el gesto swipe en un
layout para mostrar otro layout. Esta librería se ha utilizado en los ítems
que se encuentran en ciertos recycler views, con el fin de poder editar o
borrar.
• Room: Librería de base de datos que simplifica la tarea de trabajar con
base de datos en Android.
3.2. Pruebas
Pantalla de Splash
Prueba Resultado
Si el usuario tiene una sesión almacenada en la Se aplica.
aplicación, se navega directamente a la pantalla
de home.
Si el usuario no tiene una sesión almacenada, se Se aplica.
navega directamente a la pantalla de login.
Si el usuario tiene una sesión almacenada, se Se aplica.
obtiene el usuario y sus preferencias y se
establecen como variables globales.
Si el usuario tiene una sesión almacenada, se Se aplica.
actualiza la fecha de login.
Si se produce algún error en la pantalla de Splash Se aplica.
se informa al usuario con un mensaje por
pantalla.
Tabla 39. Pruebas en pantalla de splash
Pantalla de Registro
Prueba Resultado
Ningún campo del registro debe estar vacío. Se aplica. Se le muestra al usuario un mensaje
por pantalla
El formato del email debe ser válido. Se aplica. Se le muestra al usuario un mensaje
por pantalla.
El campo contraseña y repetir contraseña Se aplica. Se le muestra al usuario un mensaje
deben ser iguales. por pantalla.
El email introducido no debe existir en la base de Se aplica. Se le muestra al usuario un mensaje
datos. por pantalla.
78
Si todos los campos son válidos, se guardan los Se aplica.
datos del usuario y se navega a la pantalla de login.
Al momento de guardar el usuario, se guardan Se aplica.
unas preferencias por defecto.
Se accede a la pantalla de login a través del botón Se aplica.
iniciar sesión.
Registro a través de Google. No implementado.
Registro a través de Facebook. No implementado.
Registro a través de Twitter. No implementado.
Tabla 40. Pruebas en pantalla de registro
Pantalla de Login
Prueba Resultado
Ningún campo del login debe estar vacío. Se aplica. Se le muestra al usuario un mensaje
por pantalla
El email introducido debe existir en la base de Se aplica. Se le muestra al usuario un mensaje
datos. por pantalla.
La contraseña introducida debe estar almacenada Se aplica. Se le muestra al usuario un mensaje
en la base de datos y relacionada con el email por pantalla.
introducido.
Si todos los campos son válidos, se actualiza la Se aplica.
fecha de login, se almacena la sesión y se navega
a la pantalla de home.
Se accede a la pantalla de registro a través del Se aplica.
botón crear cuenta.
Login a través de Google. No implementado.
Login a través de Facebook. No implementado.
Login a través de Twitter. No implementado.
Tabla 41. Pruebas en pantalla de login
Pantalla de Home
Prueba Resultado
Aparece un mensaje de bienvenida junto a una Se aplica.
frase motivadora y su autor.
Si la sección de criptomonedas está vacía, se Se aplica.
muestra un icono de que la sección está vacía.
Al pulsar en el botón de añadir de la sección Se aplica.
criptomonedas aparece un modal con una lista de
criptomonedas a añadir.
Si no se selecciona ningún elemento del modal de Sí. Se le muestra al usuario un mensaje por
criptomonedas no permite añadir. pantalla.
Al añadir una o varias criptomonedas, las Se aplica.
criptomonedas se guardan en la base de datos, la
sección de criptomonedas se recarga y muestra
una lista con la información de cada una de las
criptomonedas añadidas.
Al pulsar en el botón de actualizar en uno de los Se aplica.
ítems de la lista de criptomonedas, dicha
información se actualiza.
79
Al pulsar el botón de borrar en uno de los ítems Se aplica.
de la lista de criptomonedas, dicha criptomoneda
se borra de la base de datos y de la lista, y si
tiene alguna inversión en la sección del portfolio,
también se borra.
Si se pulsa en uno de los ítems de la lista de Sí.
criptomonedas, se navega a la pantalla de detalle
del ítem seleccionado.
Si no hay ninguna criptomoneda en la sección de Sí.
criptomonedas, no se permite añadir ninguna
inversión en la sección de portfolio.
Al pulsar el botón de añadir de la sección de Sí.
portfolio aparece un modal con la lista de
criptomonedas añadidas en la sección de
criptomonedas y un campo para añadir la
cantidad invertida.
Si no se selecciona ninguna criptomoneda o no se Sí. Se le muestra al usuario un mensaje por
introduce una cantidad invertida en el modal de pantalla.
inversiones, no permite añadir.
Al añadir una inversión, la sección de portfolio se Sí.
recarga y muestra una lista con la información de
la inversión de cada una de las criptomonedas.
Al hacer swipe en cada uno de ítems de la Sí.
sección de portfolio, aparece un botón de
actualizar y borrar.
Si se pulsa en el botón de actualizar en uno de los Sí.
ítems de la sección de portfolio, aparece un modal
que permite actualizar la cantidad de inversión
realizada sobre una criptomoneda.
Si no se introduce una cantidad invertida en el Sí.
modal de actualización de inversiones, no se
permite actualizar.
Al actualizar la inversión, la lista de la sección de Sí.
portfolio se refresca.
Si se pulsa en el botón de eliminar en uno de los Sí.
ítems de la sección del portfolio, la inversión
seleccionada se elimina y se refresca la sección.
Si se produce algún error en alguna de las Sí.
secciones, se muestra un icono de error y un
mensaje informando al usuario.
Si se pulsa en el icono del menú del toolbar de la Sí.
pantalla, permite navegar a las pantallas de
noticias, conversor, usuario y preferencias del
usuario.
Tabla 42. Pruebas en pantalla de home
80
muestra los datos de la gráfica, la gráfica se
refresca.
Al pulsar en uno de los botones mostrados en la Sí.
sección de enlaces, abre un enlace web.
Si el enlace de uno de los botones mostrados en Sí.
la sección de enlaces no está disponible, el botón
se deshabilita.
Al pulsar el botón de actualizar, toda la Sí.
información de la pantalla se refresca.
Al pulsar el botón de atrás, se navega a la Sí.
pantalla de home.
Si se produce algún error en alguna de las Sí.
secciones, se muestra un icono de error y un
mensaje informando al usuario.
Tabla 43. Pruebas en pantalla de detalle de una criptomoneda
Pantalla de Noticias
Prueba Resultado
Se muestra una lista de noticias. Sí.
Cuando se selecciona un ítem de la lista de Sí.
noticias, se navega hacia la pantalla de detalle de
una noticia.
Cuando se pulsa el botón de noticias guardas, se Sí.
navega hacia la pantalla de noticias guardadas.
Cuando se pulsa en el botón de filtros, aparece un Sí.
modal con la lista de criptomonedas añadidas por
el usuario en la pantalla de home, y una sección
de botones para poder ordenar las noticias.
Si no se selecciona ninguna criptomoneda o un Sí. Se le muestra al usuario un mensaje por
campo por el que ordenar en el modal de filtros, pantalla.
no se filtra.
Limpiar filtros aplicados. No implementado.
Al aplicar filtros, se muestra una lista de noticias Sí.
filtradas; en caso contrario, se muestra un icono
de que la lista está vacía.
Si se produce algún error en alguna de las Sí.
secciones, se muestra un icono de error y un
mensaje informando al usuario.
Si se pulsa en el icono del menú del toolbar de la Sí.
pantalla, permite navegar a las pantallas de
noticias, conversor, usuario y preferencias del
usuario.
Tabla 44. Pruebas en pantalla de noticias
81
Al pulsar el botón de atrás, se navega a la pantalla Sí.
de noticias.
Tabla 45. Pruebas en pantalla de una noticia
Pantalla de conversión
Prueba Resultado
Cuando se entra por primera vez, la moneda a Sí.
convertir es la moneda que tenga el usuario
configurado en la pantalla de preferencias.
Cuando entra por primera vez, la criptomoneda a Sí.
convertir es la primera, en orden alfabético, que
está almacenada en la base de datos.
Cuando entra por primera vez el campo de Sí.
cantidad está vacío.
Cuando se entra por primera vez, la sección de Sí.
criptomonedas almacenadas y sección de
cantidad no están visibles.
Cuando se introduce una cantidad, al cabo de un Sí.
segundo se cierra el teclado.
Cuando se introduce una cantidad, aparece la Sí.
conversión en la criptomoneda seleccionada, la
sección de cantidad y la sección de criptomonedas
almacenadas.
Cuando aparece la sección de criptomonedas, si la Sí
criptomoneda seleccionada es una de las
criptomonedas que se encuentran en la sección,
no se muestra en dicha sección.
Cuando se pulsa en la moneda, aparece un modal Sí.
con una lista de monedas.
Si no se selecciona ningún elemento de la lista de Sí. Se le muestra al usuario un mensaje por
monedas, no permite añadir. pantalla.
Cuando se añade una moneda, se recalcula toda Sí
la conversión para dicha moneda.
82
Cuando se pulsa en la criptomoneda, aparece un Sí.
modal con una lista de criptomonedas.
Si no se selecciona ningún elemento de la lista de Sí. Se le muestra al usuario un mensaje por
criptomonedas, no permite añadir pantalla.
Cuando se añade una criptomoneda, se recalcula Sí.
la conversión para dicha criptomoneda y, si la
criptomoneda previa era una de las criptomonedas
almacenadas, se añade a la sección de
criptomonedas.
Cuando se pulsa el botón de eliminar, se muestra Sí.
la pantalla como si entrada por primera vez.
Si se produce algún error en alguna de las Sí.
secciones, se muestra un icono de error y un
mensaje informando al usuario.
Si se pulsa en el icono del menú del toolbar de la Sí.
pantalla, permite navegar a las pantallas de
noticias, conversor, usuario y preferencias del
usuario.
Tabla 47. Pruebas en pantalla de conversión
Pantalla de usuario
Prueba Resultado
Al entrar en la pantalla podemos ver la Sí.
información del usuario en modo vista.
Al pulsar en el botón de preferencias, se navega a Sí.
la pantalla de preferencias del usuario.
Al pulsar el botón de editar, se muestran los Sí.
campos en modo edición.
Al pulsar el botón de cerrar sesión, se borra la Sí.
sesión almacenada del usuario y se navega hasta
la pantalla de login.
Al pulsar el botón de eliminar cuenta, aparece un Sí.
modal de confirmación.
Al pulsar el botón de confirmar en el modal de Sí.
confirmación, se borra toda la información de la
base de datos y de la sesión relacionada con el
usuario y se navega a la pantalla de login.
Cuando aparece la sección de criptomonedas, si la Sí
criptomoneda seleccionada es una de las
criptomonedas que se encuentran en la sección,
no se muestra en dicha sección.
Cuando se pulsa en la moneda, aparece un modal Sí.
con una lista de monedas.
Si no se selecciona ningún elemento de la lista de Sí. Se le muestra al usuario un mensaje por
monedas, no permite añadir. pantalla.
Cuando se añade una moneda, se recalcula toda Sí
la conversión para dicha moneda.
Cuando se pulsa en la criptomoneda, aparece un Sí.
modal con una lista de criptomonedas.
Si no se selecciona ningún elemento de la lista de Sí. Se le muestra al usuario un mensaje por
criptomonedas, no permite añadir pantalla.
Cuando se añade una criptomoneda, se recalcula Sí.
la conversión para dicha criptomoneda y, si la
criptomoneda previa era una de las criptomonedas
83
almacenadas, se añade a la sección de
criptomonedas.
Cuando se pulsa el botón de eliminar, se muestra Sí.
la pantalla como si entrada por primera vez.
Ningún campo de la edición del usuario debe estar Sí. Se le muestra al usuario un mensaje por
vacío. pantalla
El formato del email debe ser válido. Sí. Se le muestra al usuario un mensaje por
pantalla.
El campo contraseña y repetir contraseña deben Sí. Se le muestra al usuario un mensaje por
ser iguales. pantalla.
El email introducido no debe existir en la base de Sí. Se le muestra al usuario un mensaje por
datos. pantalla.
Si todos los campos son válidos, se guardan los Sí.
datos del usuario se muestra la pantalla en modo
vista.
Si se pulsa el botón de cancelar en el modo Sí
edición, se vuelve al modo vista.
Si se pulsa en el icono del menú del toolbar de la Sí.
pantalla, permite navegar a las pantallas de
noticias, conversor, usuario y preferencias del
usuario.
Tabla 48. Pruebas en pantalla de usuario
84
Otro punto importante ha sido la obtención de datos a partir de APIs Externas,
concretamente la API de noticias. Ciertas funcionalidades solo estaban
disponibles en una versión de pago. Por lo tanto, se ha tenido que reencauzar el
desarrollo para poder aplicar los datos que se obtienen a partir de las
funcionalidades que estaban en la versión gratuita. Además, la librería de
deserialización ha tenido problemas con la API externa que obtiene la frase del
día, teniendo que personalizar el servicio establecido y deserializar la
información a partir de otra librería.
4. Conclusiones
85
ellas estarán presentes en futuros proyectos, tanto profesionales como
personales, con el fin de asentar los conocimientos obtenidos como en la
realización exitosa de los objetivos que se planteen.
Uno de los objetivos más complejos que se plantearon desde el inicio fue el
poder gestionar, de manera personal, la consecución de este proyecto. El tener
que compaginar un trabajo a jornada completa y vida personal, con el desarrollo
del trabajo de fin de máster ha supuesto un reto, día a día, en la gestión del
tiempo y en la autodisciplina. Esto ha llevado a una conclusión clara: para realizar
un proyecto completo de forma solitaria, se requiere de una gran cantidad de
tiempo. Por lo tanto, siempre hay que pensar de forma realista la planificación de
cualquier proyecto que se tenga entre manos, con el fin de evitar abarcar
demasiados objetivos que no puedan ser alcanzados en un tiempo establecido,
provocando malestar y baja autoestima en el desarrollador.
Como líneas de trabajo futuro, se establecen aquellos casos de uso que no han
podido realizarse durante la fase de implementación, que están determinados en
el punto 3.3 de esta memoria. Además, se pueden incluir ciertas funcionalidades
que pueden otorgar un valor añadido a la aplicación:
86
5. Glosario
• Play store: Tienda de aplicaciones móviles para dispositivos con sistema operativo
Android.
• Pantalla splash: Primera pantalla visible para el usuario cuando inicia la aplicación.
• Pantalla modal: Pantalla de tamaño reducido donde el usuario solo puede actuar
dentro de la misma, estando los demás elementos de la aplicación inaccesibles.
• Adobe XD: Software para crear y compartir interfaces para aplicaciones webs y
móviles, con el foco puesto en la experiencia de usuario.
6. Bibliografía
§ [1] Un 48% de la población utiliza apps de finanzas según el estudio de IAB Spain.
[En línea]. [Fecha de consulta: 17/09/2021]. URL: https://lapublicidad.net/un-48-de-
la-poblacion-utiliza-apps-de-finanzas-segun-el-estudio-de-iab-spain/
87
§ [2] Measuring global crypto users. [En línea]. [Fecha de consulta: 18/09/201]. URL:
https://crypto.com/images/202107_DataReport_OnChain_Market_Sizing.pdf
§ [5] CoinGecko – Bitcoin & Cryptoconcurrency Price Tracker. [En línea]. [Fecha de
consulta: 21/09/2021]. URL:
https://play.google.com/store/apps/details?id=com.coingecko.coingeckoapp
§ [6] The Crypto App – Widgets, Alertas, Noticias. [En línea]. [Fecha de consulta:
22/09/2021]. URL:
https://play.google.com/store/apps/details?id=com.crypter.cryptocyrrency
§ [7] Crypto News: Noticias, Precios de Bitcoin, Alertas. [En línea]. [Fecha de
consulta: 23/09/2021]. URL:
https://play.google.com/store/apps/details?id=com.cryptonews
§ [9] Criptomoneda y Wallet: qué son y cuáles son las diferencias. [En línea]. [Fecha
de consulta: 25/09/2021]. URL: https://www.xataka.com/basics/criptomoneda-
wallet-que-cuales-diferncias
§ [10] Android Statistics (2021). [En línea]. [Fecha de consulta: 26/09/2021]. URL:
https://www.businessofapps.com/data/android-statistics/
§ [11] 5 key benefits of Native Mobile App Development. [En línea]. [Fecha de
consulta: 27/09/2021]. URL: https://clearbridgemobile.com/benefits-of-native-
mobile-app-development/
§ [12] Why Choose Kotlin over Java? [En línea]. [Fecha de consulta: 28/09/2021].
URL: https://medium.com/@ChromeInfotech/why-choose-kotlin-over-java-
3d9889bdce12
§ [14] Diseño centrado en el usuario: aprende cómo crear la mejor experiencia. [En
línea]. [Fecha de consulta: 07/10/2021]. URL:
https://blog.hubspot.es/marketing/diseno-centrado-usuario
88
7. Anexos
Cuando un usuario abre la aplicación por primera vez, verá la pantalla de login.
Deberá acceder a la pantalla de registro mediante el botón de crear cuenta. Una
vez en la pantalla de registro, deberá insertar los datos necesarios y crear una
cuenta. Automáticamente será redirigido a la pantalla de login, donde podrá
insertar los datos correspondientes, y acceder a la pantalla de home.
Una vez en la pantalla home, podrá añadir las criptomonedas que desea seguir
a través del botón añadir de la sección de criptomonedas. También podrá añadir
criptomonedas en las que tenga alguna inversión a través del botón de añadir de
la sección de portfolio.
89
Figura 58. Imágenes manual de usuario (2)
90