0% encontró este documento útil (0 votos)
60 vistas59 páginas

Proyecto Android Presentar s8

Este documento describe un proyecto de desarrollo de una aplicación móvil para brindar servicios de técnicos de computación en San Juan de Lurigancho. El proyecto busca conectar a técnicos desempleados o subempleados con usuarios que requieran servicios de TI. La aplicación se desarrollará usando Android y la metodología RUP. El proyecto describe la problemática, objetivos, funcionalidades, cronograma, requerimientos, diseño técnico y prototipos de la aplicación.

Cargado por

SEVENTH NIGTH
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
60 vistas59 páginas

Proyecto Android Presentar s8

Este documento describe un proyecto de desarrollo de una aplicación móvil para brindar servicios de técnicos de computación en San Juan de Lurigancho. El proyecto busca conectar a técnicos desempleados o subempleados con usuarios que requieran servicios de TI. La aplicación se desarrollará usando Android y la metodología RUP. El proyecto describe la problemática, objetivos, funcionalidades, cronograma, requerimientos, diseño técnico y prototipos de la aplicación.

Cargado por

SEVENTH NIGTH
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 59

Facultad de Ingeniería

Escuela Profesional de Ingeniería de Sistemas

TÍTULO DEL PROYECTO

IMPLEMENTACIÓN DE UNA APLICACIÓN MÓVIL PARA BRINDAR SERVICIO


ESPECIALIZADO EN CÓMPUTO MEDIANTE TÉCNICOS EMPRENDEDORES DE SAN
JUAN DE LURIGANCHO-2021.

INTEGRANTES:

HUINCHO CHAVEZ, PRUDENCIO (orcid.org/0000-0002


6558-8242)
PONTE SOLIS JEAN FRANCO (orcid.org/0000-0001-9685-
565X)
QUISPE SILVA, CRISTIAN JUNIOR (orcid.org/0000-0003-
0105-4775)
VILLARREAL CHAVEZ, HOLDRECH ANGEL
(orcid.org/0000-0002-0283-6552)
GAMERO GUEVARA, JOSE (orcid.org/0000-0001-5613-
8621)

CURSO: PROGRAMACIÓN DE APLICACIONES

MÓVILES

DOCENTE: MG. JOSE ANTONIO OGOSI AUQUI

(orcid.org/000-0002-4708-610X)

LIMA
2021
CONTENIDO

1 INTRODUCCIÓN 6

2. DEFINICIÓN DEL PROYECTO 7


DESCRIPCIÓN DE LA PROBLEMÁTICA 9
OBJETIVOS DEL PROYECTO
FUNCIONALIDADES 10

3. CALENDARIO DEL PROYECTO MÓVIL 11


ENTREGAS 11
DETALLE DE ENTREGAS 12
CRONOGRAMA 14

4. INFRAESTRUCTURA 14
ELEMENTOS HARDWARE 14
ELEMENTOS SOFTWARE. 15

5. DOCUMENTACIÓN 19
SISTEMA OPERATIVO: ANDROID 19
REQUERIMIENTO FUNCIONALES 21
5.1.1 DESCRIPCIÓN BÁSICA 21
5.1.2 SEGURIDAD 22
REQUERIMIENTO NO FUNCIONALES 23

5.1.3 DISPONIBILIDAD 23
5.1.4 INTERFAZ GRÁFICA 23
CASOS DE USO. 23
DISENO TECNICO 28
5.1.5 ARQUITECTURA DEL SERVICIO 30
5.1.6 ARQUITECTURA FÍSICA 31
5.1.7 ARQUITECTURA LOGIC A 31
5.1.7.1 CAPA DE PRESENTACIÓN 33

5.1.8 ARQUITECTURA DE BASES DE DATOS 34


5.1.9 DIAGRAMA DE SECUENCIA. 34
5.56 PROTOTIPO (DEPENDE DEL PROYECTO) 37
5.5.6.1 BOCETO IN ICIAL
5.5.6.2 PROTOTIPO HORIZONTAL
DE ALTA CALIDAD 37
5.5.6.2.1 P ANTAL LA PRINCIPAL 38
5.5.6.2.2 INFORMACIÓN 40
5.5.6.2.3 VER ARTÍCULOS. 41
5.5.6.2.4 BÚSQUEDA ARTICULO 41
5.5.6.2.5 INSERTAR ARTICULO 42
5.5.6.2.6 ACTUALIZA ARTÍCULO 42
5.5.6.2.7 BORRAR ARTÍCULO 43

5.5.6.2.9 CHAT. 44

5.5.6.2.11 COMPARTIR. 45

6. IMPLEMENTACIÓN. 45

PREMISAS Y JUSTIFICACIÓN 45
6.1.1 COMENTARIOS EN EL CÓDIGO 47
IMPLEMENTACIÓN DE LA APLICACIÓN MÓVIL. 47
6.1.2 ÁRBOL DEL PROYECTO 48
6.5 HERRAMIENTAS DE TERCEROS S2
6.3.1 GOOGLE FIREBASE S3
6.3.1.1 FIREBASE AUTHENTICATION S4
6.3.1.2 FIREBASE DATABASE SS
6.3.2 HOSTINGER SS

6.4 FUNCIONAMIENTO DE LA APLICACIÓN (DEPENDE DEL PROYECTO)

6.4.1 VER LISTADO DE ARTÍCULOS


6.4.2 INSERTAR UN ARTÍCULO
6.4.3 PAGO
6.4.4 CHAT
6.4.5 UBICACIÓN

CONCLUSIONES Y MEJORAS.
8: BIBLIOGRAFÍA

INTRODUCCIÓN
Debido a la rápida implementación y desarrollo de las plataformas móviles, la programación para
aplicaciones móviles ha pasado rápidamente de un nuevo conocimiento a una necesidad para brindar
soluciones a las necesidades de los ciudadanos. Teniendo esto en cuenta, los dispositivos móviles se
están convirtiendo en un canal de comunicación directo entre servicios y usuarios, de acuerdo con esta
idea, la aparición de aplicaciones ha cambiado por completo, así como también el mercado de las
tecnologías de la información y la comunicación (TIC), contribuyendo así a la creación de empleo.

