furb mobile gincanas: sistema mÓvel na plataforma phonegap …

79
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP PARA GINCANAS VIRTUAIS RAFAEL ADÃO BLUMENAU 2016

Upload: others

Post on 01-May-2022

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

UNIVERSIDADE REGIONAL DE BLUMENAU

CENTRO DE CIÊNCIAS EXATAS E NATURAIS

CURSO DE CIÊNCIA DA COMPUTAÇÃO – BACHARELADO

FURB MOBILE GINCANAS: SISTEMA MÓVEL NA

PLATAFORMA PHONEGAP PARA GINCANAS VIRTUAIS

RAFAEL ADÃO

BLUMENAU

2016

Page 2: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

RAFAEL ADÃO

FURB MOBILE GINCANAS: SISTEMA MÓVEL NA

PLATAFORMA PHONEGAP PARA GINCANAS VIRTUAIS

Trabalho de Conclusão de Curso apresentado

ao curso de graduação em Ciência da

Computação do Centro de Ciências Exatas e

Naturais da Universidade Regional de

Blumenau como requisito parcial para a

obtenção do grau de Bacharel em Ciência da

Computação.

Prof. Dalton Solano dos Reis, Mestre - Orientador

BLUMENAU

2016

Page 3: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

FURB MOBILE GINCANAS: SISTEMA MÓVEL NA

PLATAFORMA PHONEGAP PARA GINCANAS VIRTUAIS

Por

RAFEL ADÃO

Trabalho de Conclusão de Curso aprovado

para obtenção dos créditos na disciplina de

Trabalho de Conclusão de Curso II pela banca

examinadora formada por:

______________________________________________________

Presidente: Prof. Dalton Solano dos Reis, Mestre – Orientador, FURB

______________________________________________________

Membro: Prof. Aurélio Faustino Hoppe, Mestre – FURB

______________________________________________________

Membro: Prof. Joyce Martins, Mestre – FURB

Blumenau, 07 de julho de 2016

Page 4: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

AGRADECIMENTOS

A Deus, pelo seu imenso amor e graça.

À minha família, que me apoiou e sempre esteve presente.

Aos meus amigos, pelos empurrões e cobranças.

Ao meu orientador, Dalton Solano dos Reis, por ter acreditado na conclusão deste

trabalho.

Page 5: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

Tudo o que a mente pode conceber e acreditar,

a mente pode realizar.

Napoleon Hill

Page 6: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

RESUMO

Este trabalho apresenta o desenvolvimento de um aplicativo voltado para a aplicação de

gincanas. É possível aplicar tarefas do tipo pergunta, imagem, vídeo e geolocalização, além de

definir dependências entre as tarefas, permitindo que as mesmas sejam encadeadas no estilo

caça ao tesouro. Os participantes da gincana devem se organizar em grupos pré-definidos pelo

organizador da gincana, onde os líderes devem distribuir as tarefas para seus colegas de

grupo, avaliando qual tarefa se encaixa com o perfil de cada usuário. O aplicativo permite que

o participante da gincana se autentique utilizando sua conta da rede social Facebook. Os

usuários podem utilizar os recursos de câmera e GPS para responder as tarefas,

respectivamente, de imagem e geolocalização. O aplicativo permite a pesquisa no site de

compartilhamento de vídeos YouTube para responder as tarefas do tipo vídeo. Os usuários

são notificados sobre os acontecimentos na gincana, através de notificações push. A gincana

pode ser acompanhada em um placar público, através do site de quadro virtual e organizador

de tarefas Trello. Desenvolvido com o framework Phonegap e seus plugins, o aplicativo

utiliza as tecnologias web (HTML, CSS, Javascript) como padrão de desenvolvimento, além

do framework Ionic, que é utilizado para diminuir a sensação do usuário estar navegando em

um site. Como resultado da implementação, o aplicativo executou muito bem a integração

com os serviços externos de rede social, vídeos, mapas, notificações e quadro virtual.

Palavras-chave: Phonegap. Dispositivo móvel. Rede social. Notificações. GPS. Gincanas.

Page 7: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

ABSTRACT

This work presents the development of a focused application for applying gymkhanas. You

can apply the question type tasks, image, video and geolocation, and set dependencies

between tasks, allowing them to be linked in hunting style treasure. The contest participants

should be organized in pre-defined groups by the organizer of the contest, where leaders

should distribute tasks to your peers, evaluating which task fits each user's profile. The

application allows the participant of the contest to authenticate using your Facebook social

network account. Users can use the camera and GPS capabilities to meet the tasks,

respectively, image and geolocation. The application allows you to search on the YouTube

video sharing site to answer the video type tasks. Users are notified of events in gymkhana

through push notifications. The contest can be followed on a public scoreboard through the

virtual frame site and organizer Trello tasks. Developed with Phonegap framework and its

plugins, the application uses web technologies (HTML, CSS, Javascript) as standard

development, beyond the Ionic framework, which is used to decrease the user feeling to be

browsing a website. As a result of the implementation, the application performed well the

integration with external services social networking, maps, reports and virtual table.

Key-words: Phonegap. Mobile device. Social networking. Notifications. GPS. Gymkhanas.

Page 8: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

LISTA DE FIGURAS

Figura 1 - Adicionando o plugin de GPS ................................................................................. 18

Figura 2 - Funcionamento da API de push do Ionic Platform .................................................. 19

Figura 3 - Cenário do Sistema .................................................................................................. 20

Figura 4 - Tô Aqui: Tela inicial ................................................................................................ 22

Figura 5 - Tela inicial do jogo Ingress ...................................................................................... 23

Figura 6 - Casos de uso do front-end ........................................................................................ 27

Figura 7 - Casos de uso do mobile ............................................................................................ 28

Figura 8 - Diagrama de classes do fron-end ............................................................................. 30

Figura 9 - Diagrama de classes do aplicativo mobile ............................................................... 31

Figura 10 - Diagrama de classes da arquitetura do back-end ................................................... 32

Figura 11 - Diagrama de classes do pacote MODEL ................................................................. 33

Figura 12 - Diagrama de classes do pacote DAO ...................................................................... 35

Figura 13 - Diagrama de classes do pacote DTO ...................................................................... 36

Figura 14 - Diagrama de classes do pacote Trello Model ................................................ 37

Figura 15 - Diagrama de classes do pacote Trello Service ............................................ 37

Figura 16 - Diagrama de classes do pacote Trello Client .............................................. 38

Figura 17 - Diagrama de classes do pacote Ionic API ........................................................ 38

Figura 18 - Diagrama de classes do pacote Service ............................................................ 39

Figura 19 - Diagrama de classes do pacote API ...................................................................... 41

Figura 20 - Diagrama de atividades .......................................................................................... 42

Figura 21 - Arquitetura do aplicativo ....................................................................................... 43

Figura 22 - Processo de autenticação ....................................................................................... 44

Figura 23 - Tela de cadastro de gincana ................................................................................... 56

Figura 24 – Tela de cadastro de tarefa ...................................................................................... 57

Figura 25 - Tela para vincular tarefas requisitos ...................................................................... 58

Figura 26 - Tela de cadastro de grupo ...................................................................................... 58

Figura 27 - Autorizar Trello ..................................................................................................... 59

Figura 28 - Quadro criado no Trello ......................................................................................... 60

Figura 29 - Tela inicial do aplicativo........................................................................................ 60

Figura 30 - Entrando em um grupo e lista de tarefas................................................................ 61

Page 9: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

Figura 31 - Novo membro e delegação de tarefas .................................................................... 61

Figura 32 - Resolvendo tarefa de vídeo .................................................................................... 62

Figura 33 - Resolvendo tarefa de geolocalização ..................................................................... 62

Figura 34 - Resolvendo tarefa de imagem ................................................................................ 63

Figura 35 - Monitoramento da gincana .................................................................................... 64

Figura 36 - Avaliação das tarefas de imagem ......................................................................... 64

Figura 37 - Avaliação das tarefas de vídeo ........................................................................... 65

Figura 38 - Avaliação das tarefas de geolocalização ...................................................... 65

Figura 39 - Resultado final da gincana ..................................................................................... 66

Figura 40 - Localização da Chave de API do Trello ................................................................ 76

Figura 41 – Configurando URIs de redirecionamento ............................................................. 77

Figura 42 - Habilitando usuários .............................................................................................. 78

Page 10: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

LISTA DE QUADROS

Quadro 1 - Lista de recursos e plugins ..................................................................................... 17

Quadro 2 - Diretiva ng-map do módulo ngMap ................................................................... 47

Quadro 3 - Código para integração com o Trello no Front-end ......................................... 48

Quadro 4 - Integração com o Trello na ativação da gincana .................................................... 48

Quadro 5 - Integração com a rede social Facebook.................................................................. 49

Quadro 6 - Integração com o Ionic Platform ............................................................................ 50

Quadro 7 - Enviando dados do usuário para o back-end .......................................................... 50

Quadro 8 - Enviando notificações no back-end........................................................................ 51

Quadro 9 - Realizando uma busca de vídeos no YouTube....................................................... 52

Quadro 10- Utilizando a câmera do dispositivo móvel ............................................................ 53

Quadro 11 - Integração com o Google Maps no aplicativo ...................................................... 54

Quadro 12 - Quadro comparativo entre os trabalhos correlatos ............................................... 69

Quadro 13 - Importando client.js ..................................................................................... 76

Quadro 14 - Código fonte da página oauthcallback.html ......................................................... 77

Quadro 15 - Inicialização da classe ngFB ............................................................................... 78

Page 11: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

LISTA DE ABREVIATURAS E SIGLAS

API – Application Programming Interface

APNS – Apple Push Notification Service

GCM – Google Cloud Messaging

HTTP – HyperText Transfer Protocol

HTTPS – HyperText Transfer Protocol Secure

MVC – Model-View-Controller

URI – Uniform Resource Locator

URL – Uniform Resource Locator

Page 12: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

SUMÁRIO

1 INTRODUÇÃO .................................................................................................................. 12

1.1 OBJETIVOS ...................................................................................................................... 13

1.2 ESTRUTURA.................................................................................................................... 14

2 FUNDAMENTAÇÃO TEÓRICA .................................................................................... 15

2.1 REALIDADE ALTERNATIVA – GINCANAS VIRTUAIS ........................................... 15

2.2 FURB – INTERAÇÃO FURB .......................................................................................... 16

2.3 PHONEGAP ...................................................................................................................... 17

2.4 IONIC PLATFORM – NOTIFICAÇÕES PUSH.............................................................. 18

2.5 TRABALHOS CORRELATOS ........................................................................................ 19

2.5.1 Sistema Móvel na plataforma Android para compartilhamento de geolocalização usando

mapas e notificações da Google ...................................................................................... 20

2.5.2 Tô Aqui: Aplicativo para georreferenciamento em ambientes restritos ......................... 21

2.5.3 Ingress ............................................................................................................................. 22

3 DESENVOLVIMENTO .................................................................................................... 24

3.1 REQUISITOS .................................................................................................................... 24

3.2 ESPECIFICAÇÃO ............................................................................................................ 26

3.2.1 Diagrama de casos de uso ............................................................................................... 27

3.2.2 Diagrama de classes ........................................................................................................ 29

3.2.3 Diagrama de atividades ................................................................................................... 41

3.2.4 Arquitetura e integrações do aplicativo........................................................................... 42

3.3 IMPLEMENTAÇÃO ........................................................................................................ 44

3.3.1 Técnicas e ferramentas utilizadas.................................................................................... 45

3.3.2 Trechos de código ........................................................................................................... 46

3.3.3 Operacionalidade da implementação .............................................................................. 55

3.4 RESULTADOS E DISCUSSÕES ..................................................................................... 66

3.4.1 Quadro de comparação entre os trabalhos ...................................................................... 69

4 CONCLUSÕES .................................................................................................................. 71

4.1 EXTENSÕES .................................................................................................................... 72

APÊNDICE A – INTEGRANDO COM O TRELLO ......................................................... 76

APÊNDICE B – INTEGRANDO COM O FACEBOOK ................................................... 77

Page 13: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

12

1 INTRODUÇÃO

Atualmente vive-se em uma sociedade onde cada vez mais se está conectado uns aos

outros por meio da tecnologia, podendo a qualquer momento e lugar obter e compartilhar

informações e relacionamentos. Se está vivendo a chamada terceira plataforma da Tecnologia

da Informação (TI), onde após as duas primeiras plataformas, mainframes e PCs, a terceira

plataforma é baseada no uso comum e integrado de serviços de nuvem (cloud computing), de

mobilidade, de big data em soluções inteligentes capazes de lidar com grande volume de

dados e de rede sociais (social business) (SCHNEIDER, 2013).

As soluções criadas utilizando tecnologias móveis tornam-se acessíveis à medida que

inovações tecnológicas permitem que o smartphone seja performático e com suporte aos

vários recursos multimídia por um custo baixo. Assim, o número de pessoas que utilizam os

smartphones está aumentado (FACEBOOK PARA EMPRESAS, 2013).

Os indivíduos que nasceram a partir de 1989, a chamada geração Z, são incentivadores

e adeptos das novas tecnologias (CERETTA; FROEEMING, 2011). No Brasil, 9 em cada 10

possuem um aparelho celular e 8% deles não são usuários da internet (CONSUMERLAB,

2012, apud ERICSSON, 2013). O smartphone é utilizado para se relacionar com amigos, para

pesquisar preços, localizar estabelecimentos, pesquisar sobre assuntos de interesse, entre

outras atividades. As organizações que desejam conquistar esse público devem estar

preparadas para atender as expectativas e necessidades dessa geração que está tão acostumada

com o uso dessa tecnologia (CERETTA; FROEEMING, 2011). As universidades também se

encaixam nesse cenário e precisam introduzir o uso dessa tecnologia ao seu cotidiano para

buscar a atenção dessa geração tão conectada.

A Universidade Regional de Blumenau (FURB) realiza o evento Interação FURB

desde 2007, com a intenção de apresentar a estrutura da universidade para os alunos que estão

finalizando o ensino médio (geração Z), através de oficinas e atividades relacionadas com os

cursos da instituição (UNIVERSIDADE REGIONAL DE BLUMENAU, 2014b). No ano de

2015 foram mais de 26.000 vagas ofertadas em mais de 590 oficinas. Se inscreveram no

evento um total de 7.500 alunos, vindos de mais de 190 escolas de Blumenau e região

(FURBTV, 2015).

As atividades realizadas no evento envolvem a preparação de salas, auditórios,

laboratórios e tendas espalhadas pela universidade para atender os alunos. Para ajudar os

alunos a chegarem nesses lugares, são posicionados vários marcadores e pessoas em lugares

Page 14: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

13

estratégicos para indicar a localização correta (UNIVERSIDADE REGIONAL DE

BLUMENAU, 2014b).

Uma estratégia para atrair as pessoas em tarefas de uma forma mais imersiva e

utilizando as novas tecnologias são as Gincanas Virtuais. Esse tipo de atividade procura

acrescentar elementos reais a uma Realidade Virtual (RV), tornando o ambiente virtual mais

próximo da realidade (NASCIMENTO; CALAÇA; MELO, 2009). Segundo Souza (2008, p.

149), uma gincana permite aos seus participantes que se “movimentem em busca de parcerias

e na exploração de atividades e objetos, comunicando-se com seus pares, expressando-se por

meio de múltiplas linguagens, descobrindo regras e tomando decisões”.

Desta forma, foi identificada uma oportunidade de desenvolver um aplicativo de

gincanas virtuais para dispositivos móveis no qual pudesse ser utilizado no evento Interação

FURB, contribuindo na tarefa das universidades de atrair a atenção do público jovem e

possibilitando maior interação dos possíveis novos alunos com a própria universidade.

Este trabalho apresenta o desenvolvimento de um aplicativo interativo que possibilite

aos alunos do evento Interação FURB participarem de gincanas virtuais, possibilitando a

integração com as redes sociais.

