Memoria del proyecto
Definición de objetivos
Estas fechas están sujetas a modificación en función del avance de
el uso de Android Studio.
1º mes: Se intentarán finalizar los diseños de la aplicación, ventanas y toda
la interfaz gráfica y de usuario, también se pensarán nuevas ideas y mejoras
de la aplicación.
2º y 3º mes: Se empezará a programar sobre las ideas y los diseños
realizados el primer mes, primero se programará la interfaz sin
funcionalidad y una vez acabada, se le irán añadiendo funcionalidades y
dinámicas a la interfaz.
4º mes: Se estima tener terminada la interfaz gráfica y la mayoría de las
funcionalidades operativas, entonces se intentará finalizar todas las
funciones lógicas y mejorar y optimizar la aplicación.
5º mes: Una vez acabada la aplicación, se hará un análisis de la misma y se
pensarán en mejoras y cambios posibles para tener la versión definitiva de
la aplicación.
Análisis de competencia
Esta aplicación va dirigida en su mayoría para un público joven (15-30
años).
Los competidores indirectos serían todas las redes sociales: BeReal
,TikTok, Instagram, Meta, X...
Los competidores directos principales serían BeReal y TikTok Now, ya que
tienen una faceta bastante similar y un objetivo parecido al de esta
aplicación.
BeReal
Esta red social busca la autenticidad por encima de todo.
En ella no vas a encontrarte con fotografías hipereditadas que muestran una realidad
incierta, sino que verás momentos concretos captados en ese mismo instante por sus
usuarios. Es algo espontáneo, sin pulir ni editar, y eso le da un carácter totalmente
diferenciador. By: xakatamovil
Datos de BeReal
Tipo de programa Aplicación móvil
Autor Alexis Barreyat y Kevin Perreau
Lanzamiento inicial 2020
Idiomas Plurilingüe
Información técnica
Programado en Swift, Kotlin
Plataformas iOS, Android
admitidas
TikTok Now
“Cada día y en el momento más inesperado la aplicación te pide que compartas una foto de lo que estás
haciendo.
Y no es un selfie a secas, si no que la imagen es una composición de lo que captura tu cámara frontal y tu
cámara trasera.“ By: xatakamovil
Competidores Directos:
BeReal:
Descripción: BeReal es una aplicación móvil lanzada en 2020, dirigida a un público joven
que no quiera gastar mucho tiempo en una red social. (Coincide con el valor de nuestra
aplicación y el enfoque es parecido).
Tecnología: Programada en Swift para iOS y Kotlin para Android.
Fortalezas:
Experiencia de varios años en el mercado.
Enfoque en la autenticidad y conexión verdadera y familiar.
TikTokNow:
Descripción: TikTokNow es una aplicación móvil lanzada en 2020, orientada a un
público joven que busca una experiencia ágil en redes sociales. La plataforma destaca por
su énfasis en la autenticidad y conexiones genuinas.
Tecnología: Desarrollada en Swift para iOS y Kotlin para Android.
Fortalezas:
Énfasis en la Autenticidad: La aplicación se distingue por su compromiso con fomentar
conexiones genuinas y contenido auténtico, resaltando experiencias reales y relatables.
Soporte Multilingüe: Para garantizar la inclusividad y accesibilidad a nivel global.
Competidores Indirectos:
Redes Sociales Convencionales:
Instagram:
Fortalezas: Amplia base de usuarios, características visuales atractivas y pioneros.
Desafíos: Saturación de contenido (hay muchísimos usuarios, por lo cual mucho
contenido), menos enfoque en la autenticidad (usuarios tratados como números).
Meta/Facebook:
Fortalezas: Diversidad de funciones (muchas funcionalidades integradas en una sola
aplicación), y la integración con otras plataformas (nuestra app también lo hará).
Desafíos: Mayor rango demográfico (está en todo el mundo la aplicación), privacidad
comprometida.
Estrategias de Diferenciación:
Innovaciones:
ALWAYS: En nuestro plan estratégico, nos comprometemos a mantenernos a la
vanguardia de las innovaciones tecnológicas.
Planeamos implementar una buena privacidad (cotizada estos últimos años) y escuchar
a la comunidad principalmente para los cambios y actualizaciones que pida el público
ofreciendo así a los usuarios una experiencia única y actualizada.
BeReal: BeReal ha evolucionado mucho su tecnología constantemente desde su
lanzamiento en 2020.Se han realizado actualizaciones significativas en la interfaz de
usuario.
Además, BeReal ha integrado varias funcionalidades para mejorar la interacción y la
autenticidad de la plataforma. Pero no ha escuchado mucho a su comunidad.
Estrategias de Monetización:
ALWAYS: Nuestra estrategia de monetización se centra en la diversificación de fuentes
de ingresos.
Implementaremos anuncios publicitarios de manera equilibrada para no saturar la
experiencia del usuario, proporcionando la opción de eliminar anuncios a través de una
pequeña tarifa única.
También ofreceremos funcionalidades premium, como subir 4 fotos al día en vez de 2.
Además, exploraremos oportunidades de colaboración y patrocinio con marcas afines a
nuestra aplicación.
BeReal: BeReal no tiene una fuente ingresos clara pero el CM mencionó que han obtenido
de ingresos por la app un total de 0€.
La plataforma también ha explorado colaboraciones estratégicas con marcas
(NudeProject por ejemplo) influyentes para promocionar productos y servicios dentro
de la aplicación, generando ingresos adicionales.
Análisis de recursos software, hardware y justificación de la solución.
Recursos Software:
IDE:
Android Studio y Eclipse: Se eligieron Android Studio y Eclipse como
entornos de desarrollo debido a su amplia aceptación en la comunidad de
desarrollo de aplicaciones móviles para Android. Android Studio, en
particular, es la herramienta estándar recomendada por Google para el
desarrollo de aplicaciones Android.
Base de Datos:
Cloud Firestore: Es una base de datos de Google NoSQL orientada a los
documentos que casa perfectamente con Android Studio, ya que, dentro de
este IDE, se ofrece una configuración muy detallada, clara y concisa de
como implementar Firebase en tu proyecto y sus ventajas.
Lenguaje de Programación:
Java: Como lenguaje de programación principal. Es versátil y muy utilizado
en todo el mundo, especialmente en el desarrollo de aplicaciones Android.
Y es el que hemos visto en clase.
API: (IMPLEMENTACIÓN FUTURA)
instagram4j: Se optó por la API instagram4j para la integración con
Instagram debido a su documentación completa y a las buenas experiencias
y valoraciones de los usuarios.
Ofrece confiabilidad y funcionalidad para conectar la aplicación con la
plataforma de Instagram.
Analíticas y Estadísticas:
Google Analytics: Porque es muy accesible, ya que es gratuito y proporciona
análisis detallados sobre el uso de la aplicación y sus estadísticas. Al ser de
Google, tiene una integración fluida y confiable con la aplicación (Android).
Recursos Hardware:
Requisitos Mínimos de Hardware:
Tipo de Móvil y Sistema Operativo Necesario: La aplicación es
compatible únicamente con dispositivos Android que ejecuten los Servicios
de Google Play Android 8 o versiones más recientes.
Dispositivos de Pruebas:
Móvil Android: La fase de pruebas incluirá dispositivos reales con sistema
operativo Android. Este enfoque garantizará una evaluación exhaustiva de
la compatibilidad y el rendimiento en una variedad de dispositivos,
optimizando la experiencia del usuario en ambas plataformas móviles.
Emuladores y Simuladores: Además de las pruebas en dispositivos reales,
se considerará el uso de emuladores y simuladores para abordar diversos
escenarios de uso y verificar la estabilidad y funcionalidad de la aplicación
en entornos controlados.
Versiones de Sistema Operativo Múltiples: Se llevarán a cabo pruebas
en dispositivos Android con diferentes versiones del sistema operativo
para garantizar la compatibilidad con una amplia variedad de usuarios.
Esto incluirá pruebas en versiones anteriores y más recientes del sistema
operativo Android.
Monitoreo Continuo: Con “Profileable” de Android, el cual nos permite ver
la RAM que está utilizando la app según en que pestaña/ventana y nos
permite optimizar la aplicación.
Justificación de la Solución:
Android Studio y Java: Basadas en la familiaridad con ellas, ya que se
han estudiado en clase. Además, son herramientas óptimas y ampliamente
utilizadas en el desarrollo de aplicaciones móviles (hay mucha
documentación sobre ellas).
INSTAGRAM4J: Fundamentada en su documentación extensa y en el
positivo feedback de los usuarios que la han utilizado, lo que sugiere una
integración eficiente y confiable con Instagram.
Google Analytics: Por su gratuidad, robustez y su procedencia de Google
(Android es de Google también), lo que garantiza una herramienta
confiable y rica en características para analizar el rendimiento de la
aplicación.
Cloud Firestore: Razones por las que se ha utilizado:
Sincronización en Tiempo Real:
Que permite que los usuarios vean los datos más recientes sin necesidad de
recargar o actualizar manualmente la aplicación. Esto es muy útil en esta
aplicación ya que requiere colaboraciones y actualizaciones constantes.
Almacenamiento en la Nube:
Los datos en Firebase Cloud se almacenan en la nube, lo que facilita el
acceso desde múltiples dispositivos y reduce la carga de almacenamiento
en el dispositivo del usuario lo cual de forma indirecta influye en el tamaño
de la aplicación a la hora de descargarla y actualizarla
Escalabilidad:
Firebase está diseñado para escalar fácilmente con tu aplicación. Incluso si
empiezas con pocos usuarios, Firebase puede manejar un crecimiento
rápido sin la necesidad de realizar cambios significativos en la
infraestructura de tu base de datos.
Seguridad:
Firebase ofrece reglas de seguridad detalladas para proteger tus datos.
Puedes configurar permisos y restricciones en todas partes de tu base de
datos (autenticación, modificación de datos...) y esto puede ser más difícil
de implementar en otros modelos de bases de datos como SQLite por
ejemplo.
Backups Automáticos y Mantenimiento:
Firebase gestiona automáticamente la copia de seguridad y el
mantenimiento de la base de datos, lo que abstrae a la administración de la
aplicación de manera significativamente.
Autenticación Integrada:
Firebase proporciona un sistema de autenticación robusto que se integra
fácilmente con su base de datos, facilitando la gestión de usuarios y la
protección de datos.
Análisis y Monitoreo:
Firebase incluye herramientas de análisis y monitoreo que te permiten
entender cómo los usuarios interactúan con tu aplicación y detectar
problemas de rendimiento. (Google Analytics)
Gratuidad:
Firebase ofrece un nivel gratuito que puede ser suficiente para aplicaciones
con pocos usuarios, lo que permite a los desarrolladores comenzar sin
incurrir en costos significativos.
Documentación:
Una de las mejores cosas que tiene Firebase es su documentación y su guía
paso a paso de como implementar una función, un producto o como hacer
uso de los que ya tienes implementados además está disponible en varios
idiomas y tiene incluso vídeos explicativos.
Exploración de NoSQL:
Para familiarizarme con las bases de datos NoSQL y así entender las bases
de datos orientadas a documentos.
Empleabilidad:
Al entender las bases de datos NoSQL y las SQL, se cuenta con una ventaja
respecto a la gente que solo domina una de ellas.
Facilidades que ofrece:
Dado que pone al alcance de los desarrolladores funciones como
Autenticación por varios medios como el convencional (correo y
contraseña) y también con Google, Meta... también incluye funciones como
un cuadro de mandos de Analíticas y la fácil implementación dentro del
código Java por parte de Android Studio mediante métodos ya creados y
ejemplos claros en la documentación pues se ha decidido decantarse por
usar Firebase dado que va a facilitar bastante el desarrollo y eficiencia del
proyecto.
Planificación Diagrama de GANTT
Esta es la tabla que se seguirá para crear un Diagrama de Gantt (está sujeta a cambios en
fechas Inicio/Final).
Tras un periodo de tiempo pensando que método de planificación se usará, finalmente se
ha decidido utilizar el Diagrama de Gantt porque es una estructura clara y concisa, se
describe la Actividad a hacer, los Días que se va a tardar en completarse la misma y tanto
el Inicio como el Final en fechas.
Ejemplo de Diagrama de Gantt:
Actividad Inicio Días Final
PMV 01/02/2024 30 02/03/2024
Base de Datos 03/03/2024 14 17/03/2024
Registro 18/03/2024 5 23/03/2024
Login 24/03/2024 3 27/03/2024
Perfil Usuario 28/03/2024 12 04/04/2024
Ajustes Perfil 05/04/2024 7 12/04/2024
Random 13/04/2024 4 17/04/2024
Agregar amigos 18/04/2024 10 28/04/2024
Privacidad 29/04/2024 3 02/05/2024
Perfil Amigo 03/05/2024 10 13/05/2024
Diseño 14/05/2024 10 24/05/2024
Arreglo Bugs 25/05/2024 7 01/06/2024
Pantallazos APP, UX
SPLASH: Esta es la pantalla que aparece por 2 segundos al ejecutar la
aplicación.
Menú principal: Aquí se muestran todas las funciones principales de la
aplicación, el usuario se desplazaría a cada funcion pulsando el icono de la
misma.
Mi perfil: En esta pantalla el usuario puede consultar su perfil.
Configuración del perfil: Para acceder a esta pantalla, desde el perfil del
usuario, se debe dar clic a la rueda de ajustes en la parte superior de la pantalla.
Random: Al entrar a este apartado de la aplicación, el usuario verá un diálogo
el cual informa de cuantos intentos de ver una foto aleatoria le quedan hoy (0 o
1).
Reminders: Esta pantalla permite al usuario elegir un día del calendario y ver
que Reminder fue hecho ese día
My Memoraes: En este apartado de la aplicación el usuario podrá ver a sus
amigos y las fotos que han subido el día de hoy.
Subapartado Memoraes: El usuario puede acceder a este apartado clicando
en el título donde dice My Memoraes en el apartado My Memoraes.
Base de Datos
¿Por qué Firebase?
Después de dedicar bastante tiempo a la elección de la base de datos que se va a utilizar
para el proyecto, se ha decidido utilizar el SGBD Firebase y estas son las principales
razones:
Sincronización en Tiempo Real:
Que permite que los usuarios vean los datos más recientes sin necesidad de
recargar o actualizar manualmente la aplicación. Esto es muy útil en esta
aplicación ya que requiere colaboraciones y actualizaciones constantes.
Almacenamiento en la Nube:
Los datos en Firebase Cloud se almacenan en la nube, lo que facilita el acceso desde
múltiples dispositivos y reduce la carga de almacenamiento en el dispositivo del
usuario lo cual de forma indirecta influye en el tamaño de la aplicación a la hora
de descargarla y actualizarla
Escalabilidad:
Firebase está diseñado para escalar fácilmente con tu aplicación. Incluso si
empiezas con pocos usuarios, Firebase puede manejar un crecimiento rápido sin
la necesidad de realizar cambios significativos en la infraestructura de tu base de
datos.
Seguridad:
Firebase ofrece reglas de seguridad detalladas para proteger tus datos. Puedes
configurar permisos y restricciones en todas partes de tu base de datos
(autenticación, modificación de datos...) y esto puede ser más difícil de
implementar en otros modelos de bases de datos como SQLite, por ejemplo.
Backups Automáticos y Mantenimiento:
Firebase gestiona automáticamente la copia de seguridad y el mantenimiento de
la base de datos, lo que abstrae a la administración de la aplicación de manera
significativamente.
Autenticación Integrada:
Firebase proporciona un sistema de autenticación robusto que se integra
fácilmente con su base de datos, facilitando la gestión de usuarios y la protección
de datos.
Análisis y Monitoreo:
Firebase incluye herramientas de análisis y monitoreo que te permiten entender
cómo los usuarios interactúan con tu aplicación y detectar problemas de
rendimiento. (Google Analytics)
Gratuidad:
Firebase ofrece un nivel gratuito que puede ser suficiente para aplicaciones con
pocos usuarios, lo que permite a los desarrolladores comenzar sin incurrir en
costos significativos.
Documentación:
Una de las mejores cosas que tiene Firebase es su documentación y su guía paso a
paso de como implementar una función, un producto o como hacer uso de los que
ya tienes implementados además está disponible en varios idiomas y tiene incluso
vídeos explicativos.
Exploración de NoSQL:
Para familiarizarme con las bases de datos NoSQL y así entender las bases de datos
orientadas a documentos.
Empleabilidad:
Al entender las bases de datos NoSQL y las SQL, se cuenta con una ventaja respecto
a la gente que solo domina una de ellas.
Facilidades que ofrece:
Dado que pone al alcance de los desarrolladores funciones como Autenticación por
varios medios como el convencional (correo y contraseña) y también con Google,
Meta... también incluye funciones como un cuadro de mandos de Analíticas y la
fácil implementación dentro del código Java por parte de Android Studio mediante
métodos ya creados y ejemplos claros en la documentación pues se ha decidido
decantarse por usar Firebase dado que va a facilitar bastante el desarrollo y
eficiencia del proyecto.
Descripción general de las Colecciones y Documentos
La base de datos en Firebase Cloud Database consta de dos colecciones principales:
Usuarios e Images. A continuación, se detalla la estructura y los campos presentes en
cada colección.
Colecciones y Estructura de Datos
Colección: Usuarios
Cada documento dentro de la colección Usuarios está identificado por un UUID
aleatorio que representa a un usuario único y no repetible. Los campos presentes en
cada documento de esta colección son los siguientes:
• Descripcion: Una descripción del usuario.
o Ejemplo: "Descripción por defecto"
• Email: La dirección de correo electrónico del usuario
o Ejemplo:
[email protected] • IDUsuario: Un identificador único del usuario dentro del sistema.
o Ejemplo: "yPXh4746VQWBeOnVJ0xX1kM92642"
• NombreUsuario: El nombre de usuario.
o Ejemplo: " danieltfg"
• emoticon1Url: La URL del primer emoticon asociado al usuario.
o Ejemplo: "url_del_emoticon_5"
• emoticon2Url: La URL del segundo emoticon asociado al usuario.
o Ejemplo: "url_del_emoticon_9"
• emoticon3Url: La URL del tercer emoticon asociado al usuario.
o Ejemplo: "url_del_emoticon_8"
• emoticon4Url: La URL del cuarto emoticon asociado al usuario.
o Ejemplo: "url_del_emoticon_12"
• profileImage: La URL de la imagen de perfil del usuario.
o Ejemplo: https://firebasestorage.googleapis.com/v0/b/proyecto-tfg-
e7816.appspot.com/o/profile_images%2FyPXh4746VQWBeOnVJ0xX1kM
92642.jpg?alt=media&token=daa455a9-5439-4eb9-bc45-
08982aee4e908
Colección: Images
Cada documento dentro de la colección Images representa una imagen subida por los
usuarios y contiene los siguientes campos:
• date: La fecha en la que se subió la imagen.
o Ejemplo: "02-06-2024"
• description: Una descripción de la imagen.
o Ejemplo: "Logo ALWAYS"
• imageUrl: La URL donde se almacena la imagen en Firebase Storage.
o Ejemplo: https://firebasestorage.googleapis.com/v0/b/proyecto-tfg-
e7816.appspot.com/o/images%2FJPEG_20240602_152404_7137704835
227480957.jpg?alt=media&token=cec48208-720e-4b1b-8655-
ad2e22156499bd
• time: La hora en la que se subió la imagen.
o Ejemplo: "15:25"
• userId: El identificador único del usuario que subió la imagen.
o Ejemplo: "zaowwxRZguhfVtvLoIwIE2CLYOuH2"
Modelo de Datos Visual
Colección Usuarios:
Cada documento tiene un UUID como ID de documento.
Campos:
• Descripción: Descripción del usuario.
• Email: Dirección de correo electrónico del usuario.
• IDUsuario: Identificador único del usuario.
• NombreUsuario: Nombre de usuario.
• emoticon1Url, emoticon2Url, emoticon3Url, emoticon4Url: URLs de los
emoticonos asociados al usuario.
• profileImage: URL de la imagen de perfil del usuario.
Subcolección Usuarios/solicitudes:
Cada solicitud tiene un ID aleatorio único (requestId).
Campos:
• idUsuarioSolicitante : El UUID del usuario que manda la solicitud.
• nombreUsuarioSolicitante: El nombre de usuario que manda la solicitud.
• requestId: Un ID generado aleatoriamente el cual es único.
Subcolección Usuarios/friends:
Campos:
• NombreUsuario: El nombre del amigo.
• UserId: El UUID del amigo.
Colección Images:
Cada documento tiene un UUID como ID de documento.
Campos:
• userId: Identificador del usuario que subió la imagen. Este campo establece la
relación con el campo IDUsuario de la colección Usuarios.
• date: Fecha en que se subió la imagen.
• description: Descripción de la imagen.
• imageUrl: URL de la imagen en Firebase Storage.
• time: Hora en que se subió la imagen.
Relaciones
Relación Usuario-Imagen
El campo userId en la colección Images corresponde al campo IDUsuario en la colección
Usuarios, lo que permite relacionar cada imagen con el usuario que la subió.
Relación Usuario-Usuario
Dentro de cada usuario, existe la subcolección friends la cual tiene documentos los
cuales son el id del amigo entonces si en la subcolección del Usuario 1 existe el
documento con el nombre del id del Usuario 2 y viceversa están relacionados.
Capturas de Pantalla
Este es un ejemplo de cómo está organizada la base de datos y cómo sería un ejemplo
real
Usuarios:
Usuarios/friends: Aquí hay un ejemplo real de un amigo dentro de un Usuario.
Usuarios/solicitudes: Y aquí se puede ver otro ejemplo real en este caso de una solicitud
de amistad mandada por el usuario danitfg a rephix8
Images:
Estas son las reglas que tienen los datos para garantizar la seguridad.
Y aquí hay algunos ejemplos de Autenticación de usuarios reales en la aplicación
Diagrama de Clases UML, objetos y propiedades
Un Diagrama UML es una forma de visualizar la idea de un sistema y es muy usado en
software orientado a objetos como Java
En concreto, se va a utilizar el Diagrama de Clases UML cuya utilidad es modelar la
estructura estática del sistema, sus Clases, Atributos, Operaciones y las relaciones entre
sí.
Ventajas de Usar UML
Claridad y Comunicación:
Facilita la comunicación entre los miembros del equipo de desarrollo y otros
interesados al proporcionar una visualización clara y comprensible del sistema.
Documentación:
Sirve como documentación del sistema durante todo el ciclo de vida del software,
facilitando el mantenimiento y las actualizaciones futuras.
Detección de Errores:
Permite identificar problemas y posibles mejoras en el diseño del sistema antes de su
construcción, lo que reduce los costos y el tiempo de desarrollo.
Estándar de la Industria:
Al ser un estándar ampliamente aceptado, facilita la colaboración y la integración de
equipos y herramientas diversas.
Reutilización:
Promueve la reutilización de componentes y patrones de diseño al proporcionar una
representación clara de las estructuras y relaciones dentro del sistema.
Herramienta utilizada para generar el diagrama UML
Para la generación del diagrama UML se ha utilizado Visual Paradigm, que es un
software de diagramas que permite crear diagramas de forma gratuita por 30 días en
cualquier dispositivo con cero configuración y almacenamiento gratuito.
Al ser un software con una interfaz intuitiva y fácil de usar, hace que no se tarde nada en
crear el diagrama que se requiera.
Diagrama UML de Clases
La representación se dividirá en varios apartados para ver clara y ordenadamente el
funcionamiento del diagrama de clases y dentro del GDRIVE habrá una copia de este.
Apartado Friends:
En este apartado está todo lo relacionado con las amistades y los usuarios que son
amigos entre sí.
Apartado Principal:
Este apartado contiene las funciones principales de la aplicación.
Apartado Autenticación:
Este apartado está relacionado con las cuentas de usuario y sus funciones dentro de la
aplicación.
Apartado Adaptador de Imágenes:
Este apartado contiene el adaptador de imágenes junto a su viewHolder para
mostrarlas.