Un claro ejemplo que nos motiva a crear nuestro proyecto es el caso de Uber que ofrece servicio
donde el desarrollo de este proyecto se basa en un caso muy especial que es en la aplicación de Uber
que ofrece servicios de taxi, y el gran rival que tenía en este mercado de las aplicaciones móviles era
Timbrit que también realizaba los mismo performans, ante esta competencia Timbrit que es una
aplicación móvil que también era para ofrecer servicios ya estaba realizando investigaciones sobre
economías emergentes y trataron de apostaron todo por la tecnología para lograr una gran
competencia en este tipo de mercado. Según Uber, la comunicación directa entre oferta y demanda es
más de un millón de viajes que se realizan con esta aplicación todos los días. Según datos de
diciembre de 2017, Uber está presente en más de 50 países y 250 ciudades de todo el mundo, y realizó
un total de 140 millones de viajes ese año. Aquí podemos mostrar los resultados que se pueden
obtener si se realiza una correcta investigación donde se prioriza la comunicación de la oferta y la
demanda. De igual forma, Timbrit también ha experimentado un crecimiento significativo en los
últimos dos años, pasando de 100 usuarios a 100 usuarios. 1000 usuarios ("Forbes" 2017)

Con el contenido anterior mencionado podemos preguntarnos ¿cómo podemos comunicarnos directa e
indirectamente a las necesidades que afronta nuestro país y usuarios que deseen algún tipo de servicio
o prestar sus servicios en tiempos de codiv-2019, de desempleo que afecta a la economía y en la
población en general y también cómo podemos reducir la brecha de la desigualdad por medio de la
tecnología? Ahora bien, tener que pasar de dispositivos con software prediseñado, a equipos que se
pueden personalizar de acuerdo con las necesidades y gustos de cada usuario, significó dar un poder
sin precedentes atomizar la oferta y demanda de servicios, además de que el gobierno incentive el uso
de la tecnología y fomente la creación de empresas sostenibles.

Del anteriormente comentado, se busca crear una aplicación móvil enfocada a las nuevas tendencias
tecnológicas, esta aplicación va brindar servicios técnicos en computación, que facilita la adquisición
de servicios técnicos en computación tanto software como Hardware, que genera la posibilidad de
ofrecer servicios provenientes de técnicos desempleados o con empleo.
El alcance del desarrollo de este proyecto partió de la idea de los estudiantes de la universidad césar
vallejo, eligiendo al distrito de San Juan de Lurigancho como el sitio inicial para las pruebas del
prototipo, debido al mayor porcentaje de demanda sobre la oferta de contratación de técnicos en
computación. El sistema operativo que se va usar para el prototipo de la aplicación móvil parte del
estudio se eligió el sistema operativo Android por su gran versatilidad que puede instalarse en todos
los dispositivos tecnológicos tanto de última generación y la mínima generación que no solo de adapta
o en celulares sino también en portátiles; siendo un sistema operativo que puede adaptarse sin
problemas a diferentes necesidades de los usuarios.

La metodología usada se basa en la metodología RUP que “Es un desarrollo de ingeniería de software
que facilita un planeamiento que permite ofrecer labores y compromisos dentro de una determinada
estructura de desarrollo, teniendo como objetivo asegurar que la realización del software sea de
prominente índole y así satisfacer los requerimientos de los usuarios, dentro de un límite de tiempo y
presupuesto previsto” (López y Pech, 2016, p.6).

Es una metodología de desarrollo reiterativo que está orientada en la realización de diagramas de


casos de uso, al manejo de los riesgos y al manejo de la arquitectura como tal. La metodología RUP
promueve el rendimiento del grupo, ya que proporciona que los integrantes sin importar el
compromiso que tenga asignado puedan conceder a la base de datos. Permitiendo que todos colaboren
con el mismo estilo, visión y el mismo proceso a proseguir para el crecimiento de un software.
2 DEFINICIÓN DEL PROYECTO
2.1 DESCRIPCIÓN DEL PROBLEMA

En la actualidad donde vivimos en tiempos de pandemia del covid-2019 no ha hecho que busquemos
cómo relacionarnos con distintos usuarios a nivel mundial y nacional con la mano de la tecnología que
siempre nos ha hecho útil para los quehaceres de dia a dia cambiando nuestros hábitos que ha
generado una gran demanda de los servicios que comentaremos, y que servicios son los más
solicitados en estos tiempos de pandemia pues los servicios de técnico de computación, en los inicios
del mes de marzo del 2019 donde llega el covid-2019 a nuestro territorio donde todo el mundo tenía
que guardarse en casa dictada por el gobierno del Perú se pudo reflejar que en los meses de junio-julio
cuando comenzó las clases virtuales donde no todos estamos preparados para iniciar las clases de esta
magnitud donde no todos contaban con una computadora, laptop, Tablet e Internet.
Así como también no debemos de olvidar que hoy en día el desempleo está por encima de factores
normales para los usuarios técnicos de a pie que otorgaban sus servicios a nivel nacional, distrital en
hogares y en empresas.

La población en la actualidad está en búsqueda constantemente de aplicaciones móviles que faciliten


las tareas y trabajos para mejorar su productividad y lograr obtener un trabajo seguro como también
ingresos adicionales que hacen uso de estas aplicaciones donde se han puesto de moda, aprovechando
el gran aumento de desempleo y las nuevas tendencias tecnológicas que se encuentran en nuestras
manos para poder unir la oferta y demanda de los servicios técnicos computacional. Y un claro
ejemplo donde podemos comentar como es el caso de Uber que es una aplicación móvil donde ofrece
sus servicios de taxi particular donde nos da la motivación para poder ingresar a estos mercados en
estos tiempos de pandemia.

La gran demanda que existe actualmente de los clientes y falta conocimiento de usuario en el campo
de la computación se ha generado una gran brecha entre el usuario técnico - cliente esto quizá por falta
de tiempo por labores del teletrabajo que surge inmediatamente un técnico de computación que
solucione los altercados que ocurre en últimos instantes.