1.1 OBJETIVOS

O objetivo deste trabalho é criar uma aplicação de gincana virtual voltada para o

evento Interação FURB utilizando o framework multiplataforma Phonegap.

Os objetivos específicos do trabalho são:

a) disponibilizar o uso da rede social Facebook para autenticação e integração dos

grupos;

b) disponibilizar um quadro público da gincana no Trello para que qualquer pessoa

possa acompanhar o seu andamento;

c) disponibilizar a utilização dos recursos do dispositivo móvel na resolução de

tarefas;

d) disponibilizar a utilização da plataforma de compartilhamento de vídeos YouTube

na resolução de tarefas de vídeo;

e) possibilitar o recebimento de notificações para o acompanhamento dos

acontecimentos na gincana;

f) utilizar a solução OpenShift como plataforma de serviço para hospedar o servidor

do protótipo online.

Page 15: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

14

1.2 ESTRUTURA

Para melhor organização e entendimento do leitor, este trabalho está separado em

quatro capítulos. Iniciando o primeiro capítulo com a introdução ao tema do trabalho, seguido

do segundo capítulo no qual estão descritos os fundamentos básicos para o entendimento das

técnicas e ferramentas utilizadas. O terceiro capítulo apresenta informações sobre a

construção do aplicativo como diagramas, arquitetura, comunicação entre cliente e servidores

e o código fonte. As últimas seções trazem as telas do aplicativo demonstrando sua

operacionalidade, os resultados obtidos após o desenvolvimento e comparação entre os

trabalhos correlatos. No quarto e último capítulo estão as conclusões finais e sugestões para o

desenvolvimento de trabalhos futuros.

Page 16: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

15

2 FUNDAMENTAÇÃO TEÓRICA

A seção 2.1 descreve realidade alternativa e gincanas virtuais, apresentando alguns

conceitos iniciais sobre realidade virtual, os tipos de realidade e o surgimento de gincanas

virtuais. Na seção 2.2 é apresentado como a FURB foi criada e o que é o evento Interação

FURB. Na seção 2.3 é apresentado um pouco sobre o framework Phonegap e seus recursos

para o desenvolvimento multiplataforma. Na seção 2.4 é apresentado o Ionic Plataform, e

como a ferramenta possibilita o envio de notificações push para as plataformas Android e

iOS. E ao final, a seção 2.5 apresenta três trabalhos correlatos.

2.1 REALIDADE ALTERNATIVA – GINCANAS VIRTUAIS

A Realidade Virtual (RV) busca criar novas interfaces que cheguem o mais próximo

dos sentidos dos seres humanos. A RV trabalha na ponta do desenvolvimento tecnológico e o

que é considerado RV pode vir a ser a interface padrão do computador do futuro, e RV passa

a ser o que se está sendo pesquisado nos laboratórios de pesquisa (KIRNER, 2004).

A RV possui várias definições aceitas no meio acadêmico, tanto por ser uma área

multidisciplinar, quanto por ser uma área em constante evolução (PINHO; KIRNER,

[1997?]). Uma definição mais refinada de RV, segundo Tori, Kirner e Siscouto (2006, p. 7)

diz que a RV “é uma interface avançada para aplicações computacionais, que permite ao

usuário a movimentação (navegação) e interação em tempo real, em um ambiente

tridimensional, podendo fazer uso de dispositivos multissensoriais, para atuação ou

feedback”.

A RV pode ser classificada conforme o nível de interação do usuário com o sistema de

RV, em imersiva e não-imersiva. É imersiva quando o usuário é transportado para o domínio

da aplicação de RV, com a utilização de ferramentas que auxiliem na imersão, como, por

exemplo, capacete e luva para simulação de visão e tato, auxiliando a sensação de estar dentro

de um mundo virtual. E é não-imersiva quando o usuário é transportado para o domínio da

aplicação parcialmente, interagindo com um mundo virtual sem fazer parte dele, como, por

exemplo, a utilização de monitor e projeção (TORI; KIRNER; SISCOUTO, 2006).

Com a evolução das aplicações multimídias e da RV, e também devido ao maior poder

de processamento nos computadores, tornou-se possível aplicações do tipo Realidade

Aumentada (TORI; KIRNER; SISCOUTO, 2006). A RV procura trazer o usuário da

aplicação para o ambiente virtual, já a Realidade Aumentada, segundo Tori, Kirner e Siscouto

(2006, p. 22), “mantém o usuário no seu ambiente físico e transporta o ambiente virtual para o

Page 17: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

16

espaço do usuário, permitindo a interação com o mundo virtual, de maneira mais natural e

sem necessidade de treinamento ou adaptação”.

Um tipo de aplicação que está aparecendo nos últimos anos são as aplicações de

realidade alternativa de gincanas virtuais. Nessas aplicações os usuários interagem com

elementos reais para interagir em um mundo virtual, misturando elementos reais com virtuais

(NASCIMENTO; CALAÇA; MELO, 2009). Nas gincanas os participantes se dividem em

grupos e buscam realizar tarefas para completar objetivos. Durante essa busca, são

desenvolvidas habilidades de trabalho em grupo e o desenvolvimento do raciocínio. Os

participantes são postos a lidar com diferentes situações e precisam utilizar habilidades que

muitas vezes não estão habituados a utilizar (GOSSENHEIMER; CARNEIRO; CASTRO,

2015).

2.2 FURB – INTERAÇÃO FURB

A FURB teve sua origem no ano de 1964. Com os esforços da comunidade da região

em trazer ensino de nível superior para o interior do estado de Santa Catarina, foi criada a

Faculdade de Ciências Econômicas. Com a construção de um obelisco em 1968, é iniciada a

construção da sede da universidade. Neste ano também foi assinada a carta de Ibirama,

documento símbolo que representa a integração dos municípios em reconhecer a instituição

como universidade. Em 1995, pela Lei Complementar Municipal nº 80, a Universidade

Regional de Blumenau figura como uma Instituição de Ensino Superior criada e mantida pela

Fundação Universidade Regional de Blumenau (UNIVERSIDADE REGIONAL DE

BLUMENAU, 2014a).

Desde de 2007 a FURB vem realizando o evento Interação FURB. Este evento tem

como objetivo apresentar toda a estrutura da universidade para os alunos do ensino médio da

região, através de oficinas e atividades, no intuito de auxiliá-los na escolha do seu futuro

profissional. Como os alunos que participam do evento não conhecem a estrutura da

universidade, a FURB posiciona placas, avisos e disponibiliza pessoas para que sirvam como

guia para que os alunos consigam achar os locais onde são ministrados as palestras e oficinas.

(UNIVERSIDADE REGIONAL DE BLUMENAU, 2014b).

As atividades são focadas nos cursos oferecidos na universidade. Os alunos se

inscrevem de acordo com o seu interesse em cada área, podendo tirar dúvidas com os

professores e alunos do curso. Por exemplo, existe a oficina de robótica do curso Ciência da

Computação, onde os alunos são apresentados a alguns conceitos da área e podem ver os

trabalhos feitos dentro da disciplina de robótica. Outro exemplo de oficina é o júri simulado

Page 18: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

17

do curso de Direito, onde os alunos podem participar como ouvintes de um tribunal. É

explicado o objetivo e como uma sessão é organizada, quais os papeis que existem e a função

de cada um (FURBTV, 2015; OSTETTO, 2013).

Este evento é uma oportunidade para a universidade divulgar seu nome e seu trabalho

para a comunidade, visando também a motivação dos alunos para escolher a FURB como seu

futuro no ensino superior.

2.3 PHONEGAP

O Phonegap foi criado para resolver o problema que os desenvolvedores possuem

quando precisam criar aplicativos para várias plataformas existentes no mercado, como por

exemplo iPhone, Android, Windows Phone, entre outras. Como cada plataforma utiliza uma

framework e linguagem diferente, os desenvolvedores, caso desejarem que seus aplicativos

tenham uma maior abrangência no mercado, precisam investir seus recursos em várias frentes

de desenvolvimento. O Phonegap resolve este problema porque utiliza tecnologias baseadas

em padrões da web, como, por exemplo, HTML, CSS e JavaScript, tornando o aplicativo apto

a futuramente evoluir para ser compatível com os navegadores (TRICE, 2012a).

O desenvolvimento com o Phonegap envolve a utilização de plugins para acessar os

recursos nativos do celular (TRICE, 2012b). Alguns recursos geralmente utilizados são GPS,

push notification, integração com redes sociais e banco de dados. O Quadro 1 mostra uma

relação de plugins disponíveis no Phonegap para cada recurso mencionado.

Quadro 1 - Lista de recursos e plugins

Recurso Plugin Link

GPS Cordova-plugin-

geolocation

https://github.com/apache/cordova-plugin-geolocation

Push notification Phonegap-plugin-

push

https://github.com/phonegap/phonegap-plugin-push

Integração rede

social

SocialSharing-

PhoneGap-Plugin

https://github.com/EddyVerbruggen/SocialSharing-

PhoneGap-Plugin

Banco de dados Cordova-sqlite-

storage

https://github.com/litehelpers/Cordova-sqlite-storage

Fonte: adaptado de Apache Cordova (2013).

O Phonegap possui uma interface via linha de comando, Phonegap CLI, que possibilita

que os plugins sejam adicionados ao projeto. Por exemplo, para adicionar o plugin que

permite a manipulação de dados de GPS, basta executar o comando cordova plugin add

cordova-plugin-geolocation, conforme a Figura 1.

Page 19: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

18

Figura 1 - Adicionando o plugin de GPS

É possível a criação de plugins customizados para que os desenvolvedores possam

utilizar todos os recursos do desenvolvimento nativo em uma plataforma híbrida. Um

exemplo de uso de plugin customizado seria a criação de uma interface que comunica

nativamente com o back-end da aplicação, na tentativa de proteger os dados de acesso ao

serviço. Esses plugins devem ser escritos na linguagem nativa de cada plataforma.

O Phonegap utiliza os componentes padrões do HTML5 para a interface com o

usuário, fazendo com que o aplicativo se assemelhe muito a uma página web. Para diminuir a

sensação do usuário estar navegando em um site, existem alguns frameworks que fornecem

componentes visuais que se adaptam ao sistema operacional do dispositivo móvel do usuário.

Um desses frameworks é o Ionic, criado em 2013, focado em disponibilizar um SDK de

componentes para web, utilizando as tecnologias HTML, CSS e Javascript, tendo o

framework AngularJS como suporte à criação de aplicações utilizando o modelo MVC

(Model-View-Controller) (IONICFRAMEWORK, 2016; PEREIRA, 2015).

2.4 IONIC PLATFORM – NOTIFICAÇÕES PUSH

O Ionic Platform é um conjunto de serviços integrados na nuvem, focado em

proporcionar ferramentas que ajudam o desenvolvimento, distribuição e escalonamento de

aplicativos. Ele oferece serviços para autenticação de usuários, notificações push, compilação

e distribuição nas lojas de aplicativo oficiais do Google (Google Play) e Apple (App Store).

Com isso, mesmo o desenvolvedor não possuindo um Mac, ele pode disponibilizar o

aplicativo na App Store através do Ionic Platform. A plataforma também fornece a

atualização dos aplicativos integrada com o Google Play e App Store, onde após realizar o

deploy para o Ionic Platform, a própria plataforma atualiza as lojas com a nova versão (IONIC

PLATFORM, 2016a).

Para aumentar o engajamento dos usuários na utilização do aplicativo, é importante

manter o seu conteúdo sempre atualizado. Uma maneira comum de fazer isso é a utilização de

notificações push, informando sobre as novidades do aplicativo sem a necessidade do mesmo

estar aberto. As notificações push são textos curtos enviados pelos aplicativos para os

Page 20: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

19

dispositivos móveis (ANDROID DEVELOPERS, 2016). Cada plataforma possui um serviço

próprio para o envio de notificações, exigindo configurações específicas para os aplicativos

que fazem uso desse recurso. O serviço de Push do Ionic Platform oferece uma solução

integrada com os serviços de notificação das plataformas Android e iOS. A Figura 2 ilustra o

funcionamento do serviço de notificações do Ionic Platform, onde o envio de notificações é

centralizado na API de push, que, através de um registro prévio do aplicativo identificando o

dispositivo móvel com um token, encaminha a mensagem para o serviço de notificação

correspondente ao sistema operacional do dispositivo móvel, ficando esse responsável pela

entrega da notificação para o usuário (IONIC PLATFORM, 2016b).

Figura 2 - Funcionamento da API de push do Ionic Platform

Fonte: Ionic Platform (2016b).

2.5 TRABALHOS CORRELATOS

A seguir são descritos dois trabalhos e um produto com características semelhantes aos

principais objetivos deste trabalho. A seção 2.4.1 detalha “Sistema móvel na plataforma

Android para compartilhamento de geolocalização usando mapas e notificações da Google”

de Kestring (2014). A seção 2.4.2 detalha “TôAqui! Aplicativo para Georreferenciamento em

Ambientes Restritos” de Rocha (2015). É possível verificar que nestes dois trabalhos foi

utilizada uma aplicação na plataforma móvel para ser aplicado no evento Interação FURB. A

seção 2.4.3 traz o produto Ingress (NIANTIC LABS, 2012). Neste jogo é possível verificar

que é utilizado o conceito de mundo virtual junto com a utilização de lugares reais para

aumentar a imersão dentro do jogo. A seção 2.5 traz um quadro comparativo entre os

trabalhos correlatos.

Page 21: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

20

2.5.1 Sistema Móvel na plataforma Android para compartilhamento de geolocalização

usando mapas e notificações da Google

O trabalho de Kestring (2014) busca auxiliar os usuários a se localizarem no evento

Interação FURB. Através de um aplicativo é possível visualizar a posição do usuário, a

posição de outros usuários logados e visualizar os pontos de interesse cadastrados pelo

usuário e/ou pela universidade. O aplicativo foi desenvolvido utilizando Java na plataforma

Android.

Foi desenvolvido também um aplicativo servidor web service em Java para atender as

necessidades do aplicativo mobile. A Figura 3 apresenta a arquitetura da solução

desenvolvida.

Figura 3 - Cenário do Sistema

Fonte: Kestring (2014, p. 23).

Conforme descrito no trabalho de Kestring (2014), segue legenda da arquitetura do

projeto apresentada na Figura 3.

A aplicação cliente denominada VisEduAndroid (1), a área de recursos

compartilhados (2), o serviço Google Cloud Message (GCM) na aplicação cliente

(3), o serviço BroadcastReceiver configurado para receber notificações (4), o

próprio servidor GCM da Google (5), o aplicativo servidor VisEduWebservice (6), o

serviço Cloud Connection Server (CCS) no servidor (7) e o armazenamento das

informações na base de dados MySQL no servidor (8). O aplicativo cliente salva o

gcmId, que é o registro de identificação do aparelho no GCM, na SharedPreferences

do Android, para que posteriormente ele utilize este mesmo identificador sem a

necessidade de realizar um novo registro (A). O aplicativo VisEduAndroid envia e

recebe informações do aplicativo VisEduWebservice através do webservice

construído para realizar a comunicação entre o aplicativo cliente e o aplicativo

servidor (B). O aplicativo VisEduAndroid identifica a necessidade de registrar o

Page 22: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

21

aparelho no GCM e inicia o processo requisitando o identificador. Ao receber o

identificador, guarda o valor na SharedPreferences do Android e envia via

notificação o valor para o servidor VisEduWebservice. O primeiro projeto

desenvolvido foi o VisEduAndroid, conforme representado na legenda (1) da Figura

3, responsável por apresentar os dados ao usuário e trata os eventos ocorridos para

enviar os dados do aplicativo para o servidor webservice (B). O servidor webservice

por sua vez, representa o segundo projeto, que disponibiliza acesso ao banco de

dados conforme representado na legenda (6) da Figura 3 (KESTRING, 2014, p. 23-

24).

