Full text
TRABAJO FIN DE GRADO Desarrollo de aplicación cliente-servidor para la creación y realización de encuestas mediante móvil Autor : Alejandro Latorre Alberich Director: José Ramón Gállego Martínez Escuela de Ingeniería y Arquitectura Grado en Ingeniería de Tecnologías y Servicios de Telecomunicación Julio 2014
Desarrollo de aplicación cliente-servidor para la creación y realización de encuestas mediante móvil RESUMEN Este TFG consiste en el desarrollo de una aplicación para Smartphone, EncuestAPP, cuyo propósito es el de facilitar la posibilidad al usuario de realizar encuestas para compartirlas con otros usuarios y poder consultar el estado de la misma en cualquier momento. También ofrece la posibilidad de responder a la encuesta que hayas recibido y seguir el resultado de ésta. Por otro lado, existe la posibilidad de borrar la encuesta una vez haya sido creada por si queremos que deje de estar disponible y nadie pueda verla de nuevo. Todo esto se realiza a través de una aplicación móvil, un servidor basado en PHP y una base de datos MySQL que gestiona todas las encuestas y los votos de las mismas. Si el usuario quiere que la encuesta sea privada, puede añadir una contraseña que será requerida para acceder al resultado de la encuesta y, si se desea, borrarla. El objetivo es conseguir que la aplicación sea usable, de forma que se pueda utilizar de manera rápida y sencilla.
Índice general 1 Introducción 1 1.1 Motivación y objetivo final . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Materiales y herramientas utilizadas. . . . . . . . . . . . . . . . . . 2 1.3 Organización de la memoria . . . . . . . . . . . . . . . . . . . . . . 3 2 Análisis previo y requisitos 5 2.1 Objetivos de la aplicación . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Público objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 Estado del arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Especificación de requisitos . . . . . . . . . . . . . . . . . . . . . . . 7 2.5 Plataforma de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . 8 3 Desarrollo de la aplicación 11 3.1 Planteamiento general . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Funcionamiento de la aplicación . . . . . . . . . . . . . . . . . 13 3.2.1 Crear Encuesta. . . . . . . . . . . . . . . . . . . . . . . 14 3.2.2 Historial de Encuestas. . . . . . . . . . . . . . . . . . . 17 3.2.3 Borrar Encuesta. . . . . . . . . . . . . . . . . . . . . . . 18 3.2.4 Responder Encuesta. . . . . . . . . . . . . . . . . . . . 19 3.2.5 Mostrar Resultado. . . . . . . . . . . . . . . . . . . . . 21 3.2.6 Añadir Encuesta. . . . . . . . . . . . . . . . . . . . . . 22 3.2.7 Ayuda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2.8 Clase Encuesta. . . . . . . . . . . . . . . . . . . . . . . 24
4 Desarrollo del servidor 27 4.1 Planteamiento general.. . . . . . . . . . . . . . . . . . . . . . . 27 4.2 Funcionamiento del servidor.. . . . . . . . . . . . . . . . . . . 27 4.2.1 Información del servidor. . . . . . . . . . . . . . . . . 28 4.2.2 Tratamiento de peticiones. . . . . . . . . . . . . . . . 28 4.2.3 Comunicación con la base de datos . . . . . . . . . . 29 4.3 Base de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.4 Comunicación cliente-servidor. . . . . . . . . . . . . . . . . . . . . 32 5 Pruebas sobre la aplicación 33 5.1 Pruebas durante el desarrollo. . . . . . . . . . . . . . . . . . . . . . 33 5.2 Pruebas tras el desarrollo. . . . . . . . . . . . . . . . . . . . . . . . 34 6 Conclusiones y líneas futuras 37 6.1 Opinión personal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.2 Desarrollo futuro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 6.3 Timing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 6.4 Conclusión final. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Bibilografía 41 A Diagramas de navegación 43 B Bases de datos 51 B.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 B.2 Base de datos del móvil. . . . . . . . . . . . . . . . . . . . . . . . . 51 B.3 Base de datos del servidor. . . . . . . . . . . . . . . . . . . . . . . 52 C Elección de Plataforma 55 C.1 Plataformas existentes. . . . . . . . . . . . . . . . . . . . . . . . . . . 55 C.2 Plataforma escogida. . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
C.3 Versiones de Android a las que dar soporte. . . . . . . . . . . . 58 D Manual de Usuario 61 D.1 Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 D.2 Cómo utilizar la aplicación. . . . . . . . . . . . . . . . . . . . . . . 61
Índice de figuras 3.1 Diagrama de relación existente entre las clases más importantes. . . . . . . 11 3.2 Pestañas en la aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.3 Apariencia de la clase principal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4 Diagrama de la opción Crear Encuesta. . . . . . . . . . . . . . . . . . . . . . . . . 15 3.5 Ejemplo de envío de encuesta a través de WhatsApp. . . . . . . . . . . . . . . 16 3.6 Diseño de Spinner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.7 Toast al finalizar el borrado de la encuesta. . . . . . . . . . . . . . . . . . . . . . 19 3.8 Apariencia del apartado Responder Encuesta. . . . . . . . . . . . . . . . . . . . . 19 3.9 Diagrama de estados de responder encuesta. . . . . . . . . . . . . . . . . . . . . . 20 3.10 Gráfico de barras. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.11 Gráfico de sectores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.12 Diagrama de estados de Añadir Encuesta. . . . . . . . . . . . . . . . . . . . . . 23 3.13 Diseño de las pestañas del apartado Ayuda. . . . . . . . . . . . . . . . . . . . . 24 4.1 Diagrama de bloques del funcionamiento del servidor. . . . . . . . . . . . . . . 31 6.1 Diagrama de Gantt del proyecto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 A.1: Diagrama de navegación de la pantalla principal. . . . . . . . . . . . . . . . . . 43 A.2: Diagrama de navegación del apartado Crear Encuesta. . . . . . . . . . . . . 44 A.3: Diagrama de navegación del apartado Historial de Encuestas. . . . . . . . 45 A.4: Diagrama de navegación del apartado Borrar Encuesta. . . . . . . . . . . . 46 A.5: Diagrama de navegación del apartado Añadir Encuesta. . . . . . . . . . . . 47 A.6: Diagrama de navegación del apartado Ayuda. . . . . . . . . . . . . . . . . . . 48
4 En el Anexo D se detalla el manual de usuario para el correcto uso de la aplicación.
5 Capítulo 2 Análisis previo y requisitos 2.1 Objetivos de la aplicación Con esta aplicación se busca facilitar la creación de encuestas con múltiples opciones al usuario final. Se debe conseguir que el usuario prefiera utilizar nuestra aplicación y, para ello, debe ser fácil y rápida de utilizar. De esta forma se conseguirá que la gente se anime a utilizar nuestra aplicación. Tras analizar los requisitos de la aplicación se optó porque la aplicación se dividiera en 4 partes diferenciadas: Una parte de creación de encuestas, en la cual el usuario será capaz de crear la encuesta que quiera añadiendo un máximo de 10 respuestas posibles. Una parte de historial de encuestas, donde el usuario podrá acceder al resultado de todas las encuestas que haya creado y respondido. Una parte de borrar encuestas, para que el usuario pueda borrar alguna encuesta que haya creado y por alguna razón desee que deje de existir. Una parte de responder encuesta, la cual no será visible directamente al abrir la aplicación, sino que aparecerá cuando se acceda a la encuesta a través del enlace de la misma.
6 2.2 Público objetivo La idea principal surgió en un principio para un enfoque más relacionado con temas laborales (fechas, horarios para quedar, etc.), pero luego se vio que podría enfocarse a cualquier tipo de persona. Tanto mayores como pequeños disponen en la actualidad de un Smartphone por lo que eso no nos restringe la edad objetivo. Además, aunque las necesidades sean diferentes, todos en algún momento dado necesitamos tomar una decisión con varios compañeros o amigos, desde unos chicos de 14 años que quieran ir a ver una película al cine, hasta un grupo de profesores que tenga que concertar una reunión. Por tanto, a la hora de realizar tanto el diseño gráfico como elegir la ubicación de las diferentes secciones, se debía tener en cuenta las capacidades y necesidades de cada sector. Se decidió utilizar un diseño que fuera colorido para atraer la atención de los más jóvenes y que no pase desapercibido. Por otro lado se intentó que fuera lo más claro posible para que tanto los más mayores, que no están todavía muy familiarizados con las nuevas tecnologías, y los más jóvenes, puedan utilizarla sin complicaciones. 2.3 Estado del arte La idea de la aplicación aparece cuando me encuentro con la necesidad de concretar una fecha con unos compañeros y éramos incapaces de ponernos de acuerdo. Para solucionarlo pensé en la posibilidad de encontrar una aplicación para móviles en la cual poder realizar una encuesta y compartirla con mis compañeros para que respondieran directamente. Se estuvo buscando alternativas en Play Store pero ninguna tenía las características idóneas. Por tanto se decidió realizar una aplicación con las características antes mencionadas. A continuación se detallan todas las aplicaciones que se encontraron y sus principales inconvenientes: AskMe Encuestas: Diseño muy pobre con mucha publicidad intrusiva para el usuario. Dispone de versión web para responder encuestas y admite hasta 20 respuestas.
7 https://play.google.com/store/apps/details?id=net.softnow.askme Loop: Diseño cuidado y enfocado a establecimientos que desean conocer la opinión de sus clientes. Mayor dificultad a la hora de crear una encuesta sencilla y compartirla con tus amigos. https://play.google.com/store/apps/details?id=com.loopsurvey.loop Quick Poll: Limitada en su versión de prueba a 3 opciones, diseño poco cuidado y difícil de utilizar. https://play.google.com/store/apps/details?id=com.greggreno.quickpollfree20 PicknPoll: Esta aplicación es la que encontré que se parecía más a la que queremos hacer pero a la hora de crear la encuesta no se crea debido a algún fallo por lo que no funciona. https://play.google.com/store/apps/details?id=com.picknpoll.android Una vez ya había comenzado el desarrollo del proyecto, Google publicó una versión móvil de Doodle (principal aplicación para fijar horarios). Se detalla a continuación: Doodle: Su aplicación móvil cuesta 2,69€ a diferencia de la nuestra que sería gratis. De todas formas, dispone de versión web para móviles pero dependiendo del terminal del que disponga el usuario puede que le vaya muy lento o no se le muestre correctamente. Además, la creación de encuestas en Doodle desde el móvil puede llegar a ser tedioso para un usuario que no esté familiarizado con ello. https://play.google.com/store/apps/details?id=ch.neoos.doodle En conclusión, a pesar de que existen aplicaciones que están enfocadas en el mismo campo, en general presentan varias carencias, bien sea en el diseño, en la facilidad de uso, o en el público objetivo. Por ello, creemos que nuestra aplicación puede aportar lo necesario en el mercado para llegar a todos los usuarios y que sus necesidades queden resueltas.
8 2.4 Especificación de requisitos En resumen de todo lo anterior, se detalla a continuación la lista de requisitos finales que debe tener la aplicación: RF1: La aplicación debe permitir al usuario la creación de encuestas de manera fácil e intuitiva, así como acceder al resultado de las mismas y permitir su borrado si así lo desea el usuario. RF2: La aplicación debe ser capaz de guardar internamente un historial de todas las encuestas creadas y respondidas. RF3: La aplicación permitirá al usuario responder a encuestas que hayan sido creadas a través de un enlace directo. RF4: La aplicación será capaz de comunicarse con el servidor PHP alojado en un dominio web y diferenciar el tipo de petición. RF5: El servidor será capaz de recibir las peticiones de la aplicación y guardar en una base de datos todas las encuestas y su resultado. RF6: El servidor devolverá a la aplicación el resultado de las peticiones que se hayan producido. RF7: La aplicación contará con una versión en inglés para el público de habla no española. RF8: La aplicación mostrará el resultado de las encuestas con dos tipos de gráficos, uno de barras horizontales y uno circular con sectores diferenciados. RF9: La aplicación será alojada en el Play Store para que pueda ser descargada por los usuarios
9 2.5 Plataforma de desarrollo Para elegir la plataforma en la que se iba a desarrollar la aplicación se hizo un estudio de las distintas opciones. Finalmente se optó por implementarlo en dispositivos Android. Las principales razones por la que se tomó esta decisión fueron la facilidad que aporta Google para el desarrollo de aplicaciones y la gran cuota de mercado que tiene Android. La aplicación será compatible con todos los dispositivos Android con versión 2.2 y superiores. De esta forma se conseguirá abarcar la totalidad del mercado. En el Anexo C aparece la descripción detallada de la elección de la plataforma.
10
11 Capítulo 3 Desarrollo de la aplicación 3.1 Planteamiento general Al desarrollar la aplicación en el entorno de Eclipse con lenguaje Java, la distribución de la aplicación se ha implementado mediante clases. Todas ellas se han agrupado en un paquete llamado encuestapp ya que resultó la forma más sencilla de ordenarlo. En la Figura 3.1 se puede ver cómo se relacionan unas clases con otras. Los diagramas de navegación en los que aparecen todas las clases que se utilizan se encuentran en el Anexo A. Figura 3.1 Diagrama de relación existente entre las clases más importantes.
12 En los siguientes capítulos se hará referencia a todas las clases que se han ido creando para desarrollar la aplicación. El código se puede encontrar en el CD adjunto a la memoria Además se han añadido algunas capturas de las distintas pantallas de la aplicación. Todas ellas se muestran en castellano pero la aplicación está traducida también a inglés para que pueda ser utilizada en cualquier lugar del mundo. La mayoría de las clases que se han utilizado para la creación de la aplicación derivan de la clase Activity. Todas estas clases representan la imagen que aparece en la pantalla del dispositivo. Por tanto se tendrá una clase de tipo Activity por cada una de las pantallas por las que podrá navegar el usuario. Para la transición entre clases se recurrirá al método Intent a través del cual se puede decidir a qué clase queremos acceder una vez haya ocurrido el evento correspondiente. En algunos casos, las diferentes clases se deben comunicar entre sí para transmitirse información. Para esos casos utilizaremos un tipo de dato llamado Boundle. Este tipo de variable se añadirá al método Intent y se recibirá en la clase a la que hayamos accedido. En algunas clases como en el Historial de Encuestas, se ha incluido una variante para poder tener en la misma Activity dos pantallas diferentes que se seleccionan a través de pestañas. Para conseguirlo se ha utilizado TabHost. Este recurso permite asignar a cada una de las pestañas el código XML [15] de lo que se muestra por pantalla y tratar en la misma clase los diferentes eventos de cada pestaña. Figura 3.2 Pestañas en la aplicación. Como se ha comentado anteriormente, la aplicación deberá guardar las distintas encuestas que se han ido respondiendo y creando. Para ello se utilizará una base de datos SQLite que proporciona directamente la plataforma de Android. Esta base de datos contendrá 3 tablas diferenciadas:
13 Encuestas Creadas: En esta tabla se guardará la información Pregunta de la Encuesta y Código de Encuesta de todas las encuestas que vaya creando el usuario. Podrá eliminarlas de la lista cuando quiera. Encuestas Respondidas: En esta tabla se guardará la información Pregunta de la Encuesta y Código de Encuesta de todas las encuestas que vaya respondiendo el usuario. Podrá eliminarlas de la lista cuando quiera. Encuestas Respondidas Totales: En esta tabla se guardará la información Pregunta de la Encuesta y Código de Encuesta de todas las encuestas que vaya respondiendo el usuario. El usuario no podrá acceder a ellas. En el Anexo B se explicará detalladamente cómo funciona la base de datos y cómo es gestionada. Además, la aplicación debe comunicarse con un servidor ubicado en Internet. Para ello se dispone de dos clases que son las encargadas de realizar la comunicación. En una asignamos todas las variables que deben ser enviadas (clase Encuesta) y, esta misma, es la encargada de ejecutar la llamada a la otra clase (clase HttpClientManager) que mandará finalmente toda la información al servidor. La aplicación se encuentra subida a la tienda de Android Play Store [11] para permitir su descarga. El enlace a la aplicación es el siguiente: https://play.google.com/store/apps/details?id=com.encuestapp 3.2 Funcionamiento de la aplicación Cuando el usuario ejecuta la aplicación, le aparece una pantalla básica con varias opciones a elegir: Crear Encuesta, Historial de Encuestas y Borrar Encuesta. Además, en la barra superior le aparecen dos iconos para pulsar: Información y Añadir Encuesta, como se puede comprobar en la Figura 3.3.
20 número de opciones que tiene la pregunta. Posteriormente recorre en un bucle el vector de opciones tantas veces como opciones hay. Cada vez que entra en ese bucle, crea un nuevo RadioButton (cada una de las opciones a seleccionar). Una vez creado el RadioButton, se le asigna como texto la opción correspondiente que hemos recibido del servidor. Finalmente se añade el RadioButton al grupo de RadioButtons (la lista que contiene todas las opciones). Una vez que el usuario elige una opción, ya puede enviar el voto. Si no ha seleccionado ninguna opción y pulsa el botón Enviar Voto, le aparecerá un Toast como aviso indicándole que debe seleccionar alguna opción para continuar. Si ha seleccionado una opción y pulsa Enviar Voto, se le asignarán los valores correspondientes a la clase Encuesta como en las secciones anteriores. Adicionalmente puede acceder al resultado de la votación antes de mandar su voto por si quiere comprobar el resultado de ésta y que posteriormente su voto ha sido añadido. Finalmente, tras enviar el voto, si no ha ocurrido ningún fallo con el servidor, se le mostrará una pantalla final en la que aparecerá un mensaje agradeciendo el uso de nuestra aplicación y otro botón para mostrar el resultado. En la Figura 3.9 se puede comprobar el funcionamiento del apartado Responder Encuesta. Figura 3.9 Diagrama de estados de responder encuesta.
21 3.2.5 Mostrar Resultado. En este apartado, se mostrará al usuario el resultado de la encuesta. Para ello dispondrá de dos tipos de gráficos: Gráfico de barras: En primer lugar aparecerá el resultado con un gráfico de barras horizontales. Al lado de cada una de las barras horizontales aparecerá el número de votos para que quede más claro y, encima de cada barra, aparecerá el nombre de la opción. Para conseguir este gráfico, se han utilizado ProgressBar (barras que están pensadas para simular el progreso al realizar un envío de datos etc.). Aprovechando este recurso, se recuperan el número total de votos y se guarda el número de votos mayor. Finalmente se normalizan todos los votos con referencia al número mayor para establecer el tamaño de la barra. Figura 3.10 Gráfico de barras. Gráfico de sectores: En el momento en el que el usuario pase a la pestaña de Sectores, le aparecerá un gráfico visual de tipo sectores. Para la
22 realización de este gráfico se ha utilizado una librería de código libre llamada AChartEngine. Esta librería nos permitía un gran abanico de gráficos. Se ha creído conveniente utilizar este gráfico ya que es el más representativo de cara a una encuesta. Los pasos a seguir son muy similares a los del caso anterior. Se recogen las opciones y el número de votos de cada una y se van asignando a las distintas variables de la librería. Figura 3.11 Gráfico de sectores. 3.2.6 Añadir Encuesta. En la barra superior de la clase principal aparecen 2 botones. El primero de ellos es Añadir Encuesta. Se ha creado esta opción para añadir una encuesta directamente a través del código asignado a la misma. De esta forma si por alguna razón el usuario no puede acceder a través del link directo, podrá hacerlo introduciendo el código.
23 Una vez pulsa en el botón Ir a Encuesta, asignará el valor del código correspondiente dentro de la clase Encuesta, y se realizará la consulta. Figura 3.12 Diagrama de estados de Añadir Encuesta. En la Figura 3.12 se puede ver el funcionamiento general de esta Activity. En un principio se comunica con el servidor para realizar la petición de la encuesta. Una vez recibe la encuesta con todos sus valores, se comprueba en la base de datos interna del móvil si esa encuesta ha sido respondida por el usuario. En caso de que haya sido respondida, se realiza un Intent hacia la clase de MostrarResultado. Si no ha sido respondida, se realiza un Intent sobre ResponderEncuesta para que proceda a responderla. En el caso de que tenga contraseña, antes de mostrar el resultado, se le pedirá que introduzca la contraseña como se ha comentado anteriormente. 3.2.7 Ayuda. Como último apartado, aparece la ayuda. En ella encontraremos tres pestañas. En la primera, llamada Ayuda, aparece una pequeña explicación de
24 cada una de las partes principales de la aplicación. De esta forma el usuario será capaz de comprender correctamente la aplicación si tiene alguna duda. En la segunda, llamada Contacto, aparece un pequeño cuadro de texto en el que el usuario podrá escribir sus dudas y enviarla. Al pulsar Enviar, aparece un cuadro de diálogo en el que el usuario seleccionará el cliente de correo que tenga instalado. De esta manera, el usuario mandará por correo su duda y podrá ser respondida. Por último aparece Acerca de. En él se muestra la versión de la aplicación, el nombre del autor de la aplicación y la dirección de Twitter. Figura 3.13 Diseño de las pestañas del apartado Ayuda. 3.2.8 Clase Encuesta. Esta clase es básica para el funcionamiento de la comunicación cliente – servidor. En ella se encuentran los diferentes parámetros a modificar para poder enviar y recibir la información adecuadamente. Dispone de diferentes métodos para que las demás clases puedan modificar estos parámetros en función del tipo de petición. Una vez se ejecuta en la clase principal la llamada a la clase Encuesta, ésta realiza
25 una llamada a su vez a la clase HttpClientManager. Esta clase, que ha sido programada para utilizarla en esta aplicación, será la encargada de realizar la comunicación directa con el servidor. Sobre esta clase se añaden todas las variables para ejecutar la petición HTTP. Se crean distintos Listeners para poder actuar en función de si la respuesta del servidor es correcta o no. De esta forma, una vez se haya recibido la información del servidor, la clase Encuesta devolverá a la clase principal la información recibida del servidor para que pueda ser tratada como corresponda. Dentro de la clase HttpClientManager se ejecuta un hilo paralelo para poder realizar la comunicación a través de internet ya que lo exige Android a partir de las últimas versiones. En un primer momento al desarrollar la aplicación se utilizó un método en el cual no era necesario crear un hilo que realizara la petición en paralelo, pero una vez se avanzó se comprobó que estaba desfasado y se modificó la aplicación introduciendo esta clase.
26
27 Capítulo 4 Desarrollo del servidor 4.1 Planteamiento general La segunda pieza clave para el desarrollo de nuestra aplicación es el servidor. Se debía conseguir crear un servidor que fuera capaz de comunicarse directamente con la aplicación del Smartphone a través de internet y además gestionase las distintas encuestas. Para ello se decidió por el desarrollo de un servidor en lenguaje PHP ya que era el más conveniente por su facilidad para trabajar con bases de datos. Como base de datos se ha utilizado una base de datos MySQL. Tanto la base de datos como el servidor se han alojado en una Raspberry Pi, la cual se encuentra encendida las 24 horas del día. El servidor se ha dividido en 4 archivos ya que se ha considerado que era suficiente para lo que requería la aplicación. A continuación se explicarán los diferentes archivos y su comunicación con la base de datos. 4.2 Funcionamiento del servidor En los siguientes puntos se desarrolla el funcionamiento de nuestro servidor. Como se ha comentado anteriormente, debe ser capaz de comunicarse con la aplicación y la base de datos de manera óptima. A la hora de la programación se ha buscado que sea de la manera más sencilla y óptima posible.
28 Para el envío de datos tanto de cliente - servidor como de servidor - cliente se ha utilizado un tipo de dato llamado Json. Gracias a este tipo de dato se pueden asignar diferentes variables a diferentes nombres teniendo una estructura parecida al lenguaje XML. 4.2.1 Información del servidor Toda la información para la comunicación con la base de datos se ubica en un fichero llamado ‘globals.php’. En él se puede encontrar la dirección IP en la que se encuentra la base de datos, la base de datos a la que queremos acceder, el usuario y la contraseña. En nuestro caso como servidor y base de datos están alojadas en el mismo dispositivo, la dirección IP será ‘localhost’. La base de datos a la que queremos acceder es ‘encuestapp’ y el usuario y contraseña son los que se hayan definido. 4.2.2 Tratamiento de peticiones Para gestionar las distintas peticiones utilizamos un archivo que se ha denominado ‘service.encuesta.add.php’. Lo primero que realiza el archivo cuando le llega una nueva petición desde la aplicación móvil es comprobar si el campo correspondiente al tipo de petición está incluido en el Json recibido. Una vez comprueba que existe ese campo, decide de qué tipo es. Para ello extrae la información que tiene ese campo. Puede ser de tipo ‘crear’, ‘petición’, ‘borrar’ o ‘votar’. Para cada uno de los distintos tipos deberá extraer la información que sea necesaria: Crear: En el caso del tipo crear, debe extraer la pregunta que ha introducido el usuario así como el número de opciones que hay, las propias opciones y, en caso de haberlo, el password.
29 Petición: En el caso del tipo petición, tan sólo deberá extraer el código asociado con la encuesta ya que la finalidad de este tipo es la de devolver la encuesta con toda su información. Borrar: En el caso del tipo borrar, deberá extraer tanto el código asociado a la encuesta, al igual que en el caso anterior, como la contraseña en caso de que sea necesaria. Votar: En el caso del tipo votar, deberá extraer el código de la encuesta y el voto que ha realizado el usuario. Una vez realizado lo anterior, se ejecutará la comunicación con la base de datos a través del fichero ‘encuesta.php’. Al finalizar la comunicación con la base de datos, recogerá el resultado de la comunicación y la devolverá a la aplicación. En cuanto al fichero al que se accede al pulsar el enlace de la encuesta, ‘link.php’ actúa como pasarela hacia otra dirección. Simplemente redirecciona a otro tipo de URL que la aplicación es capaz de comprender y, sobre ella, se abre la aplicación directamente y realiza la petición de la encuesta. Si el enlace a la encuesta es: http://encuestapp.x64.me/encuestapp/link.php?enlace=2070bDEeI62fZ1 El archivo redirecciona a encuestapp://encuestapp.com/2070bDEeI62fZ1. De esta forma, la aplicación se ejecuta cada vez que aparece un link con el protocolo encuestapp://. Recupera de ese enlace el código de la encuesta y finalmente construye la petición y realiza la consulta al servidor. 4.2.3 Comunicación con la base de datos Para realizar la petición sobre la base de datos, utilizamos el último de los ficheros llamado ‘encuesta.php’. En este archivo se incluyen todas aquellas funciones que son necesarias para poder comunicarse con la base de datos. Para poder explicar las funciones que existen en este fichero, dividiremos en tipos de peticiones como en el apartado anterior:
36
37 Capítulo 6 Conclusiones y líneas futuras 6.1 Opinión personal A nivel personal, la realización de este trabajo ha supuesto todo un reto ya que además de poner en práctica muchos conocimientos que he ido adquiriendo en la carrera, he tenido que realizar mucho trabajo de autoaprendizaje. Al no haber realizado ninguna aplicación para Android, ha sido muy complicado comprender qué pasos se tenían que ir siguiendo en cada momento. De todas formas, al no seguir unas pautas como en una asignatura normal, me ha dado libertad para decidir cómo trabajar y cómo organizarme. El principal conocimiento que he adquirido es la programación en Android. A pesar de haber cursado asignaturas en las que se estudiaba Java, la diferencia a la hora de enfocarlo a una aplicación era bastante grande. Por tanto, un cierto tiempo lo dediqué para ir adquiriendo el conocimiento necesario respecto a Android para poder afrontar el comienzo del desarrollo de la aplicación. Gracias a este proyecto también he sabido cómo afrontar los problemas que iban surgiendo y encontrar las soluciones necesarias, bien acudiendo a libros de Android, a tutoriales, ejemplos de otras aplicaciones, foros de ayuda etc. Finalmente considero que la realización de este trabajo me ha ayudado a darme cuenta de que podía afrontar y conseguir terminar un proyecto tan importante como supone una aplicación para móviles de manera exitosa. Considero que a la hora de buscar trabajo, este proyecto me puede ayudar a estar más seguro de mí mismo y que también amplíe mi abanico de posibilidades ya que el desarrollo de aplicaciones me ha parecido muy interesante y, por qué no, podría acabar dedicándome a ello profesionalmente.
38 Además de la aplicación, he aprendido a programar desde cero un servidor, adecuándolo a mis necesidades. También he aprendido a gestionar una base de datos ya que en la carrera no se hace mucho hincapié en estos dos temas. Por tanto también dediqué un tiempo al autoaprendizaje de PHP y a cómo gestionar la base de datos, ampliando los conocimientos que había adquirido en alguna de las asignaturas de la carrera. También al haber subido la aplicación al Play Store, he podido comprobar la aceptación que ha tenido la aplicación y poco a poco ver qué es lo que el usuario final quiere a través de sugerencias que voy recibiendo. Todo ello creo que es bastante importante ya que aunque podamos considerar que todo está programado de manera que para el usuario final sea muy sencillo, hasta que no lo prueba no podemos estar seguros de si lo hemos conseguido o no. 6.2 Desarrollo futuro El futuro de la aplicación dependerá de la aceptación que consiga tener la misma en el mercado de Android. Si la acogida es bastante multitudinaria, podríamos plantearnos la posibilidad de seguir trabajando en ella y conseguir mejorar algunos puntos que podrían hacer de EncuestAPP una aplicación mejor. Principalmente, antes de mejorar la aplicación, lo idóneo sería poder portar la aplicación a iOS y Windows Phone para poder alcanzar un mercado mayor y que todo el mundo pueda responder a las encuestas. En cuanto a la aplicación, podríamos mejorar los siguientes puntos: Mejorar el diseño de la aplicación: A pesar de que estoy bastante satisfecho con el resultado final de la aplicación en cuanto al tema de diseño, creo que se podría mejorar y conseguir que tuviera un diseño más profesional. El desarrollo visual de la aplicación es bastante complicado por lo que habría que dedicar bastante tiempo en volver a reorganizar la aplicación y hacer un diseño nuevo. Aumentar el número de preguntas y opciones: Para que pueda ser útil de cara a empresas, se podría aumentar el número de preguntas para poder recibir mayor información del encuestado sin que tenga que acceder a más de una encuesta y sea más costoso. El número de opciones se podría aumentar por si se considera que con 10 no es suficiente. Aumentar el
39 número de preguntas por encuesta nos haría tener que reestructurar la base de datos ya que actualmente solamente está pensada para una pregunta. Activar notificaciones: Otra mejora importante que se podría realizar es el envío de notificaciones al creador de la encuesta cuando ésta sea contestada. De esta forma no tendría que ir accediendo al resultado de la encuesta sino que directamente le avisaría cuando hubiese algún cambio. El principal problema de añadir notificaciones es que se debería realizar una gestión de usuarios para que fuésemos capaces de identificar al creador y enviarle la notificación. Cambiar la ubicación del servidor: Al estar alojado en una Raspberry Pi, las posibilidades de que ésta falle son mucho mayores que si tenemos el alojamiento de nuestro servidor en un centro de servidores. Por tanto podríamos comprar un alojamiento para nuestro servidor y, además, un dominio web que nos asegurase mayor continuidad y menor tasa de fallos. 6.3 Diagrama temporal A continuación se muestra el diagrama de Gantt con las diferentes tareas que se han ido realizando y la duración de las mismas. Figura 6.1 Diagrama de Gantt del proyecto.
40 En la Figura 6.1 se puede ver como una parte considerable del tiempo dedicado al proyecto se ha utilizado para el aprendizaje de Android, PHP y SQL ya que eran conocimientos básicos para poder avanzar con el proyecto. Por otro lado el trabajo de diseño, implementación y pruebas ocupan el mismo tiempo aproximadamente ya que íbamos poco a poco probando que funcionase toda la implementación. 6.4 Conclusión final Como conclusión final, puedo indicar que estoy muy satisfecho con el trabajo realizado durante todos estos meses. Es muy satisfactorio comprobar como poco a poco va tomando forma el proyecto y, finalmente, palpar como ha finalizado con éxito el proyecto. Hemos sido capaces de conseguir crear una aplicación capaz de crear encuestas y responderlas y, además, comprobar el apoyo que está teniendo a través de la plataforma Play Store como muestra el número de descargas, que confiamos en que siga creciendo durante los próximos meses.
41 Bibliografía [1] Java. Disponible en http://www.java.com/es/download/faq/whatis_java.xml,fecha de consulta: 15 de junio de 2014. [2] Entorno de desarrollo Eclipse. Disponible en http://www.eclipse.org/eclipse/, fecha de consulta: 15 de junio de 2014. [3] Lenguaje PHP. Disponible en http://www.php.net//manual/es/langref.php, fecha de consulta: 17 de junio de 2014. [4] Base de datos MySQL: Disponible en http://www.mysql.com/, fecha de consulta: 17 de junio de 2014. [5] Raspberry Pi: Disponible en http://www.raspberrypi.org/,fecha de consulta: 17 de junio de 2014. [6] Tienda de Aplicaciones de Google. Disponible en https://play.google.com/store, fecha de consulta: 20 de junio de 2014. [7] Satya Komatineni y Dave MacLean. Pro Android 4. Apress, 2012. [8] Página de desarrollo de Android. Disponible en http://developer.android.com/index.html,fecha de consulta: 20 de junio de 2014. [9] Página oficial de AChartEngine. Disponible en https://code.google.com/p/achartengine/,fecha de consulta: 10 de junio de 2014. [10] Página oficial de estadísticas de Android. Disponible en http://developer.android.com/about/dashboards/index.html ,fecha de consulta: 15 de mayo de 2014. [11] Foro de desarrollo Stackoverflow. Disponible en http://stackoverflow.com/, fecha de consulta: 20 de junio de 2014. [12] Web de programación nosinmiubuntu. Disponible en www.nosinmiubuntu.com fecha de consulta: 10 de junio de 2014. [13] Curso de programación en Android de Salvador Gómez Oliver. Disponible en http://www.sgoliver.net/blog/,fecha de consulta: 10 de junio de 2014.
42 [14] Tutoriales de Edu4java. Disponible en https://www.youtube.com/user/edu4java/,fecha de consulta: 10 de junio de 2014. [15] Extensible Markup Language (XML). RFC 3275, Marzo 2002. [16] Domain Name Server. RFC 1034 y RFC 1035, Noviembre 1987 http://tools.ietf.org/html/rfc1034 y http://tools.ietf.org/html/rfc1035 [17] Hypertext Transfer Protocol. RFC 2616 Junio 1999. http://www.ietf.org/rfc/rfc2616.txt