_capa Integrando Aplicações Java com o Facebook Descubra como é fácil criar uma aplicação para rodar no Facebook Desde o lançamento oficial do Facebook, em 2004, o número de usuários vem aumentando a cada dia. Atualmente estima-se que existam cerca de 900 milhões de usuários ativos na rede social. Esse sucesso do Facebook se deve à grande quantidade de funcionalidades, aplicativos e extensões disponíveis para seus usuários. A estratégia utilizada para conseguir disponibilizar novos aplicativos dentro da rede social sem muito esforço interno é baseada em prover maneiras para que outros desenvolvedores construam seus aplicativos integrados à plataforma do Facebook. Do ponto de vista do desenvolvedor, é muito interessante criar aplicativos para o Facebook devido à grande quantidade de usuários ativos que existem na plataforma. Este artigo mostra como criar um aplicativo integrado ao Facebook de maneira simples. 5\ João Paulo Gomes dos Santos | [email protected] Formado em Engenharia da Computação na ETEP Faculdades. Atua como desenvolvedor Java na VPSA. Possui as certificações SCJP, SCWCD, SCBCD e SCEA. Aplicativos dentro do Facebook A tualmente o Facebook é a rede social que possui mais usuários ativos, cerca de 900 milhões espalhados por todo o mundo. Dentro do Facebook é possível entrar em contato com os amigos, conversar, compartilhar fotos, organizar eventos, entre outras atividades. Além dessas funcionalidades disponibilizadas na rede social ainda existem milhares de outras funcionalidades provenientes de aplicativos criados por terceiros. Pode-se dizer que os aplicativos disponibilizados no Facebook contribuem significativamente para o aumento do número de usuários ativos na rede social. Estes aplicativos fazem com que os usuários fiquem mais tempo navegando na rede social e, de forma indireta, contribuem para o aumento do número de usuários ativos. Para o Facebook os aplicativos são ótimos para manter os usuários sempre conectados na rede social e assim garantir a receita da empresa, que na maior parte vem de propagandas. Do ponto de vista do desenvolvedor, criar aplicativos para o Facebook é interessante, pois o Facebook centraliza muitos usuários e seus relacionamentos de amizades consequentemente. A disseminação de aplicativos no Facebook é quase viral, em pouco tempo uma aplicação pode se espalhar por todo o mundo, sendo divulgada por toda a rede de relacionamentos. Empresas de diversos segmentos investem para conseguir espaço na rede social e, como resultado deste investimento, esperam conseguir maior aceitação pelo seu público-alvo. Pode-se citar como exemplo a rede Walmart, que divulga suas promoções em sua página do Facebook e dá descontos baseados na quantidade de visitas ou Likes que recebe. Com toda estrutura disponível no Facebook, surgiu uma nova maneira de interação entre as empresas e seus clientes, baseada em divulgação de conteúdo pela Internet. Outros motivos para a criação de aplicações para o Facebook são: » Trazer aplicações existentes para dentro do Facebook. » Promover uma marca no Facebook. O objetivo deste artigo é mostrar como criar aplicativos dentro do Facebook e fazer uso das APIs /6 disponibilizadas. Integrando sua aplicação com o Facebook Existem três maneiras para integrar sua aplicação com o Facebook, dentre elas estão: » Plug-ins sociais, como, por exemplo, o plug-in que adiciona botão para curtir o site, outro plug-in interessante é o que mostra recomendações baseadas em seus interesses e de seus amigos, como mostra a figura 1. » SDKs para desenvolvimento mobile facilitam a integração de aplicativos mobile com o Facebook. » Aplicações que são executadas dentro do Facebook, mais conhecidas como Canvas App, este tipo de integração é muito usado por jogos e será usado na aplicação de exemplo deste artigo. Figura 1. Plug-in social de recomendações. Graph API O Facebook conta com uma API conhecida como Graph API. Esta API provê uma maneira simples para representar objetos da rede social (pessoas, fotos, eventos, páginas) e as respectivas conexões existentes entre eles (relacionamentos de amizades, compartilhamento de conteúdo e identificação de pessoas em fotos). Todo objeto dentro do grafo social do Facebook é representado por um identificador único. Informações sobre um objeto podem ser obtidas através do seguinte endereço https://graph.facebook.com/ID, onde ID é o identificador do objeto a ser recuperado. Como exemplo pode-se usar a seguinte URL https:// graph.facebook.com/19292868552 que representa a página oficial para a plataforma Facebook, que possui o ID 19292868552. Além de disponibilizar o acesso usando o ID do objeto, também é possível acessar informações de usuários através de seus nomes de usuário, como, por exemplo, https://graph.facebook.com/btaylor. Existe um ID especial chamado me que representa o usuário atual. Todos os objetos do grafo social e seus relacionamentos podem ser acessados seguindo a seguinte estrutura https://graph.facebook.com/ID/CONNECTION_TYPE, alguns exemplos são: » Página da coca-cola: https://graph.facebook. com/cocacola » Grupo de desenvolvedores do Facebook: https://graph.facebook.com/195466193802264 » Amigos: https://graph.facebook.com/me/ friends?access_token=AAAAA » Mural: https://graph.facebook.com/me/ feed?access_token=AAAAA » Álbum de fotos: https://graph.facebook.com/ me/albums?access_token=AAAAA » Eventos: https://graph.facebook.com/me/ events?access_token=AAAAA » Músicas: https://graph.facebook.com/me/ music?access_token=AAAAA » Filmes: https://graph.facebook.com/me/ movies?access_token=AAAAA Note que algumas requisições possuem um pa- râmetro chamado access_token que representa uma permissão para acessar recursos que necessitam de autorização. O processo de autorização será discutido a seguir. Autorização O grafo social do Facebook possibilita o acesso rápido a informações públicas de um usuário (primeiro e último nome do usuário e foto) sem a necessidade de autorização, como no exemplo https://graph. facebook.com/btaylor, caso exista a necessidade de acessar informações adicionais do usuário existe a possibilidade de fazer uma requisição passando o access_token como parâmetro. A Graph API utiliza o protocolo OAuth 2.0 para controlar o acesso aos recursos disponibilizados pelas APIs da plataforma, deve-se, previamente, obter uma autorização para acesso ao recurso desejado. Quando o usuário acessa o aplicativo através do Facebook, uma requisição é disparada para a URL raiz da aplicação, essa requisição vem com um parâmetro chamado signed_request. Através do conteúdo do parâmetro signed_request pode-se descobrir se o usuário autorizou ou não o acesso aos seus dados. Nos casos em que o usuário autoriza o acesso é possível obter o access_token neste momento. Caso o acesso aos dados do usuário não tenha sido liberado ainda, deve-se redirecionar o usuário para a tela de solicitação de autorização para acesso aos dados do usuário, como é mostrado na figura 2. Mais informações sobre o fluxo autenticação com OAuth podem ser obtidas através do artigo Integrando suas aplicações Android com o Twitter e Facebook desta edição da revista MundoJ. Figura 2. Tela de solicitação de autorização do aplicativo. 7\ Figura 3. Tela inicial da aplicação Quiz MundoJ. Aplicação de exemplo Para demonstrar a integração de uma aplicação Java com as APIs do Facebook será desenvolvida uma aplicação de exemplo, que será executada dentro do Facebook. A aplicação de exemplo se chama Quiz MundoJ e consiste em um jogo de perguntas e respostas sobre Java. A tela inicial da aplicação está representada na figura 3. Na tela inicial da aplicação existe um botão para iniciar o quiz. A tela com as perguntas do quiz será exibida logo após o acionamento do botão Iniciar Quiz MundoJ. A tela com as perguntas está representada na figura 4. Figura 5. Publicação feita no mural do usuário após o envio das Após o preenchimento das respostas o usuário respostas. deve enviar as respostas usando o botão Enviar Respostas, depois disso o resultado obtido no quiz será publicado no mural do Facebook do usuário, como Controller, com um método mapeado para atender as mostra a figura 5. requisições para a raiz da aplicação, como mostra a Listagem 1. Esse método é responsável por receber e O funcionamento da aplicação é bem simples. O armazenar o parâmetro signed_request para uso pospróximo passo deste artigo é mostrar alguns detalhes terior. da implementação. O código da aplicação será disponibilizado na seção de downloads desta edição. Listagem 1. Método que atende requisições da raiz A aplicação foi desenvolvida utilizando Maven e da aplicação. Spring MVC. Ela possui uma classe chamada Home@RequestMapping(“/”) public String index(Map<String, Object> map, HttpServletRequest request) { // Recupera o parâmetro signed_request String signedRequest = request.getParameter(“signed_request”); if(signedRequest != null) { // Extrai o accessToken do signedRequest, caso // ele exista String accessToken = getAccessToken(signedRequest); // Se o accessToken for inválido if(isAccessTokenInvalido(accessToken)) { // O accessToken será solicitado novamente requisitarAccessToken(map); } else { Figura 4. Tela que exibe as perguntas do Quis. /8 } } } // Publica a porcentagem de acertos do usuário // em seu mural facebookPublisher.publicarMensagemNoMural( porcentagemDeAcertos, accessToken); // Se o accessToken for válido, ele será // armazenado armazenarAccessToken(request, accessToken); return “index”; } return “redirect:/?message=Respostas Enviadas com sucesso!”; Além do HomeController a aplicação possui a A classe FacebookPublisher possui um método classe PerguntaController, a qual é responsável por responsável por fazer a comunicação com a Graph exibir a lista de perguntas para o usuário, como podeAPI do Facebook para publicar o resultado do quiz no -se ver na Listagem 2. mural do usuário. O método publicarMensagemNoListagem 2. Método responsável por exibir a lista de Mural é mostrado na Listagem 4. perguntas. Listagem 4. Método que publica mensagem no mural. @RequestMapping(“/”) public String listarPerguntas(Map<String, Object> map, HttpServletRequest request) { map.put(“perguntas”, perguntaService.listarPerguntas()); return “perguntas”; } public void publicarMensagemNoMural(double pontuacao, String accessToken) { PostMethod postMethod = new PostMethod(“https://graph.facebook.com/me/feed”); postMethod.addParameter(“access_token”, accessToken); postMethod.addParameter(“message”, “Acertei “ + pontuacao + “% do Quiz MundoJ”); postMethod.addParameter(“link”, “https://apps.facebook.com/quizmundoj/”); postMethod.addParameter(“name”, “Resultado Quiz MundoJ”); postMethod.addParameter(“type”, “link”); postMethod.addParameter(“caption”, “Quiz MundoJ - Perguntas e respostas sobre Java”); Além de listar as perguntas, a classe PerguntaController possui um método responsável por receber as respostas do usuário, delegar o cálculo da porcentagem de acertos para a classe ContadorDeAcertos, recuperar o accessToken e delegar a publicação do resultado do quiz para a classe FacebookPublisher, como mostra a Listagem 3. Listagem 3. Método que recebe respostas. @RequestMapping(value = “/responder”, method = RequestMethod.POST) public String postarResposta(HttpServletRequest request) { // Recupera a lista de perguntas Pergunta[] perguntas = perguntaService. listarPerguntas(); // Recupera as respostas enviadas pelo usuário String[] respostas = getRespostas( request, perguntas.length); // Calcula a porcentagem de acertos do usuário double porcentagemDeAcertos = contadorDeAcertos. calcularPorcentagemDeAcertos(perguntas, respostas); // Recupera o accessToken String accessToken = recuperarAccessToken(request); HttpClient httpClient = new HttpClient(); } try { httpClient.executeMethod(postMethod); } catch (Exception e) { e.printStackTrace(); } Este método faz uma requisição HTTP POST para a API do Facebook usando o endereço https://graph. facebook.com/me/feed, passando os seguintes parâmetros: » access_token: token de acesso válido para que a requisição seja autorizada; » message: mensagem a ser publicada no mural do usuário; » link: link para ser colocado na mensagem publicada no mural do usuário; » type: tipo da informação a ser publicada, pode 9\ Figura 6. Página de desenvolvedores do Facebook. Figura 7. Tela para criação de novo aplicativo. » » ser link, photo ou vídeo, neste caso é link; name: nome do link que será publicado; caption: detalhes sobre o link que será publicado. Registrando o aplicativo no Facebook Depois de finalizar o desenvolvimento do aplicativo deve-se registrá-lo no Facebook. Para isso deve-se acessar a página de desenvolvedores do Facebook: https://developers.facebook.com/. A página dos desenvolvedores está representada na figura 6. Para registrar um aplicativo deve-se navegar até a página de aplicativos através do link Aplicativos no canto superior direito da página e em seguida clicar no botão Criar Novo Aplicativo também situado no canto superior direito da página. A tela para criação de um novo aplicativo será exibida, como é mostrado na figura 7. Após a criação do novo aplicativo você será encaminhado para a página de configuração do seu aplicativo, assim como é mostrado na figura 8. /para saber mais > Para saber mais sobre OAuth , leia o artigo Integrando suas aplicações Android com o Twitter e Facebook desta edição da revista MundoJ. > Para saber mais sobre o Heroku recomenda-se que o leitor acesso a sua página: http://java.heroku.com/ App ID que identifica a aplicação e o App Secret que é usado para garantir a integridade dos resultados obtidos através da API do Facebook. Nesta mesma página de configuração deve-se selecionar um dos modos de integração com o Facebook que estão disponíveis, para este artigo, deve-se selecionar a opção App on Facebook e preencher os endereços da aplicação nos campos Canvas URL e Secure Canvas URL, como é mostrado na figura 8. A aplicação Quiz MundoJ está hospedada em um serviço que oferece suporte ao deploy de aplicações Java chamado Heroku (http:// www.heroku.com/). Por isso o endereço configurado para o campo Canvas URL é http://quizmundoj.heNa tela de configuração do aplicativo pode-se rokuapp.com/. A aplicação de exemplo deste artigo é bem simobservar algumas informações importantes como o / 10 /referências Figura 8. Tela de configuração do aplicativo. ples, mas serve como guia para integração de uma aplicação Java com o Facebook. Considerações finais Este artigo mostra como é simples e fácil desenvolver e integrar aplicações Java com o Facebook. Com as informações deste artigo o leitor pode ter uma boa noção do processo de desenvolvimento e integração com o Facebook. Este artigo mostrou apenas uma pequena porção das possibilidades de integração disponíveis. Recomendo aos leitores que explorem a Graph API para conhecerem as possibilidades de integração de aplicações Java com o Facebook. > https://developers.facebook.com/docs/appsonfacebook/ tutorial/ > https://developers.facebook.com/docs/guides/canvas/ > https://developers.facebook.com/docs/samples/canvas/ > https://developers.facebook.com/docs/reference/api/ > https://developers.facebook.com/docs/authentication/ > https://developers.facebook.com/docs/authentication/ canvas/ > https://developers.facebook.com/docs/authentication/ signed_request/ > http://java.heroku.com/ 11 \