O trabalho de Kestring (2014) não distingue qual a altitude da posição do usuário. Não

é possível saber se o ponto de interesse está acima ou abaixo da posição atual. O trabalho de

Rocha (2015) descrito a seguir trata esta situação utilizando AGPS e Beacons.

2.5.2 Tô Aqui: Aplicativo para georreferenciamento em ambientes restritos

O trabalho de Rocha (2015) busca, através da utilização de Assisted Global Positioning

System (AGPS) e Beacons, aprimorar o georreferenciamento em ambientes restritos. Neste

trabalho é possível visualizar a localização do usuário dentro de um mapa interno. Também é

possível receber notificações conforme a localização dentro da universidade. O usuário é

notificado ao se aproximar de um local que possua um evento que acontecerá dentro de 1

hora. Rocha (2015) resolveu o problema da altitude (se o ponto de interesse está acima, no

andar atual, ou abaixo da posição do usuário) utilizando os Beacons. Cada Beacon é

configurado com as informações de latitude, longitude e andar, assim, quando o celular se

comunica com um Beacon, é possível definir em qual andar e direção o ponto de interesse

está. A comunicação com o Beacon é feita através de bluetooth.

Na Figura 4 é possível visualizar a tela inicial do aplicativo. Na parte superior é

indicado em qual bloco e andar o usuário está. A localização atual do usuário é apresentada no

centro da tela.

Page 23: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

22

Figura 4 - Tô Aqui: Tela inicial

Fonte: Rocha (2015, p. 48).

Para o desenvolvimento do aplicativo foi utilizado o framework Phonegap. Segundo

Rocha (2015), a utilização desse framework foi muito efetiva e cumpriu com o seu objetivo.

Em sua conclusão, ele descreve:

A possibilidade de disponibilizar o aplicativo para a plataforma iOS e para a

plataforma Android com todos os recursos foi um objetivo concluído e muito

importante, pois com a mesma implementação será possível atender uma quantidade

maior de usuários e a manutenção do código estaria centralizada em apenas um

projeto, além de comprovar o uso de um gerador de código, Cordova/Phonegap,

para gerar um aplicativo integrado com hardware (ROCHA, 2015, p. 57).

2.5.3 Ingress

Ingress é um jogo criado pela empresa NianticLabs, startup do Google, e foi lançado

em dezembro de 2012 para dispositivos Android. No mundo virtual de Ingress, duas

organizações rivais lutam pelo domínio sobre uma energia que emana de vários pontos do

planeta. A organização “The Enlightened” defende que essa energia é benéfica e deve ser

utilizada para o bem do planeta. A organização “The Resistence” defende que essa energia

está influenciando a mente das pessoas e que deve ser detida (KARASINSKI, 2012).

O jogo Ingress está na categoria de jogos de Realidade Alternativa. Nele é preciso

realizar missões tanto na tela do aplicativo como na vida real. Nessas missões o usuário deve

Page 24: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

23

seguir trajetos previamente especificados para acumular pontos e destravar melhorias

(KARASINSKI, 2012).

A Figura 5 mostra a tela inicial do jogo. A esquerda é possível verificar a posição do

usuário (uma seta com um círculo ao redor) e a posição de uma fonte de energia

(concentração de pontos logo acima da posição do usuário). A direita é possível verificar

alguns portais próximos a localização do usuário.

Figura 5 - Tela inicial do jogo Ingress

Fonte: Reis (2014, p. 371).

É utilizado o GPS do smartphone para mostrar a localização do usuário. A plataforma

de desenvolvimento utilizada foi o libGDX (LIBGDX, 2015a). O libGDX é um framework

Open Source de desenvolvimento de jogos escrito em Java e permite o desenvolvimento para

as plataformas desktop, web e mobile utilizando a mesma base de código. Este framework

utiliza o Open GL ES 2 para processamento gráfico (LIBGDX, 2015b).

Page 25: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

24

3 DESENVOLVIMENTO

Este capítulo aborda os aspectos referente à construção do aplicativo. Na seção 3.1

encontram-se os requisitos funcionais e não funcionais. Na seção 3.2 são apresentados os

diagramas de casos de usos, classes e atividades, detalhando o funcionamento e especificando

o aplicativo. Ainda nesta seção, são apresentados os principais serviços que integram o Furb

Mobile Gincanas, mostrando a comunicação entre todos os componentes. A seção 3.3 trata de

todas as ferramentas, bibliotecas e frameworks utilizados durante o desenvolvimento. Os

principais trechos de código e utilização do aplicativo também são explicados nesta seção.

Para encerrar o capítulo, a seção 3.4 expõem os resultados obtidos após o desenvolvimento do

aplicativo e realiza a comparação entre trabalhos correlatos apresentados na seção 2.4.

3.1 REQUISITOS

Os requisitos funcionais e não funcionais do aplicativo estão descritos conforme a lista

abaixo:

a) permitir que o usuário utilize sua conta da rede social Facebook para se autenticar

(Requisito Funcional - RF);

b) permitir que o usuário participe de gincanas (RF);

c) permitir que o usuário participe de grupos (RF);

d) permitir que o usuário assuma o papel de líder e delegue tarefas para outros

membros do grupo (RF);

e) permitir que o usuário utilize a câmera do dispositivo móvel para resolver tarefas

de imagem (RF);

f) permitir que o usuário utilize o site de compartilhamento de vídeos YouTube para

resolver tarefas de vídeo (RF);

g) permitir que o usuário visualize sua localização atual em um mapa (RF);

h) permitir que o usuário utilize sua localização atual através do GPS para resolver

tarefas de geolocalização (RF);

i) notificar o líder do grupo sobre novos membros (RF);

j) notificar um membro do grupo quando uma tarefa é associada a ele (RF);

k) notificar o líder do grupo quando um membro fica sem tarefas (RF);

l) notificar o líder e o membro responsável pela tarefa quando a mesma é avaliada

(RF);

m) notificar todos os participantes da gincana sobre o resultado final da gincana (RF);

Page 26: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

25

n) permitir que o usuário acesse o placar da gincana no Trello (RF);

o) o aplicativo deve ser desenvolvido com a plataforma PhoneGap (Requisito Não-

Funcional – RNF);

p) o aplicativo deve utilizar o framework Ionic (RNF);

q) o aplicativo deve ser desenvolvido no ambiente de desenvolvimento Visual Studio

Code (RNF);

r) o aplicativo deve se comunicar com o servidor back-end por requisições web

service do tipo REST, utilizando a biblioteca AngularJS (RNF);

s) o aplicativo deve utilizar a API do Google Maps para a plataforma PhoneGap e

realizar a integração com os mapas da Google (RNF);

t) o aplicativo deve utilizar o módulo do AngularJS ngCordova para acessar a

câmera e o GPS do dispositivo móvel (RNF);

u) o aplicativo deve utilizar a API do YouTube para permitir a integração dos vídeos

do YouTube (RNF);

v) o aplicativo deve utilizar a API do Ionic Platform para realizar a integração com o

servidor de notificações.

Os requisitos funcionais e não funcionais do site (front-end) e do servidor (back-end)

estão descritos conforme a lista abaixo:

a) permitir que o usuário crie gincanas (RF);

b) permitir que o usuário crie grupos (RF);

c) permitir que o usuário crie tarefas dos tipos pergunta, imagem, vídeo e

geolocalização (RF);

d) apresentar um mapa com uma cerca virtual quando a tarefa for do tipo

geolocalização (RF)

e) permitir que o usuário autorize o acesso do site a sua conta do Trello (RF);

f) disponibilizar uma tela para monitoramento da gincana (RF);

g) permitir que as tarefas sejam avaliadas (RF);

h) mostrar a imagem utilizada pelo participante da gincana na resolução das tarefas

de imagem (RF);

i) mostrar o vídeo utilizado pelo participante da gincana na resolução das tarefas de

video (RF);

j) mostrar a localização do participante da gincana usada na resolução das tarefas de

geolocalização (RF);

Page 27: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

26

k) o servidor deve converter o token de autorização do usuário no Facebook para um

token de longa duração (RF);

l) o servidor deve notificar os usuários do aplicativo sobre os acontecimentos da

gincana (RF);

m) o servidor deve criar os quadros, listas e cartões respectivos as gincanas, grupos e

tarefas no Trello (RF);

n) o site deve ser desenvolvido com tecnologia web (HTML, CSS e Javascript) no

ambiente de desenvolvimento Visual Studio Code (RNF);

o) a arquitetura do site deve utilizar o modelo MVC utilizando o framework

AngularJS (RNF);

p) o site deve utilizar a biblioteca cliente.js para realizar a integração com o Trello;

q) o site deve utilizar a API do Google Maps para a plataforma Javascript e realizar a

integração com os mapas da Google (RNF);

r) o servidor deve ficar hospedado online na plataforma OpenShift (RNF);

s) o servidor deve ser desenvolvido na linguagem de programação Java no ambiente

de desenvolvimento Eclipse, utilizando a ferramenta para automação de

compilação Maven (RNF);

t) o servidor deve suportar chamadas REST através do framework RESTEasy

(RNF);

u) o servidor deve utilizar a classe JTrello, disponibilizada pelo usuário asommariva

no serviço de hospedagem de projetos Bitbucket, para integrar com a API do

Trello (RNF);

v) o servidor deve utilizar a biblioteca restfb para integrar com a API do Facebook

(RNF);

w) o servidor deve utilizar a classe Ionic, disponibilizada pelo usuário slarsen no

serviço de hospedagem de projetos GitHub, para integrar com o Ionic Platform

(RNF);

x) o servidor deve utilizar o banco de dados PostgreSQL e realizar a persistência dos

dados através do framework Hibernate (RNF).

3.2 ESPECIFICAÇÃO

Para o entendimento das funcionalidades e arquitetura do aplicativo, esta seção

apresenta os diagramas de casos de uso, classes e atividades, elaborados com as ferramentas

Page 28: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

27

StarUML, Creately e Draw.io. No final desta seção é apresentada a arquitetura de

comunicação entre o aplicativo, site e o servidor.

3.2.1 Diagrama de casos de uso

A partir do levantamento dos requisitos da aplicação, foram desenvolvidos dois

diagramas de caso de uso. A Figura 6 mostra os casos de usos que representam as

funcionalidades disponíveis para o ator Organizador.

Figura 6 - Casos de uso do front-end

O caso de uso UC01 – Cadastrar gincana é a ação inicial que o Organizador deve

fazer para iniciar o cadastro de uma gincana. No caso de uso UC02 – Cadastrar tarefas é

possível cadastrar tarefas do tipo pergunta, imagem, vídeo e geolocalização. Para as tarefas do

tipo localização, o caso de uso UC03 – Tarefa geolocalização permite ao Organizador

selecionar um local no mapa e definir o tamanho do raio de alcance. O caso de uso UC04 –

Vincular dependência permite definir quais tarefas são pré-requisitos para outra. No caso

de uso UC05 – Cadastrar grupo é possível cadastrar os grupos que participaram da

gincana. No caso de uso UC06 – Ativar gincana, é necessário o usuário possuir e autorizar

sua conta do Trello para integração com o Furb Mobile Gincanas, como descrito no caso de

uso UC07 – Autorizar Trello. O link do quadro criado no Trello para a gincana está

disponível para consulta no caso de uso UC08 – Visualizar Trello. No caso de uso UC09

– Monitorar gincana, o usuário pode verificar o andamento da gincana, podendo visualizar

as tarefas e avaliar as já resolvidas. No caso de uso UC10 – Avaliar resposta o usuário

Page 29: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

28

deve dar uma nota para a resposta da tarefa. Ao chegar ao final da gincana, o usuário deve

finalizar a gincana através do caso de uso UC11 – Finalizar gincana.

A Figura 7 mostra os casos de uso que representam as funcionalidades disponíveis para

o ator Participante e para as suas generalizações Líder e Membro.

Figura 7 - Casos de uso do mobile

O caso de uso UC01 – Efetuar login é a ação inicial do usuário para utilizar o Furb

Mobile Gincanas, ele deve autorizar o acesso ao seu nome e foto pública de perfil do

Facebook. Após sua autenticação, o caso de uso UC02 – Participar gincana permite o

usuário entrar em uma gincana. Ao entrar na gincana, o usuário deve escolher um grupo para

entrar, descrito no caso de uso UC03 – Participar grupo. Caso ele seja o primeiro

integrante do grupo, ele se torna o líder do mesmo, caso contrário ele vira um membro

comum. O caso de uso UC04 – Delegar tarefa permite que o Líder possa delegar uma

tarefa para um membro do grupo que não esteja associado com alguma tarefa. O caso de uso

UC05 – Resolver tarefa permite ao usuário resolver uma tarefa que esteja associada com

seu usuário. Como descrito nos casos de uso UC06 – Resolver tarefa pergunta, UC07 –

Resolver tarefa imagem, UC08 – Resolver tarefa vídeo e UC09 – Resolver tarefa

geolocalização, cada tarefa exige um tipo de resposta diferente. Quando a tarefa for do tipo

imagem, é necessário que o usuário permita o aplicativo acessar sua câmera para tirar fotos,

ação que está descrita no caso de uso UC10 – Autorizar acesso a câmera. Quando a

tarefa for do tipo geolocalização, é necessário que o usuário permita o aplicativo receber suas

informações de localização fornecidas pelo GPS e com base na rede, ação que está descrita no

Page 30: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

29

caso de uso UC11 – Autorizar acesso a localização. No caso de uso UC12 –

Visualizar placar é possível visualizar o quadro correspondente a gincana no site Trello.

3.2.2 Diagrama de classes

O diagrama de classes apresenta uma visão de como as classes estão estruturadas e

relacionadas. Nesta seção são descritas as classes necessárias para o desenvolvimento desta

aplicação, sendo que a aplicação está dividida em três partes, o front-end, aplicativo mobile e

back-end.

3.2.2.1 Diagrama de classes do front-end

A Figura 8 retrata a estrutura de classes do front-end. A classe Gincana contém as

propriedades utilizadas pela aplicação para representar uma gincana. A classe gincanaCtrl

controla a apresentação das gincanas existentes no sistema, permitindo também a sua

ativação. A classe novoGincanaCtrl permite o cadastro e alteração de gincanas. A classe

monitorarGincanaCtrl disponibiliza a visualização do andamento da gincana,

disponibilizando uma lista de tarefas por usuário, além de permitir o encerramento da gincana.

A classe gincanaAPI contém os métodos de comunicação com o back-end necessários para

inserir, alterar, listar, monitorar e finalizar uma gincana. A classe Tarefa contém as

propriedades utilizadas na aplicação para representar uma tarefa da gincana. A classe

tarefaGincanaCtrl permite a visualização das tarefas cadastradas. A classe

novoTarefaCtrl permite o cadastro e alteração das tarefas. A classe

dependenciaTarefaCtrl contém os métodos para visualizar e alterar a dependência entre as

tarefas. A classe TarefaGrupo contém as propriedades utilizadas na aplicação para

representar uma tarefa do grupo associada a um usuário. A classe avaliarRespostaCtrl

permite visualizar a resposta dada por um participante a tarefa e também permite sua

avaliação com uma nota de zero a dez. A classe tarefaAPI contém os métodos de

comunicação com o back-end necessários para inserir, alterar, vincular dependência e avaliar

uma tarefa.

A classe Grupo contém as propriedades utilizadas na aplicação para representar um

grupo da gincana. A classe gruposGincanaCtrl permite visualizar os grupos cadastrados. A

classe novoGrupoCtrl é utilizado para cadastrar e alterar os grupos. A classe grupoAPI

contém os métodos de comunicação com o back-end necessários para inserir e alterar os

grupos. A classe config contém o endereço base para fazer as chamadas à API do back-end,

além do endereço base do diretório de imagens no servidor.

Page 31: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

30

Figura 8 - Diagrama de classes do fron-end

3.2.2.2 Diagrama de classes do aplicativo mobile

A Figura 9 retrata a estrutura de classes do aplicativo mobile. A classe

