Android 101: Trabalhar com a API Google Buzz

A Google Buzz API faz parte da mais recente família das Google APIs. Esta família é baseada numa nova infra-estrutura de API (mais sobre isso na apresentação do Google IO: How Google builds APIs. Por cima desta nova infra-estrutura a Google criou uma série de ferramentas que ajudam os programadores a criar aplicações.

Em Outubro de 2011, a Google anunciou que iria descontinuar o Google Buzz e a sua API.

HTTP Transport

Em Android existem algumas opções para fazer o transporte HTTP de mensagens de e para os serviços da Google (neste caso estamos a usar o serviço do Buzz).

  • UrlFetchTransport - Apenas em Google App Engine.
  • NetHttpTransport - Incluído no Java e no Android SDK. Escolha preferencial em Android a partir da versão Gingerbread.
  • ApacheTransport - Incluído no Android SDK. Escolha preferencial para versões antigas do Android SDK (até à versão Froyo).
  • AndroidHttp.newCompatibleTransport() - Escolhe entre NetHttpTransport ou ApacheTransport dependendo da versão do SDK disponível.

As conexões HTTP não devem ser efectuadas no thread principal do UI, pois não é aconcelhável bloquear o interface por um intervalo indeterminado de tempo enquanto a aplicação comunica com um serviço online. (link para artigo AsyncTask).

JSON

O JSON é um grande foco nas novas APIs da Google. Deve usá-lo como parser/serializer para evitar erros de falta de memória, que acontecem quando tentamos carregar uma resposta JSON como um objecto. Existem algumas opções para o JSON parser/serializer que pode usar.

  • JacksonFactory - O mais rápido. Baseado na biblioteca Jackson.
  • GsonFactory - Rápido. Baseado na biblioteca Google GSON.
  • AndroidJsonFactory - O mesmo que GSON e disponível na versão 3.0 do SDK.

Autenticação

O gerenciamento de autenticação no Android deve ser feito preferencialmente através do uso da classe AccountManager. O AccountManager fornece um registo centralizado de contas de utilizador online.

As APIs da Google fornecem uma forma mais específica para lidar com contas Google através da classe GoogleAccountManager.

OAuth

Embora ainda não se encontre na sua versão final, o uso de OAuth 2.0 é recomendado por causa dos benefícios que traz em comparação com a sua versão anterior.

  • Suportados por (quase) todas as APIs da Google.
  • Controlo mais refinado dos níveis de acesso.
  • Exemplo com o Google Buzz
    • https://www.googleapis.com/auth/buzz para acesso de leitura/escrita de dados no Buzz.
    • https://www.googleapis.com/auth/buzz.readonly para acesso de leitura de dados do Buzz.
    • https://www.googleapis.com/auth/photos para acesso de leitura a fotos do Buzz.

Os token OAuth são temporários e expiram no espaço de 1 hora. Neste sentido é necessário verificar se a resposta é um erro de autenticação (401) e proceder à autenticação do utilizador.

Aqui está um exemplo retirado de uma apresentação da Google IO 2011 (ficheiro PowerPoint disponível aqui, slide #50).

    @Override
    protected ActivityFeed doInBackground(Void... params) {
     try {
        // execute HTTP requests
     } catch (HttpResponseException e) {
        if (e.response.statusCode == 401) {
          accountManager.invalidateAuthToken(accessProtectedResource.getAccessToken());
          accessProtectedResource.setAccessToken(null);
          SharedPreferences.Editor editor2 = settings.edit();
          editor2.remove(PREF_AUTH_TOKEN);
          editor2.commit();
          getAuthToken(account);
        }
     }

API Access Key

Para além de lidar com as contas de utilizador necessitara de uma chave de acesso fornecida pela Google, que permite aceder ao conteúdo dos utilizadores através da API. Eis um exemplo com uma chave falsa:

buzz = new Buzz(new NetHttpTransport(), accessProtectedResource, new AndroidJsonFactory());
buzz.accessKey = "ABCdef123_9q";

Pode registar-se para ter uma chave através da Google API Console. Mais instrucções sobre como gerar uma chave.

Leia mais sobre chaves de acesso aqui.

Google Buzz API

O Google APIs Explorer é uma ferramenta muito útil para testar o formato do JSON retornado para cada pedido. Embora não necessite usar directamente o JSON, o explorador é útil para descobrir o nome dos campos e que campo retorna que informação.

Há uma apresentação da Google IO, Best Practices for Accessing Google APIs on Android, que dá algumas dicas sobre o uso de APIs da Google. O orador, Yaniv Inbar, fornece alguns exemplos baseados na API do Google Buzz. Pode encontrar a versão completa e funcional do código aqu i. Este código foi o ponto de partida para a nossa aplicação.

Limitações

A Google Buzz API Java Client 1.0.0 beta que usamos na nossa aplicação não está 100% implementada para alguns dos atributos JSON. Nestes casos terá que usar o JSON de forma um pouco incómoda. Eis o que eu tive que fazer neste caso:

ArrayList< ArrayMap<String, Object> > o = (ArrayList<ArrayMap<String, Object>>) a.links.unknownFields.get(linkType);
String s = (String) o.get(0).get("href");

Para além disto, algumas das mensagens na sua lista podem não ser publicas, neste caso a API retorna a mensagem:

Private post only viewable at https://plus.google.com/xxx/posts/xxx

Dércia Silva
Publicado por Dércia Silva em 16 novembro, 2011

Artigos relacionados