Esse artigo faz parte da revista Java Magazine edição 55. Clique aqui para ler todos os artigos desta edição

/>

Criando um comunicador pessoal com integração no GoogleTalk

Hoje o Android é a sensação da computação móvel. Saiba como usar o protocolo XMPP no Android para criar aplicações de mensagens instantâneas

O Android é uma plataforma opensource para telefonia celular, que suporta aplicações escritas em Java, que executam na máquina virtual Dalvik (nova JVM implementada pelo Google), sobre um kernel Linux.

O interesse geral no Android tem vários motivos, mas podemos citar que ele é totalmente aberto, diferente da grande maioria da indústria de telefonia celular (mesmo os celulares que suportam Java ME costumam ter a JVM executando num sistema operacional proprietário e fechado, como o Symbian ou BREW). E o uso do Java permite fácil aprendizado para milhões de desenvolvedores Java (o conhecimento de Java ME ajuda, mas não é essencial). O Android também oferece facilidades para desenvolvimento que são mais comuns em ambientes de maior porte, como banco de dados, browser programável, GoogleMaps acessível e programável, serviço de localização, etc. Outro diferencial é o acesso total aos dados e funcionalidades de baixo nível do dispositivo, o que em Java ME não é possível, pelo menos não com APIs portáveis.

Devido ao SDK do Android ainda estar nas primeiras versões beta, muitas alterações, atualizações e adições poderão acontecer. O XMPP (Extensible Messaging and Presence Protocol), por exemplo, é um dos protocolos que ainda não tem suporte integral na plataforma.

O XMPP é um protocolo baseado em troca de mensagens XML usado para troca de mensagens instantâneas e informações presenciais. É o protocolo que faz funcionar os programas de troca de mensagem Jabber e Google Talk, por exemplo.

O Android já possui suporte nativo ao XMPP: contém as API’s necessárias para a implementação e uso do protocolo, permitindo o uso de um software dedicado a troca de mensagens instantâneas entre usuários e suas aplicações.

Neste artigo veremos como funciona o protocolo XMPP, seu suporte no Android e um estudo de caso, com uma aplicação no Android que se comunica com o software de mensagens instantâneas Google Talk.

Protocolo XMPP

O protocolo XMPP é um padrão aberto, o que permite o uso de servidores do protocolo por qualquer interessado, tal qual fazemos com os servidores HTTP e de email. Os servidores XMPP, também chamados de servidores Jabber (devido à invenção do XMPP por esta comunidade), possuem diversas implementações open source e também comerciais.

As aplicações de mensagens instantâneas, como o Google Talk, precisam de um servidor XMPP que contenha as contas dos usuários do serviço, incluindo as informações de seu buddy list (listagem dos usuários de contato já cadastrados).  Para realizar a comunicação entre dois usuários do mesmo servidor, o aplicativo manda uma mensagem para o servidor contendo o nome do usuário destino, e o servidor encaminha esta mensagem se o usuário estiver online. Se ele estiver offline, a mensagem é armazenada até que o usuário fique online.

O XMPP também realiza comunicação entre dois usuários registrados em servidores diferentes. Por exemplo, o usuario joao@servidor1.com irá se comunicar com o usuário maria@servidor2.com, sendo cada um cadastrado nos servidores XMPP servidor1.com e servidor2.com. O diagrama da Figura 1 ilustra a comunicação entre os dois usuários.

 

Figura 1. Envio de mensagem XMPP entre servidores diferentes

No caso da conexão entre servidor1 e servidor2 ser bloqueada (em qualquer sentido), a mensagem é descartada. Se o receptor (Maria) não estiver online, a mensagem é armazenada, e quando ela entrar no ar, será entregue.

XMPP no Android

Antes de usar o XMPP, é necessário configurar o usuário do serviço (no caso, o Google Talk).

Configurando o XMPP

Na atual implementação do Android, um usuário é mapeado em cada seção (conexão). Para isto, acessamos o menu gráfico Applications>Dev Tools (Figura 2)>XMPP Settings (Figura 3).

Figura 2. Selecionando menu Dev Tools

Figura 3. Selecionando menu Dev Tools

Esta opção abre a tela mostrada na Figura 4, onde deveremos adicionar (configurar) o usuário XMPP (pré-existente). Se você ainda não tem um usuário no Google Talk, será necessário criar um antes de testar o Android.

Figura 4. Adicionando conta (pré-existente)

A opção Stay connected to server (fique contectado ao servidor) irá manter a conexão do XMPP sempre aberta, permitindo assim um usuário que não esteja usando o software XMPP (olhando a tela de buddies ou trocando mensagens) receba mensagens do protocolo – veja o quadro “Vantagens do XMPP no Android”. Certifique-se de selecionar esta opção.

O comando Add Account abre a tela da Figura 5, onde inserimos o usuário (no exemplo, usuariotestes@gmail.com) e sua senha.

Figura 5. Dados de login no servidor XMPP

Com o usuário logado será possível acessar as funções do XMPP. Mas primeiramente veremos o que a API do Android tem a oferecer para uso do protocolo XMPP.  

 

Vantagens do XMPP no Android

Uma aplicação de IM necessita que o cliente (mesmo em um dispositivo móvel) mantenha a conexão aberta, mesmo quando o usuário não está enviando mensagens ou usando a tela da aplicação. Isso acarreta um consumo indesejável de banda/bytes do celular/dispositivo. No caso do Android, o plano (até o momento) é que o tráfego XMPP não seja cobrado, permitindo o uso do canal sempre aberto para as aplicações. Veremos se isso se mantém.

Além disso, um telefone não dá informação de presença. Não sabemos hoje se a pessoa para quem ligamos está querendo atender ao telefone. Não sabemos se o telefone está ligado, ou fora de área, etc. Com a informação presencial, teremos uma informação a mais sobre os nossos contatos, o que agiliza a comunicação.

É de grande importância entender que o XMPP no Android também pode ser usado para troca de DADOS entre aplicações, como jogos online.

API do XMPP

A API do Android para suporte ao XMPP é muito simples, consistindo de duas interfaces e uma classe no pacote com.google.android.xmppService.

A interface IXmppService é responsável por criar as sessões XMPP, verificar quais estão ativas e qual é a conexão padrão. Nela temos, entre outros, o método createXmppSession(), que cria a seção XMPP, passando os parâmetros de username e password.

A interface IXmppSession possui os métodos para manipulação dos chats, presença e envio de mensagens (dados e texto).

A Tabela 1 mostra alguns dos métodos de IXmppSession. A classe Presence representa a informação de presença do usuário, algo indispensável em aplicações de IM. Os valores de Presence podem ser Invited (convidado), Offline, Invisible (invisível), Do not disturb (Não perturbe), Away (fora do local), Idle (Inativo) ou Available (disponível). Esses valores são representados por inteiros. A API ainda não especifica os valores para cada tipo de Presence, mas veremos no exemplo a informação de presença sendo mostrada.

 Tabela 1. Alguns métodos de IXmppSession

Método

...
Quer ler esse conteúdo completo? Tenha acesso completo