furbMobileCtrl é responsável por realizar o login do usuário através do Facebook, obtendo

um token que será utilizado para realizar as chamadas à API do Facebook, tanto pelo

aplicativo mobile quanto pela aplicação back-end. Esta classe também obtém o token do

telefone que será utilizado para as Push Notifications integradas com o Ionic Platform. A

classe Usuario contém as propriedades utilizadas pela aplicação para representar um usuário.

A classe usuarioAPI contém os métodos de comunicação com o back-end necessários para

inserir, obter dados do usuário e obter uma lista de usuários sem tarefa. A classe Gincana

contém as propriedades utilizadas pela aplicação para representar uma gincana. A classe

gincanasCtrl permite a visualização de gincanas ativas, onde também é possível selecionar

uma gincana para entrar. A classe GincanaAPI contém os métodos de comunicação com o

back-end necessários para obter a lista de gincanas ativas e informações específicas de uma

gincana. A classe Grupo contém as propriedades utilizadas pela aplicação para representar um

grupo. A classe gruposCtrl disponibiliza a lista de grupos da gincana para o usuário escolher

para entrar. A classe GrupoAPI contém os métodos de comunicação com o back-end

necessários para obter a lista de grupos disponíveis para uma gincana, obter o grupo do

usuário e vincular o usuário com um grupo. A classe TarefaGrupo e Tarefa contêm as

Page 32: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

31

propriedades utilizadas na aplicação para representar uma tarefa do grupo associada a um

usuário. A classe tarefasCtrl permite visualizar as tarefas associadas ao usuário. A classe

TarefaAPI contém os métodos de comunicação com o back-end necessários para obter a lista

de tarefas associadas ao usuário, atribuir uma tarefa a um membro e responder as tarefas de

pergunta, imagem, vídeo e geolocalização. A classe delegarTarefaCtrl permite ao líder do

grupo associar uma tarefa para um usuário sem tarefas.

A classe resolverPerguntaCtrl permite informar uma resposta para uma tarefa do

tipo pergunta. A classe resolverImagemCtrl faz acesso a câmera do aparelho para tirar uma

foto e responder uma tarefa do tipo imagem. A classe resolverVideoCtrl permite o usuário

procurar e selecionar um vídeo do site YouTube para responder uma tarefa do tipo vídeo. A

classe resolverGeolocalizacaoCtrl permite ao usuário verificar sua posição atual,

visualizar o objetivo da tarefa e responder a tarefa caso sua posição esteja dentro do raio do

ponto central do objetivo da tarefa do tipo geolocalização. A classe Config contém o

endereço base para fazer as chamadas à API do servidor back-end.

Figura 9 - Diagrama de classes do aplicativo mobile

Page 33: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

32

3.2.2.3 Diagrama de classes do back-end

A Figura 10 apresenta o diagrama de pacotes do back-end da aplicação. O pacote API é

a porta de entrada para a comunicação entre a aplicação mobile e front-end com o back-end.

Este pacote faz uso dos objetos do pacote DTO para transferência simplificada de dados e dos

objetos do pacote Service para a invocação das regras de negócio. O pacote Service

representa as classes que possuem as regras de negócio que atuam sobre os objetos dos

pacotes DTO, MODEL e DAO. Os objetos do pacote DAO fazem a ligação do banco de dados com o

restante da aplicação, disponibilizando métodos para inserir, alterar e retornar os dados. Os

objetos do pacote MODEL representam a modelagem de tabelas e campos utilizados na

aplicação. O pacote Trello API faz a integração com a ferramenta Trello. O pacote Ionic

API faz a integração com a ferramenta Ionic Platform.

Figura 10 - Diagrama de classes da arquitetura do back-end

3.2.2.3.1 Diagrama de classes do pacote MODEL

A Figura 11 apresenta as classes que pertencem ao pacote MODEL. Estas classes contêm

as informações necessárias para a persistência dos dados no banco de dados. Todas elas

implementam a interface BaseEntityId, a qual possuem o campo id que é utilizado como

chave primária. A classe Usuario possui o id do usuário e token do Facebook, e token de

identificação para notificações push do Ionic Plataform. A classe Gincana possui os atributos

titulo, descricao e situacao, podendo estar não ativada, ativada e finalizada, além do

Page 34: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

33

token utilizado para integração com o Trello, id e URL do quadro. A classe Grupo possui o

nome do grupo, o usuário líder e o id da lista correspondente ao grupo no quadro da gincana

no Trello. A classe Tarefa possui os atributos titulo, descricao e tipoTarefa, sendo que

os tipos podem ser pergunta, imagem, vídeo e geolocalização. A classe Tarefa também

representa a localização para as tarefas do tipo geolocalização, através dos atributos

latitude, longitude e raio. A classe DependenciaTarefa representa a ligação de uma

tarefa com outra, sendo que uma tarefa só fica disponível para o participante da gincana caso

não possua nenhuma tarefa requisito pendente. A classe UsuarioGrupo representa a ligação

do usuário com um grupo da gincana, sendo que um usuário pode apenas participar de um

grupo por gincana. A classe TarefaGrupo representa a tarefa associada ao grupo, com a

indicação do usuário responsável pela tarefa. Também possui os atributos de resposta,

latitude e longitude quando a tarefa for do tipo geolocalização, nota, situacao podendo

estar pendente, assumida, em avalição e completa, além da indicação do usuário associado a

tarefa. A classe ResultadoGincana contém os atributos utilizados para representar o

resultado do grupo na gincana. A classe possui os atributos de somaNotas, para indicar a

soma das notas, quantidadeIntegrantes, representando a quantidade de participantes do

grupo e colocacao, indicando a posição do grupo no placar final da gincana.

Figura 11 - Diagrama de classes do pacote MODEL

Page 35: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

34

3.2.2.3.2 Diagrama de classes do pacote DAO

A Figura 12 apresenta as classes que pertencem ao pacote DAO. Estas classes

disponibilizam métodos para acesso aos dados no banco de dados. A classe GenericDAO

implementa métodos genéricos para adicionar, remover, buscar, atualizar e obter uma lista dos

registros. Todas as classes DAO estendem dessa classe para reaproveitar os métodos de acesso

simples. Cada DAO também possui os métodos create, que adiciona o registro caso seu id

não exista, ou atualiza caso exista, update para atualizar o registro e recupera para obter a

entidade pelo seu id. Além do método getEntityClass que retorna a classe da entidade base

da classe DAO.

A classe GincanaDAO disponibiliza o método getListaGincanaAtiva que retorna

uma lista de gincanas com a situação ativa. A classe GrupoDAO disponibiliza o método

getGruposFromGincana que retorna uma lista de grupos pertencentes a gincana. A classe

UsuarioDAO disponibiliza o método recuperaPorIdFacebook para recuperar o cadastro do

usuário pelo seu id do Facebook. A classe TarefaDAO disponibiliza o método

getTarefasByIdGincana que retorna uma lista de tarefas pertencentes a gincana. A classe

DependenciaTarefaDAO disponibiliza o método excluirDependenciasTarefa que exclui

todas a configuração de dependência e requisito de uma tarefa, e o método

obterTarefasDependentes que retorna uma lista de dependências da tarefa. A classe

TarefaGrupoDAO disponibiliza o método getTarefasFromGrupoByUsuario que retorna uma

lista de tarefas que estejam disponíveis ao usuário, ou seja, que estejam associadas ao usuário,

com a situação pendente ou assumida e não possuam nenhuma tarefa requisito com a situação

pendente ou assumida. O método vincularTarefasComUsuarioLider associa todas as

tarefas do grupo a um usuário. O método vincularTarefaComUsuario associa uma tarefa do

grupo a um usuário e o método getTarefasByGincana retorna uma lista de tarefas de grupos

associada a uma gincana. A classe UsuarioGrupoDAO possui o método

getUsuariosFromGrupo que retorna uma lista de usuários pertencentes a um grupo. O

método getGrupoFromUsuario retorna o grupo associado a um usuário. O método

getUsuariosFromGrupoSemTarefa retorna uma lista de usuários do grupo que estão sem

tarefas assumidas, excluindo o líder do grupo que possui todas as tarefas assumidas para

poder delegar para outros usuários. O método getQuantidadeUsuariosPorGrupo retorna à

quantidade de usuários que pertencem ao grupo. A classe ResultadoGincanaDAO

disponibiliza o método getListaByIdGincana que retorna a lista de resultados da gincana.

Page 36: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

35

Figura 12 - Diagrama de classes do pacote DAO

3.2.2.3.3 Diagrama de classes do pacote DTO

A Figura 13 apresenta as classes que pertencem ao pacote DTO. Estas classes são

utilizadas para facilitar a transferência de dados entre sistemas, onde os atributos das classes

MODEL podem ser expostos de uma outra forma para aplicações externas. Todas as classes

possuem os getters e setters para os atributos correspondentes da classe MODEL. Os métodos

parse servem para converter um objeto DTO em objeto MODEL. Os métodos create fazem o

inverso, ou seja, convertem objetos MODEL em DTO.

Page 37: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

36

Figura 13 - Diagrama de classes do pacote DTO

3.2.2.3.4 Diagrama de classes do pacote Trello API

Para a integração com a ferramenta Trello, foi adaptada a biblioteca JTrello

disponibilizada pelo usuário asommariva no serviço de hospedagem de projetos Bitbucket.

Foi adaptado para que o JTrello utilize o mesmo framework que o Furb Mobile Gincanas está

utilizando para comunicação via web services RESTful. Assim, ao invés de utilizar o Jersey,

foi alterado para que se utilize o RESTEasy. Também foi adicionado a opção de se poder criar

um quadro público. O pacote Trello API está separado em três pacotes: Trello Model,

Trello Service e Trello Client. A Figura 14 apresenta o diagrama de classes do pacote

Trello Model. A classe Board foi utilizada para representar uma gincana. A classe Listas

foi utilizada para representar as equipes e o resultado final da gincana. A classe Card foi

utilizada para representar as tarefas cumpridas por cada equipe.

Page 38: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

37

Figura 14 - Diagrama de classes do pacote Trello Model

A Figura 15 mostra o diagrama de classes do pacote Trello Service. Todas as

classes herdam da classe TrelloApiBase, que implementa os métodos de comunicação com a

API do Trello. O método create da classe BoardService é utilizado para criar um quadro. É

importante guardar o atributo id do quadro criado já que esse será necessário na criação das

listas e cartões.

Figura 15 - Diagrama de classes do pacote Trello Service

A Figura 16 mostra o diagrama de classes do pacote Trello Client. As classes do

pacote Service interagem com a classe JTrelloClient para obter o serviço necessário que

trata cada assunto. É utilizado o método construtor que recebe o parâmetro authKey e

Page 39: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

38

authToken, respectivamente a chave de API de desenvolvedor e o token de autorização do

cliente.

Figura 16 - Diagrama de classes do pacote Trello Client

3.2.2.3.5 Diagrama de classes do pacote Ionic API

Para a integração com a ferramenta Ionic Platform, foi utilizada a classe Ionic

disponibilizada pelo usuário slarsen no serviço de hospedagem de projetos GitHub. A Figura

17 apresenta o diagrama de classes do pacote Ionic API. O método construtor da classe

Ionic requer um token que identifica o aplicativo integrado com a ferramenta Ionic Platform.

Para enviar uma notificação push, é necessário fornecer ao método push um parâmetro

String em formato JSON com as informações de integração com o Ionic Platform, os tokens

de usuários e o texto da notificação. Mais detalhes da implementação estão na seção 3.3.2.4.

Figura 17 - Diagrama de classes do pacote Ionic API

Page 40: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

39

3.2.2.3.6 Diagrama de classes do pacote Service

A Figura 18 mostra as classes que pertencem ao pacote Service. Estas classes

encapsulam as regras de negócio da aplicação. A classe IonicService comunica com a

classe Ionic para enviar as notificações para os participantes da gincana. A classe

FacebookService comunica com a API restfb para transformar um token de curta duração

em um de longa duração, e obter o nome e foto do Facebook do participante. A classe

TrelloService comunica com a API JTrello através da classe JTrelloCliente para

manipular os quadros, listas e cartões da gincana. A classe UtilitarioService disponibiliza

um método para salvar uma imagem no formato base64 no diretório configurado no atributo

DIRETORIO_IMAGENS.

Figura 18 - Diagrama de classes do pacote Service

3.2.2.3.7 Diagrama de classes do pacote API

A Figura 19 apresenta o diagrama de classes do pacote API. Os web services foram

construídos no estilo arquitetural REST utilizado o framework RESTEasy. A classe

Application possui a anotação @ApplicationPath("/api") que indica para o RESTEasy

qual a Uniform Resource Locator (URI) base. Uma gincana é cadastrada pelo método

cadastrarGincana da classe GincanaAPI. As tarefas são cadastradas pelo método

Page 41: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

40

cadastrarTarefa da classe TarefaAPI. Os grupos são cadastrados no método

cadastrarGrupo da classe GrupoAPI. Após os cadastros, a gincana é ativada pelo método

ativarGincana da classe GincanaAPI. Os usuários são registrados e obtidos pelo método

obterCadastrarPorIdFacebook da classe UsuarioAPI, o qual cadastra um usuário novo

caso o idFacebook fornecido seja desconhecido, ou devolve um existente caso o idFacebook

pertença a um cadastro existente. Após o usuário selecionar uma gincana ativa obtida pelo

método listarGincanasAtivas da classe GincanaAPI, é verificado se o participante

pertence a algum grupo através do método retornarGrupoUsuario da classe GrupoAPI.

Caso esteja sem grupo, o usuário deve se vincular a um grupo da gincana através do método

vincularUsuarioGrupo da classe GrupoAPI. Nesse momento o participante assume o papel

de líder, caso ele seja o primeiro integrante do grupo, ou assume o papel de membro caso o

grupo já possua um líder.

O método obterDisponiveis da classe UsuarioAPI, é utilizado para obter a lista de

membros que estão sem tarefas. Assim o líder pode associar a tarefa a um membro através do

método associarComUsuario da classe TarefaAPI. Um membro resolve uma tarefa através

do método resolver da classe TarefaAPI. Caso a tarefa seja uma imagem, é utilizado o

método resolverImagem da mesma classe. O organizador da gincana avalia as tarefas pelo

método avaliar da classe TarefaAPI. Ao final da gincana, o método finalizar da classe

GincanaAPI é utilizado para encerrar a gincana, calcular o resultado final, publicar o

resultado no Trello e notificar todos os participantes a posição e quantidade de pontos do

grupo na gincana.

Page 42: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

41

Figura 19 - Diagrama de classes do pacote API

3.2.3 Diagrama de atividades

A Figura 20 apresenta um diagrama de atividades onde são representados as etapas e

ações do usuário na utilização do aplicativo. Quando o aplicativo é aberto o token referente ao

dispositivo móvel é registrado junto ao Ionic Platform, possibilitando que o dispositivo móvel

seja identificado para recebimento de notificações push. Em seguida o usuário acessa o menu

de gincanas, onde deve autorizar o aplicativo a acessar informações do perfil do usuário no

Facebook. Após a autorização, o token de acesso referente ao perfil do Facebook e o token

referente ao dispositivo móvel são enviados para o registro/atualização do usuário no back-

end. Após o registro/atualização do usuário, o token do Facebook é convertido para um token

de longa duração, para estender o uso do usuário ao aplicativo sem precisar autorizar

novamente junto ao Facebook. O token gerado é enviado para o dispositivo móvel onde

substituí o token de curta duração. Após isso o usuário deve selecionar uma gincana que esteja

ativa para participar. Depois da seleção da gincana, o usuário deve selecionar um grupo. Caso

o grupo não possua um líder, o usuário assume o papel de líder, caso contrário, assume o

papel de membro. No papel de líder o usuário atribui as tarefas para outros membros do

grupo, além de ser notificado quando novos membros se juntam ao grupo, quando um