Ante esto los alumnos de Universidad César Vallejo del séptimo ciclo va implementar un aplicativo
móvil para que los usuarios con experiencia óptima y certificada puedan ofrecer sus servicios a través
del aplicativo móvil que se ha observado una gran demanda que hay de los clientes que desean
solucionar los problemas que puedan ocurrir en su computadora personal por muchas causas y lo
definimos como:
● Tiempo
● Salud
● Falta de conocimiento
● Covid-2019
● Falta de confianza hacia los técnicos
● Falta de herramientas óptimos
● Temor estropear la computadora personal
● Miedo al ser estafado

Por estas causas mencionadas es por donde surge la gran demanda de los clientes que necesitan de
manera urgente estos tipos de servicio donde el usuario técnico deberá ingresar sus datos personales,
experiencias y labores de igual similitud con pruebas que van a poder observar el lado de los clientes.
Así mismo la prueba de COVID si es necesario ya dependería del cliente que será quien decida con
qué tipo de técnico va interactuar y para esto también el cliente va tener una expectativa del mérito
donde se pueda observar la calificación de los usuarios técnicos y según a la calificación, el usuario
pueda adquirir de los servicios del usuario técnico entonces de acuerdo con el problema expuesto
planteamos la siguiente pregunta:
¿Cómo puede generar servicios el usuario técnico en tiempos de pandemia?
2.2. OBJETIVOS DEL PROYECTO

2.2.1. OBJETIVO PRINCIPAL

Desarrollar una aplicación móvil para generar servicios técnicos profesionales de


cómputo para el público en general.

2.2.2. OBJETIVOS ESPECÍFICOS

● Brindar soporte y actualizaciones con el fin de que el aplicativo sea de


total agrado para el público usuario y cliente y resolver todo tipo de
problemas que se presenten ya sea externos o internos al aplicativo
● Definir requerimientos funcionales y no funcionales para la oferta y
demanda con el fin de elaborar estrategias que garanticen la evolución
del aplicativo
● Realizar pruebas continuas para asegurar el correcto funcionamiento del
aplicativo durante todo el tiempo de funcionalidad.

FUNCIONALIDAD

Android Studio:

Software de desarrollo de aplicaciones móviles de manera nativa para el sistema


operativo Android, esta es utilizada para el desarrollo de aplicaciones móviles.

Rational Rose: Software orientado a objetos con soporte para el modelado


visual y representar gráficamente información, esta es utilizada para realizar los
casos de uso, los diagramas de casos de uso y los diagramas de secuencias.

Balsamiq Mockups 3: Software orientado a objetos para la maquetación y


visualización de aplicaciones, esta es utilizada para la maquetación del aplicativo
web y móvil.

Firebase: Es un software en la nube para el desarrollo de aplicaciones web y


móvil, esta es utilizada para almacenar datos en la base de datos.
Módulo Principal:

El módulo principal, es el primero que le aparecerá tanto


al usuario como al cliente, este constará con 2 botones
principales Técnicos y Registrar Técnicos
Técnicos: Este botón llevará al usuario automáticamente
al módulo de búsqueda de técnicos
Registrar Técnicos: Este botón llevara al usuario al
módulo de Inicio de Sesión para los Técnicos

Módulo de búsqueda de Técnicos:

El módulo de búsqueda de Técnicos, el cual muestra los


técnicos disponibles dependiendo del distrito en que se
encuentra el usuario, mostrando una foto, nombres,
apellidos y ubicación de cada técnico, también se tendrá
una barra de búsqueda en la parte superior el cual
buscará por los siguientes criterios: nombres, apellidos y
ubicación
Módulo de Visualización, contacto y calificación de Técnicos:

Módulo de Visualización, contacto y calificación de


Técnicos, en este módulo se podrá visualizar la
información completa del técnico, también se podrá
calificar por medio de 2 botones (me gusta y no me
gusta), así como también tendrá un botón llamado
“pruebas” el cual abrirá una ventana con imágenes
subidas por el técnico con el fin de mostrar su
experiencia y sus clientes satisfechos, por último contara
con los respectivo enlaces de contacto del técnico
(WhatsApp, Facebook e Instagram)

Módulo de Inicio de Sesión de Técnicos:

Módulo de Inicio de Sesión de Técnicos, consta de 2


campos de texto y 2 botones, el primer campo de texto
será para que el técnico ingrese su correo electrónico, en
el segundo campo de texto se ingresara la contraseña, en
el botón “Iniciar Sesión” se procederá a validar ambos
campos ya mencionados anteriormente y se verificara si
el técnico esta registrado correctamente en las bases de
datos, en caso el correo y contraseña sean correctos se
llevara al Módulo de Modificación de Datos del
Técnico, por último en el botón “Registrarse” lo llevara
al Módulo de Registro de Técnicos.
Módulo de Registro de Técnicos:

Módulo de Registro de Técnicos, En este módulo el


técnico registrara sus datos para luego ser publicado y
mostrado en el módulo de búsqueda de técnicos, este
módulo consta de una imagen por defecto la cual el
técnico podrá modificar, también tiene 8 campos de
texto (nombre, correo, contraseña, teléfono, país, cuidad,
distrito, experiencia) los cuales el técnico tendrá que
ingresar, por ultimo tendrá un botón en la parte inferior
llamado “Registrarse” el cual procederá a validar los
campos y si en caso todo es correcto se registrara al
técnico y se guardara sus datos en la base de datos, en
caso algún campo no cuenta con atributos correctos se
mostrara un mensaje de alerta

Módulo de Modificación de datos del Técnico:

Módulo de Modificación de datos del Técnico, En este


módulo el técnico podrá visualizar su información
registrada en la base de datos y también podrá modificar
su información, Consta de una imagen, 7 campos de
texto (nombre, correo, teléfono, país, ciudad, distrito,
experiencia) y un botón, por último, el botón “Guardar
Cambios” Validara la información y si es correcta la
modificara en la base de datos, en caso la información
sea errónea mostrara un mensaje emergente informando
sobre el error
CRONOGRAMA
4 INFRAESTRUCTURA

4.1 ELEMENTOS HARDWARE

Computadora Procesador Dual-Core 3.0 Ghz.

Memoria RAM DRR3 1333 Ghz.

4gb Unidad de DVD-CD 300 Gb


