Escolar Documentos
Profissional Documentos
Cultura Documentos
2) SQLiteOpenHelper.java
A. Google Cloud Endpoints Essa é a classe mais importante para a manipulação de
O Google Cloud Endpoints consiste em ferramentas, bancos de dados SQLite na API Android. Ela gerencia a
criação e o ciclo de vida de um banco de dados no Android.
Nela são declarados o esquema e os métodos de criação de
todas as tabelas, além do que, normalmente, as queries passam
por essa classe.
C. Facebook
O Facebook utiliza a Open Graph API [7], a qual é baseada
em uma interface HTTP, podendo utilizar os métodos deste
protocolo para realizar chamadas para buscar dados de
usuários, criar posts automáticos na linha do tempo dos
mesmos e criar e atualizar um ranking para uma aplicação,
entre outras funcionalidades. Ela foi desenvolvida para ser
usada em diversas plataformas, como PHP, JavaScript, C#,
Android, entre outros. Porém, neste estudo, será focado o uso
da plataforma Android. O nome da API vem de “social
graph”, que é uma alusão à representação da informação no
Facebook em que a informação é representada por:
Nodes: Representação de algum objeto de interesse ao Figura 1: Exemplo de uso do GraphRequestAsyncTask.java
aplicativo ex.: Usuário, foto, página, comentário, etc.
Edges: Conexões entre os nodes ex.: Página de fotos, lista III. CONCEPÇÃO DO PROJETO
de comentários, etc. O projeto consiste em um jogo de perguntas e respostas no
Fields: Atributos dos nodes ex.: Nome de usuário, qual cada pergunta contém cinco respostas e apenas uma delas
aniversário, nome de uma página. é a correta. Para trazer mais competição ao jogo, foram
A Facebook Open Graph API consiste basicamente em implementadas cinco fases que o usuário precisa passar para
fazer requisições GET sobre a url: graph.facebook.com para terminar o mesmo, sendo que a primeira fase contém seis
fazer leitura, seguindo a seguinte estrutura: perguntas; a segunda fase contém oito perguntas; a terceira
fase contém dez perguntas; a quarta fase contém doze
Requisição de um node: perguntas e a quinta fase contém quatorze perguntas. Haverá
GET graph.facebook.com/{node-id} uma pontuação por usuário, visto que quanto menos ele usar as
“ajudas” disponíveis e quanto mais longe o usuário conseguir
Requisição de um Edge: alcançar, maior será sua pontuação, podendo então ser
GET graph.facebook.com /{node-id}/{edge-name} posicionado entre outros jogadores utilizando o ranking do
Facebook. Além disso, será utilizado o acesso ao Google
Para fazer escrita de dados, é usada a requisição POST, Cloud Endpoints para a atualização, adição e remoção de
passando parâmetros na requisição, e utilizando a mesma perguntas e uma integração com o Facebook para efetuar
chamada acima: login, guardar pontuação, criar ranking de desempenho de
jogadores e efetuar posts automáticos.
Requisição Post de um node: A primeira implementação no aplicativo foi a criação do
Post graph.facebook.com/{node-id} banco de dados SQLite com a tabela de perguntas, em seguida
foram criadas as Activities [9] principais da aplicação: menu
Requisição Post de um Edge: principal, tela de perguntas, tela de fim de jogo, escolha de
Post graph.facebook.com /{node-id}/{edge-name} fases, entre outras. Nessa fase já era possível efetuar testes nas
telas de perguntas. Em seguida, foi implementada a integração
Para facilitar o uso da Open Graph API, a versão com a API do Facebook, integrando a seção de login, registro
desenvolvida para Android conta com a classe de pontos, para que o jogo ficasse mais interessante, e nessa
GraphRequestAsyncTask.java, que encapsula as chamadas fase já foi possível criar a Activity de login da aplicação.
HTTP em uma classe que herda de AsyncTask.java, afim de Finalmente, foi feita a integração com o Google Cloud
não executar requisições HTTP na UI Thread [18], o que é Endpoints para atualizar as perguntas sempre que necessário.
mandatório para esse tipo de requisições no sistema Android. Resumidamente, o diagrama da aplicação é representado
Com esse encapsulamento, fica mais fácil efetuar as conforme a Figura 2.
requisições, economizando tempo por não ser necessário
implementar as próprias requisições.
Dessa forma, um exemplo de uso da classe
GraphRequestAsyncTask.java para acessar informações de
nome e e-mail de uma conta de usuário no Facebook é
representado na Figura 1.
A tabela criada para armazenar as questões não se
enquadrou na primeira forma normal: “A normalização para a
primeira forma normal elimina grupos repetidos” [12]. Optou-
se por essa estrutura, tendo em vista sua simplicidade de
aplicação a qual já atende às necessidades requeridas. A partir
da construção do banco de dados da forma proposta, o
diagrama de classe do projeto do banco é representado
conforme a Figura 3.
.
A. SQLite
Foi criada a instância de um banco de dados SQLite para
armazenamento das perguntas. Para tanto, foram criadas três
classes: a classe de contrato QuizContract.java, onde é
armazenado o nome do banco de dados, o nome da tabela e o
Figura 3: Diagrama de Classes do banco de dados
nome de cada coluna da tabela; a classe QuizDbHelper.java,
que estende a classe abstrata da API do Android B. Facebook integration
SQLiteOpenHelper.java, sendo essa a classe principal do A API do Facebook possui diversas funcionalidades, porém,
banco de dados, pois a criação da mesma é mandatória no nesse aplicativo serão utilizadas as seguintes funcionalidades:
Android para o uso do SQLite. Nela insere-se o código de Login, Post e Ranking.
criação de tabelas no método onCreate; e a classe Para fazer a integração com o Facebook, o primeiro passo
QuizDAO.java, que é uma extensão da classe foi adicionar a seguinte linha no arquivo build.gradle do
QuizDbHelper.java, na qual centralizam-se todos os métodos módulo app [22] para adicionar a biblioteca do Facebook ao
públicos que contenham as regras de negócio da aplicação e a projeto.
separação das regras de manutenção do banco de dados, que
ficarão na classe QuidDBHelper.java. A Tabela III mostra a compile 'com.facebook.android:facebook-android-
tabela a ser criada no banco de dados. sdk:4.6.0'
TABELA III – COLUNAS DA TABELA DE PERGUNTAS
Em seguida, adicionou-se a seguinte linha, necessária para
COLUNA TIPO inicializar a API do Facebook. Recomenda-se adicionar essa
INTEGER PRIMARY KEY linha na Activity Lançadora [21] do aplicativo, pois ela é a
ID AUTOINCREMENT
primeira Activity a ser executada:
QUESTION TEXT NOT NULL
ANSWER1 TEXT NOT NULL FacebookSdk.sdkInitialize(getApplicationContext());
ANSWER2 TEXT NOT NULL
1) Login:
ANSWER3 TEXT NOT NULL
A API do Facebook disponibiliza um botão de login, que
ANSWER4 TEXT NOT NULL funciona de forma semelhante ao botão fornecido pela API do
ANSWER5 TEXT NOT NULL Android. Este botão vem com a aparência e os eventos de
RIGHT_ANSWER INTEGER NOT NULL clique implementados com as necessidades de login do
Facebook. Foi adicionado esse botão na tela inicial do
Aplicativo, à classe LoginActivity.java. A adição desse botão linha do tempo do jogador, pois a postagem terá o nome da
de login no XML de layout da Activity é feita de forma aplicação e um link para qualquer pessoa poder obter o
simples, bastando adicionar a tag LoginButton no XML de aplicativo.
layout da Activity, conforme representado na Figura 4. Para efetuar o post na linha do tempo, foi executado um
objeto da classe GraphRequestAsyncTask.java vindo do
método estático newPostRequest da classe GraphRequest.java,
como mostrado a seguir:
3) Ranking:
A implementação do ranking via Facebook é dividida em
duas etapas: na primeira, a criação de score do jogador (parte
em que o usuário insere ou atualiza a pontuação) e a segunda,
Figura 6: Método de retorno do login do Facebook
a visualização do ranking (permite visualizar a pontuação
atual do jogador e de seus amigos). É importante observar que,
2) Post:
esta implementação não mostra a pontuação total de todos os
Os posts automáticos na linha do tempo do Facebook serão
jogadores [13].
feitos com o consentimento do usuário, que inclusive, é
mandatório para uso de posts do Facebook em qualquer
4) Criação de score
aplicação [19]. O intuito dessa funcionalidade é oferecer ao
Para criar um score novo, o primeiro passo é criar um
usuário a possibilidade de enviar uma pergunta acertada ou sua objeto JSON com o valor da pontuação, como representado na
pontuação final à sua linha do tempo em sua página pessoal do Figura 9.
Facebook para que seus amigos possam ver. Em contrapartida,
o aplicativo ganhará uma propaganda a cada postagem na
Figura 9: Objeto do tipo JSONObject com o novo score a ser submetido
a) Visualização do ranking
Com o intuito de reaproveitar o ranking em Activities
diferentes, foi implementado o código de mostrar o ranking
dentro de um Fragment [20].
A fim de coletar a lista de nomes e pontuações do ranking, a
seguinte é necessário efetuar uma requisição para a url:
/{appid}/scores como representado na Figura 11.
IV. RESULTADOS
Foram encontradas grandes dificuldades no uso da API do
Facebook devido aos termos de política de privacidade, falta
de documentação e complexidade no uso da API Open Graph,
além de que poucos desenvolvedores utilizam essa API,
complicando a pesquisa por resoluções de problemas e por
melhores práticas. Além disso, o Facebook requer um controle
bastante rigoroso para implantar o aplicativo em produção,
Figura 14: Tela de perguntas usando Relative Layout requerendo até a confecção de um vídeo para liberar seu uso
[14]. Em contrapartida, encontrou-se grande facilidade no uso
A tela de perguntas apresentada acima foi criada utilizando da API do Google Cloud Endpoints. De início, a integração
os seguintes parâmetros nos elementos da tela: com o Android Studio auxilia bastante e seu uso é facilitado
por classes semiprontas entregues no momento da criação do
módulo do Google Cloud EndPoints. O uso do Relative
TABELA IV – ELEMENTOS DA TELA DE PERGUNTAS Layout é sem dúvida uma facilidade para a confecção de
Nro ID Parâmetros layouts da Interface Gráfica no Android. No entanto, seu uso
textViewRoundNum de forma indiscriminada pode causar maiores complicações.
1 ber android:layout_alignParentStart="true" Montar um Relative Layout pela interface gráfica do Android
android:layout_alignParentTop="true" Studio apresenta certa dificuldade quando o número de
android:layout_alignParentRight="true"
android:layout_toEndOf=
elementos se torna grande, nesse ponto alguns exemplos
2 card_view_question "@+id/textViewRoundNumber" seriam em posicionar os elementos nos pontos exatos, visto
android:layout_alignParentStart="true" que tais elementos começam a se posicionar em locais que o
android:layout_alignParentEnd="true" desenvolvedor não teve a intenção. Outro complicador refere-
card_view_radio_an android:layout_below=
se à hora de alterar os layouts já concluídos, seja para remover
3 swers "@+id/card_view_question"
android:layout_below= ou alterar a posição de determinados elementos. Como os
"@+id/card_view_radio_answers" elementos encontram-se relacionados reciprocamente, as
4 textViewScore android:layout_alignParentStart="true" mudanças em alguns deles fazem o layout inteiro se desajustar.
android:layout_below= Em muitos casos foi necessário alterar os Relative Layouts
"@+id/card_view_radio_answers"
android:layout_alignEnd=
manualmente no XML a fim de encontrar a posição ideal para
5 button_answer "@+id/card_view_radio_answers" determinados elementos ou para alterar a posição dos mesmos.
android:layout_below="@+id/button_answer"
android:layout_alignParentEnd="true"
6 adView android:layout_alignParentStart="true"
android:layout_below="@+id/adView"
7 textViewHelp android:layout_alignParentStart="true"
android:layout_below="@+id/textViewHelp"
8 buttonCheering android:layout_alignParentStart="true"
android:layout_alignTop="@+id/buttonCheeri
ng"
9 buttonCoach android:layout_centerHorizontal="true"
Abaixo seguem algumas telas mais relevantes ao trabalho C. A tela principal do aplicativo contém as fases que o
referente ao jogo concluído. usuário pode escolher, conforme mostrado na Figura 17.
A. O jogo inicia com a tela de login onde o usuário pode
escolher entre efetuar a autenticação via Facebook ou
efetuar o login anônimo conforme mostrado na Figura 15.
Figura 15: Tela de Login da aplicação D. A tela de jogo é a tela principal da aplicação, a qual
contém as perguntas e as respostas do Quiz, conforme
B. A tela principal do aplicativo, apresenta um Menu mostrado na Figura 18.
lateral com opções de compartilhar, visualizar ranking, chat
da torcida, limpar score e logout, conforme mostrado na
Figura 16.