membro fica sem tarefa, quando uma tarefa é avaliada e quando a gincana chega ao fim. No

papel de membro o usuário resolve as tarefas atribuídas a ele, além de ser notificado quando

Page 43: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

42

uma nova tarefa lhe é atribuída, quando uma tarefa sua é avaliada e quando a gincana chega

ao fim.

Figura 20 - Diagrama de atividades

3.2.4 Arquitetura e integrações do aplicativo

Para o funcionamento deste trabalho, vários serviços e ferramentas de terceiros foram

utilizados. A Figura 21 mostra a arquitetura macro criada com a integração de todos estes

serviços.

Page 44: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

43

Figura 21 - Arquitetura do aplicativo

A camada Dispositivo Móvel representa o dispositivo móvel do usuário com o

aplicativo Furb Mobile Gincanas instalado. Este por sua vez, é um Hybrid Web Container

desenvolvido na plataforma Ionic e que pode ser executado em sistemas operacionais Android

e iOS. O aplicativo está integrado com a Rede Social Facebook para facilitar o processo de

autenticação, além de obter o nome e foto do perfil do usuário. O site de Videos YouTube é

utilizado para permitir o participante da gincana procurar e selecionar um vídeo para resposta

a uma tarefa. O aplicativo utiliza o sistema de Geolocalização Google Maps para mostrar

um mapa ao usuário demostrando sua posição atual e a posição do objetivo da tarefa.

Na camada Servidor de Aplicação encontra-se o Front-end, onde o organizador

cria, monitora e finaliza as gincanas. O Trello é utilizando como sistema de Quadro Virtual

para que o público em geral possa acompanhar o andamento da gincana. O Ionic Platform é

utilizado para o envio de Push Notifications para os sistemas de notificações da Apple

(APNS) e da Google (GCM). O Back-end é responsável por gerenciar e integrar todas as

partes do Furb Mobile Gincanas, persistindo os dados em um Banco de Dados PostgreSQL.

Essas aplicações rodam no container de aplicação WildFly e estão hospedados na plataforma

Page 45: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

44

de serviço OpenShift. Para assimilação da comunicação entre os serviços utilizados, a Figura

22 demonstra o processo de autenticação do usuário no aplicativo.

Figura 22 - Processo de autenticação

Conforme descrito anteriormente, para iniciar o uso da aplicação é necessário que o

usuário realize a autenticação através de sua conta do Facebook. Assim como mostra o passo

(1), após a autenticação ser realizada o identificador e token são retornados ao aplicativo. No

passo (2), o aplicativo solicita o registro do usuário no serviço de push notification do Ionic

Plataform, que por sua vez encaminha para o serviço correspondente ao sistema operacional

do dispositivo do usuário. Um token será retornado e as informações de registro do usuário

são enviados ao Back-end durante o passo (3). No passo (4) o token é enviado ao Facebook

para ser transformado em um de longa duração. Após isso, o Back-end persiste as

informações do usuário e devolve o novo token para o dispositivo no passo (5).

3.3 IMPLEMENTAÇÃO

Nesta seção são apresentadas as técnicas e ferramentas utilizadas no trabalho e as

etapas seguintes para o desenvolvimento do aplicativo Furb Mobile Gincanas, do site front-

end e do servidor back-end. Para finalizar esta seção são apresentadas as telas e

funcionalidades do protótipo desenvolvido.

Page 46: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

45

3.3.1 Técnicas e ferramentas utilizadas

O desenvolvimento deste trabalho está dividido em quatro etapas. A primeira delas é a

criação do servidor back-end na plataforma de serviços OpenShift. O servidor foi construído

na linguagem de programação Java, no ambiente de desenvolvimento Eclipse e em conjunto

com a ferramenta para automação de compilação e gerenciamento de dependências Maven.

Para as operações com banco de dados foi utilizado o framework Hibernate, que permitiu

utilizar um mapeamento objeto-relacional para aumentar a abstração na manipulação das

tabelas e atributos. Para a camada de serviço, foi utilizado o framework RESTeasy,

permitindo através de anotações no código fonte, mapear as chamadas web services para os

métodos correspondentes. Para a integração com o Facebook, foi incluída a dependência da

biblioteca restfb para Java. No que diz respeito a integração com o Trello, foi utilizada a

biblioteca JTrello disponibilizada pelo usuário asommariva no serviço de hospedagem de

projetos Bitbucket. Quanto as notificações push, foi utilizada a classe Ionic disponibilizada

pelo usuário slarsen no serviço de hospedagem de projetos GitHub. E para hospedar o back-

end e o front-end, foi utilizado o container de aplicação WildFly.

A segunda etapa é o desenvolvimento do front-end, onde o organizador pode criar,

monitorar e finalizar gincanas. Para a construção do código fonte, utilizou-se as ferramentas

padrões de desenvolvimento web HTML, CSS e Javascript, com o auxílio do ambiente de

desenvolvimento Visual Studio Code. Foram utilizados os frameworks Bower e NPM para

gerenciamento de dependências. O NPM foi utilizado para gerenciamento de módulos node,

como o Grunt, já o Bower foi utilizado para gerenciar componentes que são utilizados no

código do front-end, como o AngularJS. O Grunt foi utilizado como automatizador de tarefas

para a realizar uma verificação de possíveis falhas no código Javascript antes de gerar uma

versão de distribuição. Ainda no Grunt, também foram utilizados os plugins grunt-contrib-

connect, para disponibilizar um servidor localhost com o código fonte do front-end, e o plugin

grunt-contrib-watch, para que o servidor localhost seja atualizado cada vez que um código

fonte sofra uma modificação. A biblioteca AngularJS foi utilizada para aumentar a abstração

da manipulação do HTML, utilizando diretivas que facilitaram a integração entre os dados de

domínio e a interface com o usuário. O AngularJS também foi utilizado para realizar as

chamadas web service do tipo RESTful, utilizando o padrão de notação de objetos JSON para

enviar e receber dados do servidor.

Foram adicionados alguns módulos que não vêm com a biblioteca padrão do

AngularJS. Foi adicionado o módulo ngRoute para gerenciar as rotas da aplicação, onde foi

Page 47: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

46

utilizado o conceito de Single Page Application, para que a percepção de mudança de páginas

seja menos impactante para o usuário. Foi adicionado também o módulo ui.bootstrap, que

fornece diretivas para facilitar a montagem das páginas de interface com o usuário. O mapa

foi renderizado com a ajuda do módulo ngMap, que forneceu diretivas para centralizar o mapa

na posição atual do usuário, além de uma diretiva para marcar a região objetivo das tarefas do

tipo geolocalização. O módulo ngSanitize foi utilizado para renderizar dinamicamente o

frame de vídeo do site YouTube, realizando um tratamento de segurança na URL do vídeo

renderizado. Para realizar a integração com o site Trello, é realizada a importação da

biblioteca client.js com o parâmetro da chave de API de desenvolvedor. A biblioteca

JQuery foi adicionada por ser um requisito da biblioteca cliente.js.

A terceira etapa é a criação do aplicativo para dispositivos móveis multiplataforma

Furb Mobile Gincanas, construído utilizando o framework Ionic na plataforma Phonegap.

Para a construção do código fonte, utilizaram-se as ferramentas padrões de desenvolvimento

web HTML, CSS e Javascript, com o auxílio do ambiente de desenvolvimento Visual Studio

Code. Assim como no front-end, foram utilizadas as bibliotecas AngularJS, NPM, Bower, e o

módulo ngMap. Para a integração com o Facebook, foi utilizada o módulo ngOpenFB, que foi

disponibilizado pelo usuário ccoenraets no serviço de hospedagem de projetos GitHub. O

tratamento das notificações push e integração com o Ionic Platform é realizado pelo módulo

ionic.service.push.

Complementando o desenvolvimento do aplicativo, foram utilizados os seguintes

plugins: um para leitura do GPS do dispositivo móvel (cordova-plugin-geolocation); um

para abrir os sites Facebook e Trello dentro do aplicativo (cordova-plugin-inappbrowser);

um para acessar a câmera do dispositivo móvel (cordova-plugin-camera); um para

apresentar uma tela durante a inicialização do aplicativo (cordova-plugin-splashscreen);

um para recebimento de notificações (phonegap-plugin-push); e o último para permitir a

navegação a domínios externos ao aplicativo (cordova-plugin-whitelist). Foi utilizado o

módulo ngCordova para acessar os plugins no formato de injeção de dependências utilizando

módulos do AngularJS.

3.3.2 Trechos de código

Nesta seção, encontram-se trechos de códigos desenvolvidos para realizar a integração

com os serviços de rede social, quadro virtual, câmera, mapas e notificações. Os principais

métodos do aplicativo são detalhados para o entendimento de comportamento de sua

execução.

Page 48: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

47

3.3.2.1 Mapas no front-end

O Quadro 2 demostra como foram utilizadas as diretivas do módulo ngMap para

renderizar um mapa no cadastro de uma tarefa de geolocalização. As diretivas indicam para

o AngularJS que a parte de código HTML marcado será substituído pelo resultado da

execução de uma função responsável por interpretar a diretiva em questão. Na linha 1 é

declarada a diretiva ng-map, onde posteriormente o módulo ngMap irá rederizar um mapa,

com o zoom no nível 18. A linha 2 indica, através do parâmetro center, em qual coordenada

a visão do mapa será centralizada. Caso seja uma nova tarefa, o parâmetro posicao estará

undefined, e, portanto, o mapa será centralizado na posição atual do usuário, através do valor

current-position, caso contrário, o mapa será centralizado na posição previamente

cadastrada na tarefa. Na linha 3 é utilizada a diretiva shape para renderizar um círculo no

mapa, posicionando na localização atual do usuário, ou na localização previamente

cadastrada, conforme a linha 5. A linha 6 contém o parâmetro radius para indicar o tamanho

do raio do círculo, e também o parâmetro editable com o valor true para indicar que é

possível alterar a localização e raio do círculo.

Quadro 2 - Diretiva ng-map do módulo ngMap 1

2

3

4

5

6

7

8

<ng-map zoom="18"

center="{{posicao === undefined? 'current-position': posicao }}">

<shape id="circle" name="circle" centered="true"

stroke-color='#00549A' stroke-opacity="0.8" stroke-weight="2"

center="{{posicao === undefined? 'current-position': posicao }}"

radius="{{raio === undefined? 50: raio}}" editable="true">

</shape>

</ng-map>

3.3.2.2 Integração com o quadro virtual Trello

Primeiramente deve-se importar a biblioteca client.js fornecendo a chave de API de

desenvolvedor associada a conta do Furb Mobile Gincanas no Trello. No Apêndice A é

demostrado como obter a chave de desenvolvedor e importar a biblioteca. Na ativação de uma

gincana o usuário deve autorizar o Furb Mobile Gincanas com sua conta pessoal do Trello. O

Quadro 3 apresenta como é feita essa integração. Na linha 19 é realizada a chamada ao

método authorize(opts) da classe Trello. As opções de integração utilizadas indicam para

apresentar uma janela de integração em forma de popup (linha 3), que o nome da aplicação é

Furb Mobile Gincanas (linha 4), as permissões requeridas são de leitura, escrita e acesso a

dados do perfil da conta (linha 5) e que o token de autorização não possui data de expiração.

Após o usuário autorizar a integração, a classe Trello grava o token no armazenamento local,

o qual é obtido na linha 8 e enviado ao servidor junto com o id da gincana na linha 9, para

Page 49: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

48

que se possa ativar a gincana através do id e que se possa utilizar o token para criar os

quadros e listas no Trello.

Quadro 3 - Código para integração com o Trello no Front-end 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

$scope.ativarGincana = function (gincana, indice) {

var opts = {

type: "popup",

name: "Furb Mobile Gincanas",

scope: {read: true, write: true, account: true},

expiration: "never",

success: function () {

var token = localStorage.getItem("trello_token");

gincanaAPI.ativar(gincana.id, token).then(

function onSuccess(params) {

$scope.gincanas[indice] = params.data;

});

},

error: function (params) {

alert("Não foi possível víncular com o Trelo: " +

params);

}

};

Trello.authorize(opts);

};

No Quadro 4 é demostrado como é feita a utilização da biblioteca JTrello para a

integração com o Trello no back-end. É possível verificar na linha 2 que na criação da classe

JTrelloClient são fornecidos a chave de API de desenvolvedor e o token obtido na ativação

da gincana no front-end. Nas linhas 4 e 5 são obtidos os serviços responsáveis por criar os

quadros e as listas. Nas linhas 7, 8 e 9, um quadro é criado e seu nome é definido com o título

da gincana, e sua descrição com a descrição da gincana. Na linha 11 é utilizado o serviço de

quadros para criar e obter o quadro no Trello. Nas linhas 12 e 13 a gincana recebe o id e url

correspondes ao quadro. Após isso, para cada grupo da gincana é criado uma lista no quadro

do Trello. Na linha 19 é definido o id ao qual a lista pertence, e na linha 20 é definido que o

nome da lista será o mesmo que o nome do grupo. Após criar a lista no Trello, o grupo recebe

o id correspondente a lista criada. Na linha 25 o objeto grupo é persistido no banco de dados.

A gincana é persistida no banco de dados posteriormente pela rotina que chamou o método

criarQuadroGincana.

Quadro 4 - Integração com o Trello na ativação da gincana 1

2

3

4

5

6

7

8

9

10

public Gincana criarQuadroGincana(Gincana gincana) throws Exception{

JTrelloClient client = new JTrelloClient(authKey,

gincana.getTrello_token());

BoardService boards = client.getBoards();

ListaService listas = client.getLists();

Board quadroGincana = new Board();

quadroGincana.setName(gincana.getTitulo());

quadroGincana.setDesc(gincana.getDescricao());

Page 50: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

49

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

Board quadroCriado = boards.create(quadroGincana);

gincana.setTrello_IdBoard(quadroCriado.getId());

gincana.setTrello_UrlBoard(quadroCriado.getUrl());

List<Grupo> listaGruposFromGincana =

grupoService.getListaGruposFromGincana(gincana.getId());

for (Grupo grupo : listaGruposFromGincana) {

Lista lista = new Lista();

lista.setIdBoard(quadroCriado.getId());

lista.setName(grupo.getNome());

Lista listaCriada = listas.create(lista);

grupo.setTrello_idLista(listaCriada.getId());

grupoDAO.create(grupo);

}

return gincana;

}

3.3.2.3 Integração com a rede social Facebook

Para utilizar o login pelo Facebook em um aplicativo, é necessário possuir uma conta

na plataforma Facebook Developers e configurar um projeto para o aplicativo que vai utilizar

a funcionalidade do login. No Apêndice B é apresentado como foi feita a configuração do

aplicativo Furb Mobile Gincanas e como o módulo ngOpenFb foi configurado. Na linha 1 do

Quadro 5 é feito a chamada ao método getLoginStatus da classe ngFB para verificar se o

aplicativo está autorizado, não está autorizado ou se o usuário não está conectado a sua conta

do Facebook. Nas linhas 3 e 4, caso o usuário esteja conectado e o aplicativo esteja

autorizado, a tela de gincanas é aberta. Caso o aplicativo não esteja autorizado, o usuário é

informado que apenas poderá utilizar a funcionalidade de gincanas caso entre com sua conta

do Facebook. Caso o usuário não esteja conectado na sua conta do Facebook, na linha 12 a

função login da classe ngFB é chamada, passando como parâmetro os tipos de dados que o

aplicativo deseja utilizar do perfil acessado, como por exemplo seu nome e foto de perfil.

Quadro 5 - Integração com a rede social Facebook 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