COMPUTADORA
Disco duro

Monitor LCD 17” Salida Estándar

teclado

4.2 ELEMENTOS SOFTWARE.

Windows 10 Es para usar funciones básicas para la administración de nuestros archivos creados

Android Studio 10 Es para poder desarrollar nuestra aplicación con las herramientas adecuadas (Librerías,
Api, Framework,) lenguaje Java

Rational Rose Vamos a realizar nuestros casos de usos de nuestra aplicación

firebase vamos almacenar la información de todos los clientes y técnicos en una base de datos

Meet Nos sirve para nuestras reuniones en la web para acabar nuestro proyecto

Balsamiq Nos sirve para desarrollar una maquetación tanto móvil como web

DOCUMENTACIÓN
SISTEMA OPERATIVO: ANDROID
¿Qué es Android?

Según Muñoz (2020, pág. 1) indica que “Android es un sistema operativo para
diferentes teléfonos, tablets, teléfonos, relojes, televisores, automóviles y otros que
hoy en día están o han pasado por el mercado”

Origen

Anteriormente de este sistema operativo, una empresa Android INC, con ayuda de G
de Alphabet, estaban trabajando en un sistema de reproductores de video.

Este proyecto impresionó a la empresa gran G, es por eso que el año 2005 decidió
comprar la compañía y dirigió su objetivo a dispositivos táctiles, con el único
objetivo de igualar a Apple, el actualmente conocido iPhone. Convocó a diversas
empresas de hardware y telecomunicaciones, fundaron la Open Handset Alliance.

Es así que, en octubre del 2008, sale al mercado la primera versión de Android, con
el equipo inteligente: HTC Dream.

Android es un gran sistema operativo para


teléfonos móviles que se ha impuesto a
nivel mundial.

En estos tiempos las personas prefieren los


equipos con sistemas operativos Android a
comparación de apple.
REQUERIMIENTO FUNCIONALES

5.1.1 DESCRIPCIÓN BÁSICA

ID: Requerimientos funcionales (descripción) ACTORES DEL


REQ ID: NOMBRES DE LOS SISTEMA
CUS CASOS DE USO DEL
SISTEMA

R1 El sistema contará con pantalla principal donde al técnico-cliente


ingresar a la app se va a observar dos opciones para CUS PRINCIPAL
dirigirse al registro técnico y listado técnico. 001

R2 El sistema permitirá registrar al usuario con correo Cus REGISTRAR TÉCNICO


electrónico y una contraseña definida para los 002 TÉCNICO
ingresos. La app valida los datos ingresados del
usuario y será registrado en una base de datos. Un
usuario registrado no podrá validar de nuevo,
automáticamente le saldrá un mensaje el usuario ya
está registrado

R3 El sistema debe permitir iniciar sesión con el correo Cus INICIAR SESIÓN TÉCNICO
electrónico y contraseña que ha sido registrado para 003
los ingresos definidos. Si el usuario detalla mal el
ingresó al inicio de sesión automáticamente se
mostrará un mensaje usuario invalido.

R4 El sistema permitirá editar perfil después de iniciar Cus EDITAR PERFIL TÉCNICO
sesión donde el técnico podrá ingresar todos los 004
datos requeridos detalladamente en el sistema para
que el cliente tenga acceso a toda su experiencia
bibliográfica (nombre, ciudad, distrito, experiencia y
enlaces de contacto). Toda la información detallada
del técnico será guardada en una base de datos.

R5 El sistema permitirá que el cliente tenga un acceso Cus LISTA DE TÉCNICO CLIENTE
libre al aplicativo donde podrá visualizar un listado 005
de técnicos. El cliente podrá realizar una búsqueda
en el listado y escogerá los más conveniente y
adecuado técnico y ponerse en contacto.

R6 El sistema permitirá mostrar detalles del técnico Cus DETALLE DEL CLIENTE
como el foto de perfil y contará con un icono (LIKE) 006 TÉCNICO
para que el cliente pueda calificar al técnico y
centenera todo su bibliografía y enlaces de contacto
(Facebook, WhatsApp, Instagram, ubicación) de este
modo también se podrá visualizar un slider de
imágenes de su trabajo realizado.

R7 El sistema permitirá acceder a un GOOGLE MAPS Cus UBICACIÓN CLIENTE


para poder revisar la ubicación del técnico. 007

R8 El sistema debe permitir en la pantalla de menú Cus SOLICITAR CLIENTE


inicio dos opciones de las cuales podemos escoger la 008 TECNICO
opción (TÉCNICOS) lo cual nos mandará al listado
de técnicos.

ACTORES DEL SISTEMA

ACTOR DEL SISTEMA DESCRIPCIÓN

El cliente tiene el ingreso libre a la


app para contactar a un técnico y
no tiene los permisos solo la
información

El usuario tiene permisos de


modificar sus datos e ingresar
datos en el sistema

Diagrama de casos de uso del sistema


SEGURIDAD

● Almacenar la información de todos los usuarios en una base de datos para evitar
las alteraciones de los datos registrados.
● La información personal sólo se mostrará al usuario(propietarios)
● La modificación de datos personales lo realizará únicamente el usuario que ya
está registrado

REQUERIMIENTOS NO FUNCIONALES

Lista de requerimientos no funcionales

ID REQUERIMIENTOS CONCEPTOS RIESGO PRIORIDAD


NO FUNCIONALES

RF1 Eficiencia -Tiempo de respuesta Crítico Alta


del sistema

-Número de usuarios
permitidos

RF2 seguridad -Permisos de solo Crítico Alta


usuarios registrados

-Modificación solo
administradores

RF3 -Adaptable Marginal Alta

Fiabilidad -Pesos en bytes

RF4 Mantenibilidad -Facilidad de Crítico Alta


modificación

-Facilidad de pruebas

DISPONIBILIDAD: La disponibilidad de la app será ofrecida aproximadamente 24


horas al día y un total de 365 días, esta app estará disponible para todos los clientes o
personas que desean contar servicio del aplicativo.

INTERFAZ GRÁFICA: Mensajes de alerta cuando el usuario intenta demasiadas


veces ingresar. Validación de contraseña (Mayúsculas, minúsculas, número).