ngFB.getLoginStatus().then(

function(response) {

if (response.status === 'connected') {

$state.go('gincanas');

} else if (response.status === 'not_authorized') {

// está logado no Facebook,

// mas não autorizou o aplicativo

alert('Para utilizar Gincanas, você deve utilizar sua conta do

Facebook');

} else {

// não está logado no Facebook

ngFB.login({scope : 'public_profile'}).then(

function(response) {

if (response.status === 'connected') {

localStorage.setItem('tokenfacebook',

response.authResponse.accessToken);

Page 51: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

50

17

18

19

20

21

22

23

27

$state.go('gincanas');

} else {

alert('É necessário entrar com sua conta do Facebook');

}

});

}

});

3.3.2.4 Integração com o Ionic Platform

O código fonte apresentado no Quadro 6, realiza a integração com o Ionic Platform

para integrar as notificações push enviadas ao dispositivo. Para utilizar o Ionic Platform é

necessário fornecer a chave de API configurada para o aplicativo. A execução da rotina

demostrada no Quadro 6 acontece na inicialização do aplicativo, onde é possível verificar que

não há tratamento específico caso o aparelho possua o sistema operacional Android ou iOS.

Na linha 2 é definido que quando o aplicativo receber uma notificação, uma janela será aberta

informado o título e texto da mensagem. A função register na linha 9 executa o plugin

phonegap-plugin-push que obtém um token de acordo com o sistema operacional onde o

aplicativo está sendo executado. Na linha 11 o token é registrado no Ionic Platform para

identificar o aparelho integrado com o servidor de notificações.

Quadro 6 - Integração com o Ionic Platform 1

2

3

4

5

6

7

8

9

10

11

12

var push = new Ionic.Push({

"onNotification" : function(notification) {

$ionicPopup.alert({

title : notification.title,

template : notification.text

});

}

});

push.register(function(token) {

// persiste o token no Ionic Platform

push.saveToken(token);

});

O back-end envia as notificações para os usuários identificando-os através do token

enviado no registro do usuário. O Quadro 7 mostra o código que envia as informações do

usuário para o back-end. Na linha 2 é feita uma chamada a API do Facebook para obter o id

do usuário. Na linha 18 é realizada uma chamada post ao método

obtercadastrarporidfacebook do web sercice usuário, passando como parâmetro um

objeto usuario com idFacebook, o token de permissão de acesso do aplicativo a conta do

usuário no Facebook e o token registrado no Ionic Platform.

Quadro 7 - Enviando dados do usuário para o back-end 1

2

3

var _getUsuario = function() {

return ngFB.api({

path : '/me',

Page 52: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

51

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

params : {

fields : 'id'

}

}).then(

function(user) {

var fbAccessToken =

localStorage.getItem("fbAccessToken");

var ionicPushToken = JSON.parse(localStorage

.getItem("ionic_io_push_token")).token

var usuario = {

idFacebook : user.id,

facebookToken : fbAccessToken,

ionicPushToken : ionicPushToken

};

return $http.post(config.baseUrl

+ "usuario/obtercadastrarporidfacebook/",

usuario);

}, function(error) {

alert('Facebook error: ' + error.message);

});

};

O código e exemplo de uso de envio de notificações aos usuários é apresentado no

Quadro 8. Uma notificação válida do Ionic Platform exige que sejam informados os tokens de

identificação dos dispositivos móveis, o nome de um profile configurado para o aplicativo e o

título e descrição da notificação, além da chave de API do desenvolvedor fornecida na

instanciação da classe Ionic na linha 18. Na linha 1, é apresentada a função que notifica o

líder do grupo e o membro que resolveu a tarefa, informando que a tarefa foi avaliada e qual a

nota recebida. Na linha 6 é realizada a chamada à função privada Notificar, passando como

parâmetro os tokens dos usuários e o título e descrição da notificação.

Quadro 8 - Enviando notificações no back-end 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public void Notificar_Avaliar(String tokenLider, String tokenUsuario,

String tituloTarefa, int notaTarefa) {

ArrayList<String> tokens = new ArrayList<>();

tokens.add(tokenLider);

tokens.add(tokenUsuario);

Notificar(tokens, "Tarefa Avaliada", tituloTarefa + " foi

avaliada e recebeu a nota " + notaTarefa);

}

private void Notificar(ArrayList<String> tokens, String titulo, String

descricao) {

Notificacao notificacao = new Notificacao();

notificacao.getTokens().addAll(tokens);

notificacao.setProfile(IONIC_API_PROFILE);

notificacao.getNotification().put("title", titulo);

notificacao.getNotification().put("message", descricao);

Ionic ionic = new Ionic(IONIC_API_TOKEN);

ionic.push(new Gson().toJson(notificacao));

}

Page 53: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

52

3.3.2.5 Integração com o site de compartilhamento de vídeos YouTube

O YouTube é utilizado nas tarefas do tipo vídeo, onde o usuário realiza uma pesquisa

utilizando palavras chave para selecionar um vídeo que será utilizado como resposta para a

tarefa. No Quadro 9 é apresentado o código fonte que realiza uma pesquisa de vídeos

utilizando um termo de pesquisa informado pelo usuário. Para utilizar a API de pesquisa do

YouTube, é necessário configurar o serviço YouTube Data API para o aplicativo, obtendo

uma chave de API utilizada como parâmetro no código da integração. Na linha 1 do Quadro

9, é definido o objeto de parâmetros para integração, onde são definidos a chave de API, o

parâmetro type indicando que a pesquisa retornará apenas vídeos, excluindo canais e listas de

reprodução, o número máximo de resultados, quais informações dos vídeos serão retornadas e

a ordem em que os vídeos serão retornados, onde foi utilizado o critério de relevância

(relevance). Na linha 16 é feita a associação do termo pesquisado pelo usuário ao parâmetro

q. Na linha 18 é realizada uma chamada HTTP através do método GET a API do YouTube,

passando como parâmetro a variável youtubeParams. Nas linhas 20 e 21 são armazenados os

tokens correspondentes a próxima página e página anterior da pesquisa. Quando o usuário

clica no botão Próxima Página ou Página Anterior da Figura 32, estes tokens são

utilizados para retornar a página específica do conjunto de resultados. Na linha 22 do Quadro

9, é indicado que para cada vídeo na lista de vídeos obtida (response.items), será executada

de forma assíncrona a função implementada na linha 23, que implementa o código onde

adiciona o vídeo na lista de vídeos renderizados na tela. Na linha 24 é utilizada a função all

do serviço $q do AngularJS, para fazer com que a janela de espera de carregamento dos

vídeos seja escondida apenas depois que todos os vídeos sejam renderizados.

Quadro 9 - Realizando uma busca de vídeos no YouTube 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

$scope.youtubeParams = {

key: 'AIzaSyAueU10e1r89L0AVh8dhVfXXXXXXXXXXXX',

type: 'video',

maxResults: '5',

part: 'id,snippet',

q: '',

order: 'relevance'

}

$scope.getVideos = function (query) {

$ionicLoading.show({

template: '<p>Carregando ' + query + '...</p><ion-

spinner></ion-spinner>'

});

$scope.youtubeParams.q = query;

$scope.videos = [];

$http.get('https://www.googleapis.com/youtube/v3/search', { params:

$scope.youtubeParams }).success(function (response) {

Page 54: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

53

20

21

22

23

24

25

26

27

28

29

$scope.nextPageToken = response.nextPageToken;

$scope.prevPageToken = response.prevPageToken;

angular.forEach(response.items, function (child) {

$scope.videos.push(child);

});

$q.all($scope.videos).then(function () {

$ionicLoading.hide();

});

});

};

3.3.2.6 Acessando a câmera do dispositivo móvel

Nas tarefas do tipo imagem, o usuário deve utilizar como resposta uma foto tirada com

a câmera do seu dispositivo móvel. Foi utilizado o plugin cordova-plugin-camera com a

extensão ngCordova para acessar o recurso da câmera do dispositivo. O Quadro 10 apresenta

o código fonte utilizado, onde na linha 2 é definido o objeto options com as opções

disponíveis no plugin. A qualidade da imagem foi definida com o valor 30, em uma escala de

0 a 100, para que a imagem ocupe uma quantidade de dados menor, visando agilizar a

transferência da imagem para o servidor back-end, principalmente quando o usuário estiver

utilizando uma conexão de dados lenta. Na linha 9, o método getPicture da classe

$cordovaCamera, abre o aplicativo de câmera nativo do sistema operacional do dispositivo

móvel. Após o usuário tirar a foto, a imagem é passada como parâmetro para o método na

linha 10 no formato base64, onde posteriormente será enviada ao servidor back-end.

Quadro 10- Utilizando a câmera do dispositivo móvel 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$scope.tirarFoto = function () {

var options = {

quality: 30,

destinationType: Camera.DestinationType.DATA_URL,

sourceType: Camera.PictureSourceType.CAMERA,

encodingType: Camera.EncodingType.JPEG

}

$cordovaCamera.getPicture(options).then(

function (imageData) {

$scope.imageData = imageData;

$scope.srcImagem = "data:image/jpeg;base64," + imageData;

}

);

}

3.3.2.7 Integração com os mapas do Google Maps no aplicativo

A integração do aplicativo com o Google Maps foi realiza com auxílio do plugin

cordova-plugin-geolocation e, assim como no front-ent, foi utilizado o módulo ngMap. O

código apresentado no Quadro 11, é utilizado na tela de resolução de tarefas de

geolocalização para adicionar um marcador representando a posição atual do usuário, além

Page 55: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

54

de centralizar o mapa no marcador e adicionar um círculo representando as coordenadas do

objetivo da tarefa. Para utilizar a API de mapas do Google no aplicativo, é necessário

configurar o serviço Google Maps Javascript API, obtendo uma chave de API utilizada para

importar a biblioteca de integração. Quando o usuário aciona o botão para mostrar o mapa, o

método mostrarMapa é acionado, dando início a execução da função representada pela linha

1. Primeiramente é executada na linha 2 a função do ngMap para buscar a referência do objeto

mapa declarado no elemento HTML da página. Na linha 4 o plugin de geolocalização é

acionado para obter a posição atual do usuário.

Na linha 4 do Quadro 11, a função do plugin para recuperar a localização é acionada,

com a função onMapErrorFirstTime como parâmetro caso o plugin falhe na tentativa de

obter a localização. Dentro da função onMapErrorFirstTime na linha 29, o código para obter

a localização é executado novamente, mas passando a função de tratamento de erros geral

onMapError como parâmetro caso o plugin falhe na tentativa de obter a localização. Essa

estratégia foi implementada pois o comportamento do plugin foi impactando em dispositivos

Android, devido a uma atualização nas políticas de segurança da API de geolocalização do

Google, onde não é mais possível obter dados de localização do dispositivo do usuário, sob

domínios inseguros, exigindo que a aplicação esteja em um contexto seguro como o HTTPS

(HyperText Transfer Protocol Secure) (KINLAN, 2016). Como o plugin prioriza a utilização

do componente de localização utilizado no browser nativo para acesso ao GPS, a função

retorna com erro, informando que não conseguiu obter a posição do usuário. Isto acontece,

pois, o aplicativo está sendo executado em um Hybrid Web Container, que não utiliza o

protocolo HTTPS. Nas próximas tentativas o plugin dá prioridade para a utilização do GPS de

forma nativa integrado com o sistema operacional do aparelho, retornando corretamente a

posição do usuário.

Ainda no Quadro 11, na linha 12 a função onMostrarMapaSuccess implementa o

tratamento para centralizar o mapa na posição atual do usuário, desenhando um marcador na

linha 18 indicando visualmente sua posição. Na linha 22, a função watchPosition é

chamada, indicando que quando o usuário se movimentar, a função onMapWatchSuccess será

executada. Esta função, por sua vez, atualiza o marcador com a nova posição do usuário.

Quadro 11 - Integração com o Google Maps no aplicativo 1

2

3

4

5

6

7

$scope.mostrarMapa = function() {

NgMap.getMap("mapa").then(function(map) {

$scope.mapa = map;

navigator.geolocation.getCurrentPosition(onMostrarMapaSuccess,

onMapErrorFirstTime, {

maximumAge: 3000,

timeout: 5000,

Page 56: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

55

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

enableHighAccuracy: true

});

});

};

var onMostrarMapaSuccess = function(position) {

$scope.posicaoAtual.latitude = position.coords.latitude;

$scope.posicaoAtual.longitude = position.coords.longitude;

$scope.mapa.setCenter(new

google.maps.LatLngposition.coords.latitude,

position.coords.longitude));

$scope.mapa.markers[0].setPosition(new

google.maps.LatLng(position.coords.latitude,

position.coords.longitude));

$scope.mapa.setZoom(13);

navigator.geolocation.watchPosition(onMapWatchSuccess, onMapError,

{

enableHighAccuracy: true

});

};

function onMapErrorFirstTime(error) {

navigator.geolocation.getCurrentPosition(onMostrarMapaSuccess,

onMapError, {

maximumAge: 3000,

timeout: 20000,

enableHighAccuracy: true

});

}

3.3.3 Operacionalidade da implementação

Nesta seção é apresentada a operacionalidade da aplicação desenvolvida, através da

interface gráfica disponível para o usuário. As imagens abaixo foram obtidas utilizando o

navegador Google Chrome na versão 53.0.2774.2 canary (64-bit), um dispositivo mobile Sony

XPERIA modelo C2104 com Android 5.1.1, um dispositivo mobile Samsung S4 modelo

i9505 com Android 6.0 e um iPad Mini com iOS 9.3.2.

3.3.3.1 Cadastro de gincanas

Primeiramente o organizador deve criar uma gincana acessando o site do Furb Mobile

Gincanas. A Figura 23 apresenta a tela para cadastrar a gincana, onde deve ser informado um

título e uma descrição.

Page 57: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

56

Figura 23 - Tela de cadastro de gincana

Após o cadastro da gincana, deve ser feito o cadastro das tarefas. A Figura 24 exibe a

tela de cadastro de tarefa, onde deve ser informado o título, descrição e tipo da tarefa. Para as

tarefas de geolocalização, deve-se configurar a área de objetivo da tarefa, mudando a

posição do círculo e aumentado ou diminuindo seu raio.

Page 58: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

57

Figura 24 – Tela de cadastro de tarefa

É possível definir dependências para as tarefas, onde uma tarefa só estará disponível

quando as tarefas requisitos forem resolvidas. Na Figura 25 é mostrado a tela para realizar

essa operação, onde o usuário seleciona quais tarefas da lista de tarefas serão utilizadas como

dependências.

Page 59: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

58

Figura 25 - Tela para vincular tarefas requisitos

Os grupos são cadastrados pelo organizador da gincana. Na Figura 26 é apresentado a

tela de cadastro de grupos, onde deve ser informado o nome do grupo.

Figura 26 - Tela de cadastro de grupo

Para ativar a gincana, o usuário deve autorizar o Furb Mobile Gincanas acessar a sua

conta do Trello. Na Figura 27, ao clicar no botão Ativar na gincana, é solicitado ao usuário

que autorize o Furb Mobile Gincanas, informado quais permissões estão sendo solicitadas.

Page 60: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

59

Figura 27 - Autorizar Trello

Após a autorização, um quadro público da gincana é criado no Trello, onde é criada

uma lista para cada grupo. A Figura 28 mostra o quadro criado, onde constam as informações

da gincana e seus grupos. O site está sendo acessado sem estar conectado a uma conta do

Trello, assim, como o quadro está público, qualquer pessoa pode acompanhar o andamento da

gincana.

Page 61: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

60

Figura 28 - Quadro criado no Trello

A Figura 29 mostra a tela inicial do aplicativo. Após o usuário acessar o menu

Gincanas, ele deve se autentificar através da rede social Facebook. Após realizar a

autenticação, é apresentada a tela com a lista de gincanas ativas disponíveis.

Figura 29 - Tela inicial do aplicativo

Ao clicar na gincana, o usuário deve, como ilustrado na Figura 30, selecionar um

grupo para participar. Após selecionar um grupo, caso o usuário seja o primeiro integrante do

grupo, ele assume o papel de líder e uma lista de tarefas é apresentada a ele. É possível

Page 62: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

61

verificar qual o placar atual da gincana através do botão Placar, onde o quadro da gincana no

Trello é aberto dentro do aplicativo.

Figura 30 - Entrando em um grupo e lista de tarefas

A Figura 31 apresenta a situação onde um novo usuário se junta ao grupo. O líder

recebe uma notificação push informando sobre o novo membro e, portanto, pode delegar uma

tarefa para o novo membro. Após a tarefa ser associada com o membro, este é notificado

através de uma notificação push.

Figura 31 - Novo membro e delegação de tarefas

A Figura 32 apresenta a tela de resolução de tarefas de vídeo, onde o membro deve

utilizar termos de pesquisa para procurar um vídeo no YouTube. Os botões Página Anterior

e Próxima Página mudam a página dos resultados de acordo com a opção selecionada.

Page 63: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

62

Figura 32 - Resolvendo tarefa de vídeo

Na tela de resolução de tarefa de geolocalização, apresentada na Figura 33, o

usuário deve permitir o aplicativo acessar sua localização. Existem os botões Posição,

Objetivo e Confirmar. O botão Posição centraliza o mapa na localização atual do usuário,

enquanto que o botão Objetivo centraliza o mapa no centro do objetivo da tarefa. O botão

Confirmar serve para o usuário confirmar sua resposta. É feita uma validação para verificar

se o usuário realmente está dentro dos limites da localização da tarefa. Como ilustrado na

Figura 33, caso o usuário esteja fora da cerca virtual, é apresentada uma mensagem na tela.

Figura 33 - Resolvendo tarefa de geolocalização

Na tela de resolução de tarefa de imagem, apresentada na Figura 34, o usuário deve

permitir o aplicativo acessar sua câmera. Após isso, o usuário deve tirar a foto que será

Page 64: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

63

utilizada como resposta. A tela apresenta a foto tirada antes de enviá-la ao servidor back-end,

permitindo o usuário tirar uma outra foto caso não tenha gostado da atual.

Figura 34 - Resolvendo tarefa de imagem

O organizador da gincana dispõe da tela apresentada na Figura 35 para monitorar o

andamento da gincana. Também nesta tela é possível finalizar a gincana através do botão

Finalizar Gincana, onde o cálculo da pontuação será executado e o resultado será

publicado no Trello, além de avisar por notificação push todos os usuários participantes da

gincana sobre o resultado da mesma.

Page 65: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

64

Figura 35 - Monitoramento da gincana

Na Figura 36 é apresentada a tela de avaliação de tarefas do tipo imagem. O

organizador deve avaliar a tarefa dando uma nota de 0 a 10 estrelas. Após a avaliação, um

cartão com a nota da tarefa é adicionado na lista no Trello correspondente ao grupo.

Figura 36 - Avaliação das tarefas de imagem

Page 66: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

65

A Figura 37 apresenta a tela para avaliação das tarefas do tipo vídeo. O vídeo enviado

pelo usuário é apresentado na tela para que o organizador possa realizar a sua avaliação.

Figura 37 - Avaliação das tarefas de vídeo

A Figura 38 apresenta a tela para avaliação das tarefas do tipo geolocalização. As

coordenadas do objetivo da tarefa e a posição do usuário são renderizados na tela.

Figura 38 - Avaliação das tarefas de geolocalização

Page 67: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

66

A Figura 39 apresenta o resultado final da gincana no Trello, onde é criada uma lista,

com o título RESULTADO, contendo os cartões equivalentes aos grupos que participaram da

gincana. Cada cartão informa a posição do grupo, o total de pontos e a quantidade de

integrantes.

Figura 39 - Resultado final da gincana

3.4 RESULTADOS E DISCUSSÕES

O principal objetivo deste trabalho era disponibilizar um protótipo de um sistema de

gincanas voltado para o evento Interação FURB utilizando o framework multiplataforma

Phonegap. Assim, criou-se uma ferramenta integrada a redes sociais e voltada para

dispositivos móveis, buscando aprimorar as experiências dos visitantes do evento Interação

FURB, auxiliando-os a explorar e interagir com as oficinas, e atividades realizadas através de

gincanas virtuais. Este aplicativo também está integrado com o site de compartilhamento de

vídeos YouTube, aos mapas do Google Maps e suporta o recebimento de notificações

enviadas pelo serviço de notificações correspondente ao sistema operacional do dispositivo do

usuário (APNS e GCM). Além disso, disponibiliza no Trello um quadro público onde

qualquer pessoa possa acompanhar o andamento da gincana.

A proposta de utilizar essas tecnologias em uma gincana se mostrou possível, pois os

participantes já estão acostumados a várias das tecnologias utilizadas. Na cidade de Blumenau

ocorre desde o ano de 1993 a Gincana Cidade de Blumenau, onde existem várias tarefas

envolvendo charadas, localização de pessoas e objetos, entre outros (DAY, 2011). A proposta

desse trabalho foi validada com a participante da Gincana Cidade de Blumenau Paola

Adriano, que participa a um ano da mesma. Segundo Adriano (2016), sobre a ideia de usar

essas tecnologias na gincana, “acredito que essa seja a ideia mesmo, claro que não utilizamos

tanta tecnologia como login por Facebook e o Trello, mas são tecnologias super acessíveis

que seriam ótimas serem implantadas”.

Page 68: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

67

No início do desenvolvimento deste trabalho tentou-se estender o trabalho de Campos

(2015), adicionando as regras de negócio para as gincanas. Não foi possível realizar essa

tarefa pois o protótipo desenvolvido no trabalho de Campos (2015) não estava funcionando

para a plataforma Android. Em sua monografia, ele comenta que os testes para a plataforma

iOS ocorreram com sucesso, porém, o mesmo não ocorreu para a plataforma Android. Em sua

conclusão, ele descreve:

Na tentativa de gerar o arquivo APK (extensão dos aplicativos Android), ocorreu um

erro ocasionado pelo conflito entre as dependências utilizadas pelos plug-ins do

PhoneGap, desta forma, impossibilitando a instalação do aplicativo nos dispositivos

com o sistema Android e sendo necessário testar outras alternativas de plug-ins

(CAMPOS, 2015, p. 47).

Tentou-se corrigir o erro comentado por Campos (2015), porém, não foi possível

corrigir o erro. Além disso, foi verificado em fóruns que esse conflito de dependências está

sem solução desde 2014, indicando que a própria comunidade de desenvolvedores prioriza a

utilização de outros plugins para trabalhar com o Phonegap. Devido a esta situação, optou-se

por iniciar o desenvolvimento de outro aplicativo, utilizando o framework Ionic, e com foco

em ser uma plataforma onde várias outras funcionalidades além de gincanas possam ser

implementadas.

A utilização do framework Ionic para a criação da interface gráfica aprimorou a

experiência do usuário ao proporcionar o visual de um aplicativo nativo, diminuindo a

sensação de estar navegando em uma página web. Os componentes de interface do Ionic são

diretivas do AngularJS, facilitando a integração entre os dados de domínio e a interface com o

usuário. Durante o desenvolvimento, foi possível realizar os testes do aplicativo diretamente

no browser do computador, agilizando o processo de testes, pois o processo de deploy do

aplicativo para um dispositivo móvel é demorado. Não foram utilizados emuladores para os

testes do aplicativo. A plataforma Ionic Platform se mostrou bastante estável para envio de

notificações através dos serviços APNS e GCM. Durante o desenvolvimento deste trabalho a

plataforma passou da versão Alfa para a versão Beta, obrigando que alguns métodos

utilizados para a integração fossem ajustados.

Um dos objetivos específicos deste trabalho era integrar os grupos do Facebook para

estender a comunicação entre os membros dos grupos da gincana. Porém, na atualização para

a versão 2.6 da API do Facebook ocorrida na metade de abril de 2016, a API de grupos foi

descontinuada e passaria a não aceitar mais novas requisições de integração a partir de maio

de 2016 (FACEBOOK FOR DEVELOPERS, 2016). Para continuar dando suporte a grupos

na gincana, a integração com os grupos do Facebook no trabalho foi reformulada, fazendo

Page 69: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

68

com que o controle de grupos e relacionamento entre os membros ficasse no domínio do

protótipo desenvolvido.

Um outro objetivo também foi impactado devido a uma atualização na API de

terceiros. A integração com o Google Maps para dispositivos Android foi impactada devido a

uma atualização, na metade de abril de 2016, nas políticas de segurança da API de

geolocalização do Google, onde não é mais possível obter dados de localização do dispositivo

do usuário, sob domínios inseguros, exigindo que a aplicação esteja em um contexto seguro

como o HTTPS (KINLAN, 2016). Como o plugin oficial do Cordova para geolocalização

prioriza a utilização do componente de localização utilizado no browser nativo para acesso ao

GPS, a rotina que retorna à posição do usuário retorna com erro, informando que não

consegue obter a posição do usuário devido a questões de segurança. Isto acontece, pois, o

aplicativo está sendo executado em um Hybrid Web Container, que não utiliza o protocolo

HTTPS. A solução foi implementar uma estratégia onde o plugin, após não conseguir obter a

localização do usuário, acessa diretamente o recurso GPS do dispositivo móvel, obtendo

assim sua localização mediante aprovação do usuário. Até o final da implementação deste

trabalho, não foi lançanda uma atualização para o plugin utilizado.

Um outro problema encontrado foi a renderização dos mapas nas páginas HTML, onde

o mesmo não era renderizado em páginas que possuem o comportamento modal. As páginas

modais são aquelas páginas que são abertas normalmente no meio da tela, escurecendo o resto

do site, que quando se clica fora da janela, ela desaparece. Para isso foi implementado para

que ao abrir essas janelas, os mapas não fossem renderizados, e foi colocado um botão

Mostrar Mapa adicionando o mapa no HTML após a janela já estar renderizada na tela.

Uma outra premissa era que os serviços construídos para o organizador criar as

gincanas estivessem disponíveis online. Para isso, optou-se por criar uma instância de

aplicação na plataforma OpenShift, utilizando o WildFly como container da aplicação. Uma

vantagem dessa plataforma é que ela permite hospedar até três instâncias gratuitas de

aplicações de pequeno porte, além de uma documentação bem abrangente dos serviços

oferecidos. Durante os testes do aplicativo, verificou-se que o OpenShift parava o serviço

várias vezes ao dia, principalmente quando ficava um período grande ocioso. Isso atrapalhou

um pouco o desenvolvimento, pois muitas vezes era necessário esperar alguns minutos até

que o serviço ficasse online novamente.

Page 70: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

69

3.4.1 Quadro de comparação entre os trabalhos

No Quadro 12, estão sendo comparados os trabalhos correlatos apresentados na seção

2.4, ao trabalho desenvolvido. Os trabalhos que possuírem as características descritas na

primeira coluna, estão marcados com “X”.

Quadro 12 - Quadro comparativo entre os trabalhos correlatos

Kestring

(2014)

Rocha (2015) Niantic Labs

(2012)

Furb Mobile Gincanas

geolocalização de usuários X X X X

interface gráfica com mapa X X X X

mundo virtual X X

compartilhamento de localização X

envio de notificações X X X X

integração com FURB X X X

login com Facebook X

quadro virtual com Trello X

uso de Beacons X

grupos X X

integração com YouTube X

plataforma suportada Android Híbrido Híbrido Híbrido

framework mobile Nativo Phonegap LibGDX Phonegap

Através das informações demonstradas no Quadro 12, percebe-se todos trabalham

com geolocalização, apresentando em um mapa a localização do usuário. Também se percebe

que todos utilizam as notificações push de forma a aumentar o engajamento dos usuários na

utilização do aplicativo. O jogo de Niantic Labs (2012) e o Furb Mobile Gincanas trabalham

com o conceito de mundo virtual, onde o usuário interage com elementos do mundo real

influenciando acontecimentos no mundo virtual, além de permitirem a participação de grupos

para aumentar a integração entre os usuários. Percebe-se que trabalho de Kestring (2014),

Rocha (2015) e o Furb Mobile Gincanas estão integrados com a FURB, e que o trabalho de

Kestring (2014) permite o compartilhamento de localização entre os usuários. O trabalho de

Rocha (2015) faz o uso de Beacons para otimizar a localização do usuário, permitindo que,

por exemplo, sejam mapeados os andares e salas de um prédio, permitindo oferecer mais

informações sobre a localização do usuário. Verifica-se que o aplicativo Furb Mobile

Gincanas utiliza o quadro virtual do Trello para disponibilizar um meio público de acesso aos

acontecimentos da Gincana, além de integrar com o YouTube e o Facebook, buscando utilizar

tecnologias muito comuns hoje na geração Z. Apenas trabalho de Kestring (2014) foi

Page 71: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

70

desenvolvido está disponível exclusivamente para a plataforma Android, já que foi utilizado o

Android nativo como framework de desenvolvimento. Já o jogo de Niantic Labs (2012), o

trabalho de Rocha (2015) e o Furb Mobile Gincanas estão disponíveis para as plataformas

Android e iOS. O trabalho de Rocha (2015) e o Furb Mobile Gincanas foram desenvolvidos

utilizando o framework Phonegap, que trabalha com tecnologias web, já o jogo de Niantic

Labs (2012) utiliza o framework libGDX, que trabalha com a linguagem de programação

Java. O libGDX utiliza o framework RoboVM para portar o código Java entre as diversas

plataformas, mas, segundo Müller (2016), a plataforma está sendo descontinuada e não vai

mais receber atualizações.

Page 72: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

71

4 CONCLUSÕES

Este trabalho apresentou o desenvolvimento de um aplicativo voltado para a aplicação

de gincanas em eventos, como o Interação FURB, utilizando o framework Phonegap para

disponibilizar o aplicativo em múltiplas plataformas. É possível aplicar tarefas do tipo

pergunta, imagem, vídeo e geolocalização, além de definir dependências entre as tarefas,

permitindo que as mesmas sejam encadeadas no estilo caça ao tesouro. Os participantes da

gincana devem se organizar em grupos pré-definidos pelo organizador da gincana. Os líderes

dos grupos devem distribuir as tarefas para seus colegas de grupo, avaliando qual tarefa se

encaixa com o perfil de cada usuário. O aplicativo permite que o participante da gincana se

autentique utilizando sua conta da rede social Facebook. Os usuários podem utilizar os

recursos de câmera e GPS para responder as tarefas, respectivamente, de imagem e

geolocalização. O aplicativo permite a pesquisa de vídeos do site de compartilhamento de

vídeos YouTube para responder as tarefas do tipo vídeo. Os usuários são notificados sobre

acontecimentos na gincana, através de notificações push. A gincana pode ser acompanhada

em um placar público, através do site de quadro virtual e organizador de tarefas Trello.

Inicialmente tentou-se estender o trabalho de Campos (2015), porém o mesmo se

encontra com erro na hora de gerar a APK para dispositivos Android, por motivo de conflito

entre dependências dos plugins utilizados. Tentou-se ajustar esse erro, porém não foi obtido

sucesso na sua correção. Ainda foi verificado que esse problema acontece desde 2014, sendo

que os plugins em conflito não receberam atualizações para correção do erro. Assim, foi

optado pela criação de um novo protótipo, voltado para a aplicação de gincanas, integrado

com várias plataformas de terceiros.

O objetivo de criar uma aplicação voltada a gincanas, utilizando diversas integrações

com serviços terceiros foi cumprido. Também foi cumprido o objeto de desenvolver o

aplicativo utilizando um framework multiplataforma. Os plugins do Phonegap utilizados no

aplicativo foram compatíveis e possibilitaram a distribuição para as plataformas Android e

iOS.

Ocorreram atualizações nas APIs de integração com o Ionic Platform, Facebook e

Google Maps, sendo que os maiores impactos foram a descontinuação da API de grupos do

Facebook, impossibilitando a utilização dos grupos do Facebook no aplicativo, e a atualização

nas políticas de segurança do Google Maps API, fazendo com que o comportamento do

plugin oficial de geolocalização do Phonegap falhe mais vezes em dispositivos Android para

obter a localização do usuário. Foi verificado que a comunidade de desenvolvedores está

Page 73: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

72

utilizando uma customização da versão antiga do plugin, onde o erro não ocorre, enquanto

não é lançado uma atualização oficial para correção deste erro.

A utilização da plataforma OpenShift para a hospedagem do site e do servidor de

gincanas se mostrou positiva, pois fornece um plano grátis para hospedagem de aplicações de

pequeno porte. Um ponto negativo foi que a plataforma se mostrou um pouco instável durante

o desenvolvimento deste trabalho, ficando off-line várias vezes, mesmo quando a aplicação

não estava ociosa.

Por fim, a utilização do Ionic Platform para o envio de notificações push se mostrou

produtiva, onde não existe nenhum tratamento específico para a plataforma onde o aplicativo

está sendo executado para o recebimento das notificações. Durante o desenvolvimento da

aplicação, foi percebido que algumas notificações não eram enviadas aos dispositivos, isso

pode acontecer pois a ferramenta se encontra na fase Beta de lançamento no presente atual.

4.1 EXTENSÕES

Sugerem-se as seguintes extensões para trabalhos futuros:

a) realizar a integração dos equipamentos Beacons para aprimorar a geolocalização