DISEÑO TECNICO

En este proceso mencionan (Lezcano, Carranza 2019). En una arquitectura cliente-


servidor, una aplicación se modela como un conjunto de servicios proporcionados por
los servidores y un conjunto de clientes que usan estos servicios. En este tipo de sistema
los clientes necesitan conocer qué servidores están disponibles y los servicios que éstos
proporcionan, pero normalmente no conocen la existencia de otros clientes. En este
modelo arquitectónico clientes y servidores son procesos diferentes. Como se muestra
en la Figura 1.1 los servidores no necesitan conocer la cantidad ni la identidad de los
clientes, aunque es importante destacar que los servidores pueden, a su vez, ser clientes
de otros servidores.

ARQUIT ECTURA DEL SERVICIO

En la arquitectura de servicio se utilizará los servicios web y el server que siempre están
disponibles para recibir peticiones de los usuarios y puedan ser procesadas mediante
peticiones mastranto las respuestas. El servidor puede procesar cantidades de peticiones,
pero también almacenará los datos ingresados de los usuarios en grandes cantidades. El
WEB SERVICES retornara la petición del cliente mediante un URL mostrando a los
clientes listados o la información que contiene de los usuarios lo cual el cliente accede a
una meta data de toda la información que contiene el App.

Respecto a nuestro aplicativo móvil que se desarrollará se podrá instalar en cualquier


dispositivo inteligente que tenga el sistema operativo Android mínimo de 5.0 lo cual
suele tener una efectividad de 94.1% compatibles de todos los dispositivos que hay en el
mercado lo cual es muy beneficioso para nuestra APP.

ARQUITECTURA FÍSICA

Este presente proyecto en su totalidad se


desarrolla en dos partes. La primera parte consta
con el desarrollo de la aplicación móvil para el
Android para su funcionamiento en los
Smartphone con un sistema operativo lo cual
estará disponible para la instalación o descarga
mediante el uso de internet. Segundo paso se
utilizará una base de datos para poder descargar
el aplicativo mediante el internet para que se
pueda comunicar con una base de datos para que
intercambien información que contiene la app
para tener un mejor rendimiento lo cual el
servidor está conectado las 24 horas disponibles
de la semana para cualquier disposición del
aplicativo.

ARQUITECTURA LÓGICA

CAPAS
Android es un soporte para dispositivos móviles que contiene un acumulador de
software, donde incluye sistemas operativos, middleware básico para el usuario.

A continuación, se dará una visión global de capas cada una de estas capas usan
servicios ofrecidos por las anteriores y ofrece a los suyos propios a las capas de niveles
superior

Aplicaciones: Es la última capa nativa (programadas en C o C + +) como administrador


en el lenguaje java que están incluido como defecto de Android como que el usuario se
añade posteriormente, estas aplicaciones usan los servicios de las APIS y librerías de los
niveles anteriores. En esta capa encontramos la aplicación del sistema: que es Inicio
(Home) que permite ejecutar otras aplicaciones mediante una lista donde se puede
colocar aplicaciones widgets

Framework de Aplicaciones: Representa un conjunto de herramientas de desarrollo de


cualquier aplicación. Toda aplicación en Android de su propio usuario que es un
conjunto de APIS y el mismo “framework”, representado por este nivel.

Tiempo de ejecución de Android: Al mismo nivel de librerías de Android se sitúa en


el entorno de ejecución. Este se constituye por librerías con multitud de clases de que
se decodifican en java y la ventaja de estas aplicaciones se compilan una única vez para
distribuirse con total garantía en cualquier dispositivo Android.

Núcleo Linux: Android utiliza el núcleo de Linux 2.6 como una capa de abstracción
para el hardware en los dispositivos móviles. Esta compara cualquier componente
hardware pueda ser llamado mediante las llamadas correspondientes. Siempre que un
fabricante incluye un nuevo elemento de hardware, para esto primero se debe realizar es
crear las librerías dentro del driver del kernel de Linux en el propio Android que
también se encarga de gestionar los diferentes recursos del teléfono (energía, memoria,
etc.) en el proceso de la comunicación

PANTAL LA PRINCIPAL
se muestra la pantalla de inicio para los usuarios (login) la página principal contiene de
un correo electrónico y contraseña para poder ingresar o DE este modo también
contiene (REGISTRARSE AQUÍ) para que puedan registrarse los usuarios nuevos

DIAGRAMA DE SECUENCIA
TÉCNICOS
CLIENTE
PROTOTIPO
BOCETO
Ventana Principal:
Definición: Se mostrará 2 botones principales los cuales direccionará a
las ventanas de Inicio de Sesión y Búsqueda de Técnicos.

N° Nombre Descripción

1 Botón Técnicos Direccionara a la ventana de Búsqueda de técnicos

2 Botón Registrar Direccionara a la ventana de Inicio de Sesión de Técnicos


Técnicos

2
Ventana de Búsqueda de Técnicos:
Definición: Muestra todos los técnicos disponibles y su información
relevante.

N° Nombre Descripción

1 Buscador Permite buscar entre todos los técnicos disponibles bajo


los siguientes criterios: nombres, apellidos y ubicación
2 Botón Atrás Redirecciona a la pantalla anterior
3 Imagen de Perfil Permite visualizar la imagen de perfil de cada técnico

4 Cuadro de Muestra los nombres, apellidos y ubicación de cada


Información técnico
5 Seleccionar Elemento Nos redirecciona a la ventana de Visualización, contacto y
calificación de Técnicos

5
Ventana de Visualización, contacto y calificación de Técnicos:
Definición: Nos muestra la información relevante de cada técnico seleccionado en
la ventana de “Búsqueda de Técnicos”, también nos permite ponernos en contacto
con el técnico mediante sus redes sociales (WhatsApp, Facebook, Instagram), por
último, nos permite calificar al técnico con los botones de me gusta y no me gusta.
N° Nombre Descripción

1 Botón Atrás Redirecciona a la pantalla anterior


2 Imagen Nos permite Visualizar la foto de perfil del técnico
3 Botones de calificación Nos permite calificar al técnico con un “me gusta” y un
“no me gusta”
4 Cuadro de Información Muestra la información completa del técnico (servicios
que brinda, certificados y/o títulos, descripción)
5 Botón pruebas Nos muestra un cuadro con imágenes de pruebas del
autor de sus clientes satisfechos
6 Enlaces de Contacto Nos permite contactar con el técnico por medio de
WhatsApp, Facebook e Instagram

6
Ventana Inicio de Sesión de Técnicos:
Definición: En esta ventana verificaremos si un técnico existe en la base
de datos y a su vez nos da acceso a la ventana de “Registro de Técnicos”
N° Nombre Descripción
1 Campo Correo Campo de texto donde se ingresará el correo electrónico
Electrónico
2 Campo Contraseña Campo de texto donde se ingresará la contraseña del
técnico
3 Botón Iniciar Sesión Nos permite validar si los campos de correo electrónico y
contraseña son de un técnico existente en la base de
datos, en caso el técnico exista nos redireccionara a la
ventana de “Modificación de Datos del Técnico”, en caso
sea incorrecto nos mostrara una ventana emergente
mostrando el error
4 Botón Registrarse Nos direccionará a la ventana “Registro de Técnicos”

4
Ventana de Registro de Técnicos:
Definición: Esta ventana nos permite registrar los datos de un nuevo técnico y
guardarlo en la base de datos
N° Nombre Descripción
1 Botón Atrás Redirecciona a la pantalla anterior
2 Títulos de la ventana títulos que ayudan a la presentación y orientación al
usuario
3 Imagen de Perfil Nos permite subir una imagen de perfil del técnico
4 Campos de Nos permite ingresar la siguiente información:
información nombres, correo, contraseña, teléfono, país, ciudad,
distrito y experiencia
5 Botón Registrarse Valida toda la información de los campos ya
mencionados, si la información de los campos es
correcta procede a registrar y guardar toda la
información en la base de datos, en caso contrario
aparecerá una ventana emergente indicando el error

Ventana de Modificación de datos del Técnico:


Definición:
Nos permite visualizar modificar los datos de cada técnico

N° Nombre Descripción
1 Botón Atrás Redirecciona a la pantalla anterior
2 Títulos de la ventana títulos que ayudan a la presentación y orientación al
usuario
3 Imagen de Perfil Nos permite visualizar y editar la imagen de perfil del
técnico
4 Campos de Nos permite visualizar y modificar la siguiente
información información: nombres, correo, contraseña, teléfono,
país, ciudad, distrito y experiencia
5 Botón Guardar Valida toda la información de los campos ya
Cambios mencionados, si la información de los campos es
correcta procede modificar y guardar toda la
información en la base de datos, en caso contrario
aparecerá una ventana emergente indicando el error
1

5
PROTOTIPO HORIZONTAL
DESCRIPCION DEL PROTOTIPO HORIZONTAL

En el módulo principal aparecerán dos usuarios como el cliente y el técnico que


constarán de dos botones de este modo podrán acceder a las ventanas correspondientes.
el botón(técnico) nos mandará a una ventana de listado de técnicos y el botón (registro
técnico) me dirigirá la ventana LOGIN donde podremos iniciar sesión con un usuario
registrado o de tal modo si no cuenta pueda registrase para los accesos definidos

En el módulo se puede observar dos ventanas donde se encuentra la opción LOGIN e


INICIO. el proceso que cumplen son los siguientes: el LOGIN retornar al menú
principal con botón definido como una flecha en la parte superior y la función que
cumple es regresar a la pestaña menú principal.
En el módulo observamos ventanas, la primera ventana es LOGIN que cumple la
función específica con un botón (iniciar sesión y registrase aquí) donde
REGISTRARSE AQUÍ nos dirige a la ventana (RIGISTRAR) para ingresar nuestros
datos. Y el botón INICIAR SESSION nos dirige a la ventana (EDITAR REGISTRO) lo
cual nos permite editar nuestros datos ingresados.
En el módulo se visualiza dos ventanas donde podemos observar que la ventana
(REGISTRAR) retornar a la ventana LOGIN con una flecha que se observa en la parte
superior, De igual manera el botón (REGISTRARSE) cumple la función de validar los
registros para luego poder iniciar sesión con la cuenta registrada adecuadamente.

En los módulos propuestos se visualiza ventanas donde EDITAR REGISTRO cumple


una función de retornar a la ventana LOGIN con un botón especificada con una flecha,
de igual manera lo realiza con el botón (actualiza) donde los datos editados o
actualizadas se corrigen automáticamente.
En este módulo se observa 3 ventanas donde (DETALLE DEL TECNICO) retorna a la
ventana (LISTA DE TECNICOS) con un botón (flecha) de igual manera lo realiza esta
ventana hasta llegar a la ventana INICIO y la función que cumples es retrocedes por
ventanas hasta llegar al menú INICIO.

En el módulo podemos observar una lista de técnicos donde accede a detalle técnico y
encontraremos información especificada luego nos dirige a la ventana de UBICACIÓN
donde se ubica al técnico más cercano del cliente con un icono mapa.
En esta ventana visualizada se observa que (LISTA DE TECNICOS) retorna hasta
ventana INICIO con una un botón(flecha).
En este módulo de ventanas se observa que DETALLE TECNICO retorna a la LISTA
TECNICO y también se visualiza el icono de mapa que nos dirige a una venta de
UBICACIÓN.

La ventana visualizada se observa que todos retornar hasta la ventana INICIO con una
flecha(botón) que se encuentra en la parte superior.
CODIFICANDO EN ANDROID LAYOUT

ACTIVITY_MAIN
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@drawable/bg_color"
tools:context=".MainActivity">

<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:alpha="0.5"/>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_marginBottom="350dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="COMPU UCV"
android:textSize="35sp"
android:textColor="@color/colorWhite"
/>
</LinearLayout>

<Button
android:id="@+id/btn_buscar"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="TECNICOS"
android:layout_gravity="center"
android:layout_marginBottom="20dp"
android:backgroundTint="@color/colorWhite"
android:background="@drawable/rounded_button"
android:onClick="buscar"
/>
<Button
android:id="@+id/btn_login"
android:layout_width="200dp"
android:layout_height="50dp"
android:text="REGISTRO DE TECNICOS"
android:layout_gravity="center"
android:layout_marginTop="200dp"
android:background="@drawable/rounded_button"
android:backgroundTint="@color/colorWhite"
android:onClick="login"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
ACTIVITY_LOGIN
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="@drawable/bg_color"
tools:context=".Login">