em espaços interno;

b) criar uma forma de diferenciar usuários que estão logados e deslogados, para que o

líder consiga distinguir se o um membro está logado na aplicação;

c) utilizar o framework Auth0 para unificar a implementação de autenticação de

usuário no site e no aplicativo;

d) implementar o compartilhamento de localizações proposto por Campos (2015)

entre os membros do grupo;

e) melhorar a integração com o Trello, procurando disponibilizar mais informações

sobre o andamento da gincana;

f) permitir a busca de gincanas disponíveis por proximidade;

g) implementar a integração com a API do Telegram para disponibilizar um chat

entre os integrantes dos grupos, proporcionando uma maior integração entre os

membros;

h) implementar aspectos de Gamificação para aumentar a motivação e o

engajamento dos usuários;

i) aumentar a integação com as redes social, possibilitando o usuário compartilhar as

fotos, vídeos e check-ins em seus perfis do Facebook, Twitter, Instagram, entre

outros.

Page 74: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

73

REFERÊNCIAS

ADRIANO, Paola Avaliação Gincana. [mensagem pessoal]. Mensagem recebida por

<[email protected]> em 22 jun. 2016.

ANDROID DEVELOPERS. Google. Integrate Google Cloud Messaging. [S. I.], 2016.

Disponível em: <https://developer.android.com/distribute/engage/gcm.html>. Acesso em: 22