<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:alpha="0.5"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>

<ImageView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:src="@drawable/opticdev_gray" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="47dp"
android:layout_marginRight="30dp"
android:orientation="horizontal"
>

<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_baseline_email_24" />

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/colorWhite"

>

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEmail"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Correo Electronico"
android:inputType="textEmailAddress"
android:textColorHint="@color/colorWhite"
android:textSize="17sp"
android:theme="@style/EditTextWhite"/>

</com.google.android.material.textfield.TextInputLayout>
ACTIVITY_REGISTRO_TECNICOS
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Registro_Tecnicos">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<io.github.florent37.shapeofview.shapes.ArcView
android:layout_width="match_parent"
android:layout_height="210dp"
android:elevation="4dp"
app:shape_arc_height="20dp"
app:shape_arc_position="bottom"
>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_color" />

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="REGISTRATE AHORA"
android:textColor="@color/colorWhite"
android:textAlignment="center"
android:textStyle="bold"
android:layout_marginTop="50dp"
android:textSize="22dp"/>

<ImageView
android:layout_width="120dp"
android:layout_height="120dp"
android:src="@drawable/ic_person"
android:layout_gravity="center"
android:layout_marginTop="40dp"/>

<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/circleImageBack"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_margin="10dp"
android:src="@drawable/ic_arrow_back" />

</io.github.florent37.shapeofview.shapes.ArcView>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="30dp"
android:orientation="horizontal"
>

<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_person_grey" />

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputUsername"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Nombre del usuario"
android:inputType="textPersonName"
android:textSize="17sp"
/>

</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal"
>

<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_email_grey" />

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputEmail"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Correo Electronico"
android:inputType="textEmailAddress"
android:textSize="17sp"
/>

</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal">

<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_password_grey" />

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputPassword"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Contraseña"
android:inputType="textPassword"
android:textSize="17sp"
android:layout_marginTop="11dp"/>
</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal">

<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_password_grey" />

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputConfirmPassword"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Confirmar Contraseña"
android:inputType="textPassword"
android:textSize="17sp"
android:layout_marginTop="11dp"/>
</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:orientation="horizontal">

<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginTop="20dp"
android:layout_marginRight="5dp"
android:src="@drawable/ic_phone_grey" />

<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/textInputPhone"
android:layout_width="match_parent"
android:layout_height="55dp"
android:hint="Telefono"
android:inputType="text|phone"
android:textSize="17sp"
android:layout_marginTop="11dp"/>
</com.google.android.material.textfield.TextInputLayout>

</LinearLayout>

<Button
android:id="@+id/btn_Register"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="REGISTRARSE"
android:textColor="@color/colorWhite"
android:layout_marginBottom="20dp"
android:layout_gravity="bottom"
android:layout_margin="25dp"
android:background="@drawable/rounded_button"
android:backgroundTint="@color/colorBlue">
</Button>
</LinearLayout>
</ScrollView>
JAVA CLASS
MAINACTIVITY
package com.qs.compuucv;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {


Button btn_buscar, btn_login;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void buscar(View view){


Intent buscarActivity = new Intent(this,BuscarTecnicos.class);
startActivity(buscarActivity);
}

public void login(View view){


Intent loginActivity = new Intent(this,Login.class);
startActivity(loginActivity);
}
}

LOGIN ACTIVITY
package com.qs.compuucv;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.android.material.textfield.TextInputEditText;

import de.hdodenhof.circleimageview.CircleImageView;

public class Login extends AppCompatActivity {


//1.definimos las variables
CircleImageView mCircleImageView;
Button btningresar;
TextView textViewRegister;
//3.definimos las varibles para obtener los datos del inicio sesion
TextInputEditText mTextInputEmail;
TextInputEditText mTextInputPassword;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//2.instanciamos el mCirclerImageView
mCircleImageView = findViewById(R.id.circleImageBack);
//4.casteamos instanciamos los TextInputEditText
mTextInputEmail = findViewById(R.id.textInputEmail);
mTextInputPassword = findViewById(R.id.textInputPassword);

mCircleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}

//5. creamos un metodo para obtener los valores del email y contraseña
public void ingresar(View view){
Intent ModificarActivity = new Intent(this,EditarUsuario.class);
startActivity(ModificarActivity);

//5.1 creado el metodo de login y creamos variables email y password


de tipo de string que se va almacenar
String email = mTextInputEmail.getText().toString();
String password = mTextInputPassword.getText().toString();
//para observar si estamos almacenando los datos indicamos
Log.d("CAMPO", "email: "+ email);
Log.d("CAMPO", "password: "+ password);
}

public void registro(View View){


Intent registroActivity = new Intent(this,Registro_Tecnicos.class);
startActivity(registroActivity);
}

REGISTRO_TECNICOS
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.rpc.context.AttributeContext;

import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import de.hdodenhof.circleimageview.CircleImageView;

public class Registro_Tecnicos extends AppCompatActivity {


//1.definimmos las variables
CircleImageView mCircleImageView;
//3. definimos las variables de activity_registro
TextInputEditText mTextInputUsername;
TextInputEditText mTextInputEmail;
TextInputEditText mTextInputPassword;
TextInputEditText mTextInputConfirmPassword;
TextInputEditText mTextInputPhone;
Button mButtonRegister;
//6.8 creamos un objeto de firebase de tipo mAuth
FirebaseAuth mAuth;
//7 creamos una nueva variable de la base de datos implementada Cloud
Firestore
FirebaseFirestore mFirestore;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registro_tecnicos);