jun. 2016.

APACHE CORDOVA. Cordova Plugins. [S.I.], 2013. Disponível em:

<http://cordova.apache.org/plugins/>. Acesso em: 25 out. 2015.

CAMPOS, Gabriel F. B. Aplicação ios para visualização de pontos de interesse e rotas em

espaços internos. 2015. 26f. Proposta do Trabalho de Conclusão de Curso (Bacharelado em

Ciências da Computação – Centro de Ciências Exatas e Naturais, Universidade Regional de

Blumenau, Blumenau.

CERETTA, S. B.; FROEMMING, L. M. Geração Z: Compreendendo os hábitos de consumo

da geração emergente. Raunp, Natal, Ano 3, n. 2, p 15-24, abr./set. 2011. Disponível em:

<http://portal.unp.br/arquivos/pdf/institucional/edunp/raunp_a3n2.pdf>. Acesso em 20 set.

2015.

DAY, Adalberto Histórico Gincana Cidade de Blumenau. Blumenau, 2011. Disponível em:

< http://adalbertoday.blogspot.com.br/2011/08/historico-gincana-cidade-de-blumenau.html>.

Acesso em: 22 jun. 2016.

DESAFIOS DA EDUCAÇÃO. Como as universidades vão se adaptar à Geração Z e

garantir seu próprio futuro. [S.I], 2014. Disponível em:

<http://www.desafiosdaeducacao.com.br/como-universidades-vao-se-adaptar-a-geracao-

garantir-seu-proprio-futuro/>. Acesso em: 15 nov. 2015.

ERICSSON. Ericsson analisa a geração conectada no Brasil. [S.I.], 2013. Disponível em: <

http://www.ericsson.com/br/news/2013-02-19-connected-po_254740124_c>. Acesso em: 01

nov. 2015.

FACEBOOK FOR DEVELOPERS. Facebook. Log de alterações da Plataforma do

Facebook: 12 de abril de 2016 - API versão 2.6. [S. I.], 2016. Disponível em: <

https://developers.facebook.com/docs/apps/changelog>. Acesso em: 22 jun. 2016.

FACEBOOK PARA EMPRESAS. Facebook. O futuro centrado em tecnologias móveis. [S.

I.], 2013. Disponível em: <https://www.facebook.com/business/news/BR-O-futuro-centrado-

em-tecnologias-moveis>. Acesso em: 20 set. 2015.

FURBTV. 23/09/2015 - Interação FURB 2015. Blumenau, 2015. Disponível em: <

https://www.youtube.com/watch?t=17&v=Vgl6wl04vzI>. Acesso em: 12 nov. 2015.

GOSSENHEIMER, A. N.; CARNEIRO, M. L. F.; CASTRO, M. S. Estudo comparativo da

metodologia ativa “gincana” nas modalidades presencial e à distância em curso de graduação

de Farmácia. Abcs Health Sciences, [S.I.], v. 40, n. 3, p.234-240, 21 dez. 2015. Disponível

em: <http://dx.doi.org/10.7322/abcshs.v40i3.801>. Acesso em 12 jul. 2016.

IONIC PLATFORM. Ionic. The Ionic Platform. [S. I.], 2016a. Disponível em: <

https://ionic.io/platform>. Acesso em: 22 jun. 2016.

______. Information about the Ionic Push service. [S. I.], 2016b. Disponível em: <

http://docs.ionic.io/docs/push-overview>. Acesso em: 22 jun. 2016.

IONICFRAMEWORK. Ionic. Ionic Documentation Overview. [S. I.], 2016. Disponível em:

< http://ionicframework.com/docs/overview/ >. Acesso em: 22 jun. 2016.

Page 75: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

74

KARASINSKI, Lucas Ingress: jogo de realidade virtual da Google chega ao iOS. [S. I.],

2012. Disponível em <http://www.tecmundo.com.br/android/32778-conheca-ingress-o-jogo-

de-realidade-alternativa-criado-pela-google-para-o-android.htm>. Acesso em: 07 set. 2015.

KESTRING, Bruno André Sistema Móvel na plataforma Android para compartilhamento

de geolocalização usando mapas e notificações da Google. 2014. 72 f. TCC (Graduação) –

Curso de Ciência da Computação, Centro de Ciências Exatas e Naturais, Universidade

Regional de Blumenau, Blumenau, 2014.

KINLAN, Paul. Geolocation API removed from unsecured origins in Chrome 50. [S.I.],

2016. Disponível em <https://developers.google.com/web/updates/2016/04/geolocation-on-

secure-contexts-only>. Acesso em: 18 jun. 2016.

KIRNER, Claudio; TORI, Romero Realidade Virtual: Conceitos e Tendências. 1. ed. São

Paulo, 2004.

LIBGDX, Bad Logic Games. Goals and Features. [S.I.], 2015a. Disponível em: <

https://libgdx.badlogicgames.com/features.html >. Acesso em: 15 nov. 2015.

______. Ingress by NianticLabs@Google. [S.I.], 2015b. Disponível em:

<https://libgdx.badlogicgames.com/showentry.html?id=ingress>. Acesso em: 15 nov. 2015.

MÜLLER, Henric RoboVM Winding Down. [S.I.], 2016. Disponivel em: <

https://robovm.com/robovm-winding-down/ >. Acesso em: 23 jun. 2016.

NASCIMENTO, R. J.; CALAÇA, E. C. D; MELO, J. C. B. Gincana Virtual: Uma estratégia

didática interdisciplinar. Recife, 2009. Disponível em

<http://www.eventosufrpe.com.br/jepex2009/cd/resumos/R1353-1.pdf>. Acesso em: 20 set.

2015.

NIANTIC LABS, Ingress. 2012. Disponível em < https://www.ingress.com>. Acesso em 24

set. 2015.

OSTETTO, Giancarlo Reiter. Júri Simulado (Parte I) - Interação FURB 2013. Blumenau,

2013. Disponível em: <https://www.youtube.com/watch?v=c9PqnUjAIZI>. Acesso em: 14

jul. 2016.

PEREIRA, Michael H. R. Angularjs: Uma abordagem prática e objetiva. 2. ed. São Paulo:

Novatec, 2015.

PINHO, Márcio S.; KIRNER, Claudio Uma Introdução a Realidade Virtual. [S.I.],

[1997?]. Disponível em: <http://grv.inf.pucrs.br/tutorials/rv/index.htm>. Acesso em: 01 set.

2015.

REIS, Breno M. S. A experiência urbana e apropriação espacial a partir do jogo de realidade

aumentada (ARG) Ingress. Iluminuras, Porto Alegre, v. 16, n. 36, p. 360-378, ago./dez.

2014. Disponível em: <http://seer.ufrgs.br/index.php/iluminuras/article/view/52650/32598>.

Acesso em 07 set. 2015.

ROCHA, Diego Tondim Tô Aqui: Aplicativo Para Georreferenciamento. 2015. 67 f. YCC

(Graduação) – Curso de Ciência da Computação, Centro de Ciências Exatas e Naturais,

Universidade Regional de Blumenau, Blumenau, 2015.

SCHNEIDER, Kamila. A terceira plataforma da TI. Revista Interface, 18. ed. Blumenau, ano

05, p. 13-15, abr./mai./jun. 2013. Disponível em

<http://www.senior.com.br/interface/18/?force-desktop=1>. Acesso em 19 set 2015.

Page 76: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

75

SOUZA, K. S. G. O lúdico na comunidade virtual de aprendizagem. Uma visão

transdisciplinar. EccoS – Revista Científica, v. 10, n. 1, p. 143-168, jan./jun. 2008.

Disponível em:

<http://www.uninove.br/PDFs/Publicacoes/eccos/eccos_v10n1/eccosv10n1_3d08.pdf>.

Acesso em 20 set. 2015.

TORI, Romero; KIRNER, Claudio; SISCOUTO, Robson Fundamentos e Tecnologia de

Realidade Virtual e Aumentada. 1. ed. Pará, 2006. Disponível em

<http://www.ckirner.com/download/capitulos/Fundamentos_e_Tecnologia_de_Realidade_Vir

tual_e_Aumentada-v22-11-06.pdf>. Acesso em: 01 set. 2015.

TRICE, Andrew PhoneGap Explained Visually. [S.I.], 2012a. Disponível em

<http://phonegap.com/2012/05/02/phonegap-explained-visually/>. Acesso em 06 set. 2015.

______. PhoneGap Native Plugins. [S.I.], 2012b. Disponível em

<http://www.tricedesigns.com/2012/03/01/phonegap-native-plugins/>. Acesso em 06 set.

2015.

UNIVERSIDADE REGIONAL DE BLUMENAU Nossa História: como tudo começou.

Blumenau, [2014a?]. Disponível em <http://www.furb.br/web/1317/institucional/a-

furb/nossa-historia>. Acesso em: 05 set. 2015.

______. Interação FURB. Blumenau, [2014b?]. Disponível em

<http://www.furb.br/web/1368/relacao-com-a-comunidade/interacao-furb>. Acesso em: 05

set. 2015.

Page 77: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

76

APÊNDICE A – Integrando com o Trello

Neste apêndice encontram-se os passos para realizar a configuração da chave API de

desenvolvedor do Trello. Estes passos estão divididos em duas etapas: (1) efetuar login no

Trello e obter a chave API de desenvolvedor e (2) importar a biblioteca cliente.js no

arquivo index.html da aplicação. Na etapa (1) deve-se acessar o endereço

https://trello.com/app-key e localizar a chave gerada para a conta logada no Trello. A Figura

40 apresenta onde localizar a chave de API.

Figura 40 - Localização da Chave de API do Trello

Na etapa (2), deve-se importar a biblioteca client.js, utilizando a chave obtida como

parâmetro. A linha 1 do Quadro 13, apresenta a importação da biblioteca na seção head do

arquivo index.html. Após a importação, é possível utilizar a classe Trello para invocar os

métodos da API.

Quadro 13 - Importando client.js 1

2

3

<script

src="https://trello.com/1/client.js?key=ca4f9f958a4115bf66c830bXXXXXXXXX">

</script>

Após seguir os passos apresentados nesse apêndice, as rotinas de integração com a API

do Trello poderão ser utilizadas e estarão vinculadas com o projeto associado a chave API de

desenvolvedor.

Page 78: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

77

APÊNDICE B – Integrando com o Facebook

Neste apêndice encontram-se os passos para realizar a configuração da chave API de

desenvolvedor do Facebook. Estes passos estão divididos em quatro etapas: (1) criar um

projeto no Facebook Developer, adicionando a funcionalidade Login do Facebook, (2)

configurar as URIs válidas de redirecionamento, (3) habilitar os usuários para realizar os

testes de integração e (4) informar a chave de API na inicialização do módulo ngOpenFB.

Na etapa (1), deve-se acessar a opção Create New App na tela inicial do Facebook

Developer, adicionando a funcionalidade Login do Facebook. Quando o usuário do

aplicativo informar suas credenciais de acesso a sua conta, a API do Facebook redireciona o

usuário para um endereço de retorno configurado no ngOpenGB. Este endereço deve estar

configurado previamente no projeto do aplicativo. Para a etapa (2), a Figura 41 mostra a

configuração feita para o Furb Mobile Gincanas, onde a URI

http://localhost:8100/oauthcallback.html é utilizada quando o acesso é feito no

aplicativo mobile através do framework Phonegap, e a URI

https://www.facebook.com/connect/login_success.html é utilizada para acesso via

browser. A segunda URI foi utilizada durante a fase inicial de desenvolvimento do aplicativo,

onde os testes eram feitos diretamente em um browser.

Figura 41 – Configurando URIs de redirecionamento

O quadro mostra o código fonte da página HTML oauthcallback.html, onde, na

linha 4, a classe openFB recebe a URL da janela de login do Facebook, onde consta o token de

autenticação do usuário.

Quadro 14 - Código fonte da página oauthcallback.html 1

2

3

4

5

6

7

8

<html>

<body>

<script>

window.opener.openFB.oauthCallback(window.location.href);

window.close();

</script>

</body>

</html>

Na etapa (3) é feito a configuração de permissão de acesso dos usuários. Os projetos

configurados no Facebook iniciam no modo desenvolvimento, ficando indisponíveis para o

uso público. Durante o desenvolvimento do Furb Mobile Gincanas, não foi feito o processo de

Page 79: FURB MOBILE GINCANAS: SISTEMA MÓVEL NA PLATAFORMA PHONEGAP …

78

envio do aplicativo para avaliação do Facebook. Assim, para realizar os testes, foi necessário

habilitar manualmente o acesso de usuários ao aplicativo, dando-lhes a função de testadores.

A Figura 42 apresenta a tela para convidar os usuários do Facebook, para as funções de

Administrador, Desenvolvedor, Testador e Usuário de informações.

Figura 42 - Habilitando usuários

A etapa (4) é feita a configuração do módulo ngOpenFB, onde a chave de API do

aplicativo, obtido na página inicial do projeto no Facebook Developers, deve ser passada

como parâmetro na inicialização da classe ngFB. Essa configuração é apresentada no Quadro

15.

Quadro 15 - Inicialização da classe ngFB 1

2

3

ngFB.init({

appId : '999117715125999',

});

Após seguir os passos apresentados nesse apêndice, as rotinas de integração com a API

do Facebook poderão ser utilizadas e estarão vinculadas com o projeto configurado na

plataforma Facebook Developers.