//2.instanciamos el mCirclerImageView
mCircleImageView = findViewById(R.id.circleImageBack);
//4. instanciamos las variables de activity_register
mTextInputUsername = findViewById(R.id.textInputUsername);
mTextInputEmail = findViewById(R.id.textInputEmail);
mTextInputPassword = findViewById(R.id.textInputPassword);
mTextInputConfirmPassword =
findViewById(R.id.textInputConfirmPassword);
mTextInputPhone = findViewById(R.id.textInputPhone);
mButtonRegister = findViewById(R.id.btn_Register);
//6.9 instanciamos el firebase con getInstance();
mAuth = FirebaseAuth.getInstance();
//7.1 instanciamos el FiresbaseFirestore
/*Aqui ya tenemos la instancia que necesitamos para trabajar con la
base de datos de Firestore*/
mFirestore = FirebaseFirestore.getInstance();

//5.hacemos click en el boton para registrar


mButtonRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
//6 creamos un metodo register
register();

}
});

mCircleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
//6.1 obteniendo cada uno de los datos que de las variables de
activity_register
private void register() {
String username = mTextInputUsername.getText().toString().trim();
String email = mTextInputEmail.getText().toString().trim();
String password = mTextInputPassword.getText().toString();
String confirmPassword =
mTextInputConfirmPassword.getText().toString();
String phone = mTextInputPhone.getText().toString();

//6.2 validando para el usuario ingrese todos los datos


//que si el nombre de usuario no esta vacio que haga la ejecucion
if (!username.isEmpty() && !email.isEmpty() && !password.isEmpty()
&& !confirmPassword.isEmpty() && !phone.isEmpty()){
//6.4 llamamos al metodo para que nos valide el correo electronico
if (isEmailValid(email)){
//6.5 validando las contraseñas que sean iguales con equals
if(password.equals(confirmPassword)){
//6.6validando la longitud de caracteres de la contraseña
esto porque authentication permite caracteres mayores o iguales a 6
if(password.length() >=6){
//6.7 creamos un nuevo metodo
createUser(phone,username,email,password);

}else {
Toast.makeText(this, "La contraseña debe tener al
menos 6 caracteres", Toast.LENGTH_LONG).show();

}else{
Toast.makeText(this, "Las contraseñas no coinciden",
Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(this, "Insertaste todos los campos pero el
email no es valido", Toast.LENGTH_LONG).show();
}

}else{
Toast.makeText(this, "Para continuar inserta todos los datos",
Toast.LENGTH_LONG).show();
}
}
//6.7 cremos un nuevo metodo para la creacion de usuario y usamos el mAuth
y cremos 2 parametros para poder registrar el correo y el usuario
//pasamos parametros para obtener los datos
//agregamos addOncompleteListener y esto nos va traer un metodo Oncomplete
que se va ejecutar cuando termine de registrar el usuario
//y recibimos como parametro un objeto llamado task y con este vamos a
validar
private void createUser(String phone,String username, String email, final
String password) {

mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(new
OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull @NotNull Task<AuthResult> task) {
//6.8 vamos a validar con el metodo isSuccessful que si la
tarea fue exitoso significa que creo correctamente el usuario en firebase
//caso contrario tendria que volver a escribir su correo
electronico
if(task.isSuccessful()){
//7.2 para mandar una coleccion de datos a la BD
mFirestore
String id = mAuth.getCurrentUser().getUid();
Map<String, Object> map = new HashMap<>();
//7.3 almacena los datos en la BD crea 2 campos
.documento(id) es para crear nuevo documento y set(map) es para crea una nueva
informacion para nuestro documento
map.put("email",email);
map.put("username",username);
map.put("phone",phone);
/*map.put("password", password); lo de password es una
mala practica guardarlo mejor que lo haga el propio authentication*/

mFirestore.collection("Users").document(id).set(map).addOnCompleteListener(new
OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull @NotNull Task<Void>
task) {
if (task.isSuccessful()){
Toast.makeText(Registro_Tecnicos.this,"El
usuario se almaceno correctamente en la base de
datos",Toast.LENGTH_LONG).show();
}else{
Toast.makeText(Registro_Tecnicos.this,"No se
pudo almacenar el usuario en la base de datos",Toast.LENGTH_LONG).show();
}
}
});
}else {
Toast.makeText(Registro_Tecnicos.this, "No se pudo
registrar el usuario ", Toast.LENGTH_LONG).show();
}
}
});
}

//6.3 metodo que permite validad si un email es valido o no


/*Si el correo es válido nos va a retornar un tru y si el correo es
inválido nos va a retornar un Fool's simplemente.
Aquí lo que hace es utilizar una expresión regular.Por eso está este
montón de caracteres para validar
que nuestro correo tenga una arroba, un punto y todo lo que debe contener
un correo electrónico válido. */

public boolean isEmailValid(String email) {


String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
Pattern pattern = Pattern.compile(expression,
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}

}
REFERENCIA

Muñoz, Andres. Breve Historia del Sistema Operativo Android.2020. 1pp


Disponible en : https://www.gestionenti.com/post/breve-historia-del-sistema-operativo-android

LÓPEZ Rosciano y JOSÉ Pech Desarrollo de herramienta de gestión de proyecto RUP Recuperado
de http://oa.upm.es/44208/3/TFM_RODRIGO_ANTONIO_LOPEZ_ROSCIANO_JOS
E_ALFREDO_PECH_MONTEJO.pdf

FORBES, 2017. Uber Says It’s Doing 1 Million Rides Per Day, 140 Million In Last Year. [en línea].
[Consulta: 01 mayo 2021]. Disponible en: https://www.forbes.com/sites/ellenhuet/2017/12/17/uber-
says-its-doing-1-million-rides-per-day-140-million-in-last-year/#7282ba1152cd.

ANEXOS
PRESENTACION DE APLICATIVO MÓVIL

Nota:
Grabar su exposición máximo 20 minutos y anexar su Power
Point con la presentación de su exposición.

Entregables:
Se va entregando según las 3 etapas de entrega
programadas en el silabus.

Primera Entrega:

Cuarta Semana hasta el punto 5.5.6.1

Segunda Entrega:

Novena Semana hasta el punto 6.2.1(En caso haya


observaciones que corregir de la ENTREGA I, esta debe
ser considerada en la SEGUNDA ENTREGA)

Tercera Entrega:

Catorceava Semana hasta el punto 8(En caso haya


observaciones que corregir de la ENTREGA II, esta

debe ser considerada en la ENTREG


A FINAL)

También podría gustarte