É possível incorporar funcionalidades do Facebook em seus próprios
aplicativos. Da perspectiva do aplicativo remoto, a Facebook Platform
suporta APIs para aplicativos da Web remotos e SDKs remotos para
aplicativos nativos remotos para as plataformas do iPhone, iPad e
Android. Neste artigo, explore as APIs do Facebook Platform e o Facebook
SDK para Android, o SDK lançado pela equipe de dispositivo remoto do
Facebook.
Pré-requisitos
Para acompanhar este artigo, é preciso ter as seguintes qualificações e ferramentas:
- Conhecimento básico da tecnologia Java e como usar o Eclipse (ou seu IDE favorito)
- Java Development Kit (é requerida a versão 5 ou 6)
- Eclipse (versão 3.4 ou 3.5)
- SDK do Android e plug-in ADT
Para obter informações sobre download e configuração, consulte o tópico Recursos no final deste artigo.
Acrônimos usados frequentemente:
- ADT: Android Development Tools
- API: Application program interface
- IDE: Integrated development environment
- JDK: Java Development Kit
- JSON: JavaScript Object Notation
- REST: Representational State Transfer
- SDK: Software Development Kit
- UI: User interface
- URL: Uniform Resource Locator
- XML: Extensible Markup Language
Visão geral das APIs da Facebook Platform
Antes de abordar o SDK do Facebook para Android, é importante
entender a Facebook Platform e suas APIs. De acordo com o Facebook, a
Facebook Platform permite que qualquer um construa aplicativos sociais
no Facebook e na Web. Para permitir que você construa tais aplicativos,
o Facebook oferece uma coleção abrangente de avançados APIs e SDKs
principais.
A API principal da Facebook Platform é a API Graph que permite que
você leia e grave dados
no e a partir do Facebook. O Facebook também possui algo chamado de
API REST antiga.
A API Graph mais recente altera o paradigma da API de
uma forma orientada ao método de ler e gravar dados no e a partir do
Facebook para uma nova forma que usa objetos (perfis de usuário, amigos,
postagens, fotos, preferências, e assim por diante) e os
relacionamentos ou conexões entre eles. Essa abordagem simplifica a API
do Facebook e a torna mais consistente ao trabalhar com objetos.
Observe
que enquanto a API Graph é preferencial em relação à API do Facebook, a
API REST antiga ainda está ativa e é suportada. Tanto as APIs Graph
quanto as APIs REST são aplicáveis a aplicativos remotos, nativos ou
aplicativos da Web remotos, incluindo conteúdo da Web remoto em
aplicativos nativos através do uso de visualizações da Web.
Aos objetos da API Graph é atribuído um ID exclusivo e eles são
facilmente acessíveis usando uma URL que pode ser qualificada mais
adiante para abordar um objeto/conexão específico. A estrutura geral de
uma URL de objeto é a seguinte: https://graph.facebook.com/OBJECT_ID/CONNECTION_TYPE em que OBJECT_ID é o ID exclusivo e CONNECTION_TYPE
é um dos tipos de conexão suportados pelo objeto. Por exemplo, uma
página suporta as seguintes conexões: alimentação/wall, fotos, notas,
postagens, membros, e assim por diante.
Com a API Graph, é possível recuperar, excluir e publicar objetos.
É possível procurar, atualizar objetos, filtrar resultados e até descobrir dinamicamente
conexões/relacionamentos de um objeto.
Por padrão, os aplicativos têm acesso aos dados públicos do usuário. Para acessar dados privados,
os aplicativos devem primeiro solicitar as permissões do usuário, que são chamadas de permissões
estendidas. O Facebook define um grande número de permissões que você pode ler na página
Extended Permissions.
Apresentação ao SDK do Facebook para Android
Agora que você possui um maior conhecimento das APIs da Facebook Platform, dê uma olhada no SDK do Facebook para Android.
O SDK do Facebook para Android é um wrapper de linguagem de programação para o Facebook Graph
e APIs REST antigas. Esse SDK é um software livre, hospedado no repositório
facebook / facebook-android-sdk do github.
Devido à natureza evolutiva do SDK de software livre, aguarde futuras
alterações no SDK. O SDK é licenciado pela Apache License, Versão 2.0.
O SDK do Facebook para Android oculta muitos detalhes abordados na seção
anterior, Visão geral das APIs da Facebook Platform.
Ele faz isso fornecendo seis classes Java, como descrito na Tablela 1.
Tablela 1. Package com.facebook.android
Classes | Descrição |
---|---|
AsyncFacebookRunner | Uma classe auxiliar que implementa chamadas assíncronas da API do Facebook |
DialogError | Uma classe que encapsula erro de diálogo |
Principal classe do Facebook para interação com as APIs da Facebook Platform | |
FacebookError | Uma classe que encapsula um erro do Facebook |
FbDialog | Uma classe que implementa uma visualização na Web para diálogos do Facebook |
Util | Uma classe auxiliar com uma série de métodos utilitários |
O SDK do Facebook para Android também traz alguns exemplos úteis que
você pode usar como linha de base para seus próprios aplicativos. De especial interesse são a classe principal Facebook e a classe
Facebook Dialog, que abordarei detalhadamente a seguir.
A classe principal Facebook
encapsula métodos para autorizar o usuário, criar diálogos do Facebook,
fazer solicitações de API, desconectar o usuário e ter ou definir
informações de acesso e sessão, além do status.
A classe Facebook Dialog
implementa uma visualização na Web e métodos para sua criação, bem como
a lógica para manipular respostas da URL do Facebook (status).
O diálogo é essencial para a forma como o SDK opera. O SDK oferece
dois métodos para
autenticar, um chamado de conexão única na qual usa, se instalados,
os
diálogos do aplicativo nativo do Facebook, e a abordagem padrão de
visualização na Web para diálogos.
Neste
artigo, focarei a abordagem de visualização na Web. O restante das
classes SDK são classes auxiliares usadas para encapsular informações de
erro ou fornecer utilitários úteis usados por todo o SDK.
As seções a seguir focam casos de uso de um aplicativo típico do Facebook:
- Instalação do SDK do Facebook para Android
- Registro do seu aplicativo
- Criação de SampleApp
- Exibição de diálogos do Facebook
- Autorização para o usuário
- Solicitações de API
Instalação do SDK do Android
Você precisa fazer o download e instalar o Eclipse ou seu IDE favorito.
Além disso, é preciso instalar o SDK do Android. Para informações sobre
como fazer o download e instalar o Eclipse e o SDK do Android, consulte a
página Download the Android SDK no Web site Android Developer e também a seção Recursos ao final do artigo.
Instalação do SDK do Facebook para Android
O SDK do Facebook para Android é hospedado no repositório
facebook / facebook-android-sdk do github. Faça o download da origem
do SDK e extraia em seu diretório ativo.
Inicie o Eclipse e crie um
projeto Android selecionando File Menu -> New -> Project e escolha o projeto Android. Crie o projeto a partir da origem existente e aponte para o diretório de origem. Faça o Download para o código de origem ao final do artigo.
Registro do seu aplicativo
Antes de iniciar, você deve registrar seu aplicativo do Facebook e obter um ID do
aplicativo (client_id) e uma chave secreta associada (client_secret). O ID do cliente é usado em seu aplicativo ao fazer as diferentes chamadas da API do Facebook.
O aplicativo de amostra
O aplicativo de amostra, que, por questões de simplificação, eu chamo
de SampleApp, mostra como usar o SDK do Facebook para Android.
O
aplicativo consiste em um único arquivo que implementa a atividade
SampleApp e que usa uma tela para exibir mensagens, a lista de amigos do
Facebook e itens do menu para conectar/autenticar o usuário, obter uma
lista de amigos e postar no wall do usuário autenticado (me).
Antes de começar, lembre-se de que você deve registrar seu aplicativo
no Facebook, como explicado anteriormente, e que você tem que
configurar o atributo APP_ID em SampleApp.java para o client_id como fornecido pelo Facebook.
Lista 1. Inicialização do ID do aplicativo
// Set application ID to your registered app client_id
// See http://www.facebook.com/developers/createapp.php
public static final String APP_ID = ".....";
Na tela Sample Application, use um layout linear que contenha:
- Uma
visualização de texto para mensagens de status simples; - Uma visualização
de lista para exibir a lista de amigos do Facebook recuperada do
servidor; - Itens de menu para conectar/autenticar o usuário;
- Obter uma
lista de amigos - Postar no wall do usuário autenticado (me).
A Lista 2 mostra as declarações de UI de XML para o layout da tela principal de UI.
Lista 2. Declarações de UI da tela principal
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/black"
>
<TextView android:id="@+id/txt"
android:text="@string/hello"
android:textColor="@drawable/white"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:paddingLeft="10dp"
android:layout_margin="10dp"
android:textSize="10sp"
android:layout_marginTop="5px"
android:layout_marginBottom="5px"
android:layout_marginRight="0px"
android:layout_marginLeft="0px"
android:gravity="left"
/>
<ListView
android:id="@+id/friendsview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textFilterEnabled="true"
/>
<TextView
android:id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="No data"
/>
</LinearLayout>
A Lista 3 mostra as declarações de UI de XML para cada linha em sua visualização de lista.
Lista 3. Declarações de UI da linha de visualização de lista
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="10dip"
>
<TextView
android:id="@+id/rowtext_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
/>
</LinearLayout>
E a Lista 4 mostra as declarações de UI de XML para os itens de menu.
Lista 4. Declarações de UI de itens de menu
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/login" android:title="Login"/>
<item android:id="@+id/getfriends" android:title="Get Friends"/>
<item android:id="@+id/wallpost" android:title="Wall Post" />
</menu>
A Figura 1
mostra os resultados da declaração de UI para XML de SampleApp antes
(com o botão Login) e depois do login (com os botões Logout, Get Friends
e Wall Post).
Figura 1. Layout da tela de SampleApp
O método onCreate() de SampleApp é chamado pela plataforma
do Android quando a instância SampleApp é criada. Esse método
realiza uma verificação básica para
ter certeza de que o ID do aplicativo está configurado antes de
continuar, inicializar os recursos de UI e inicializar a instância de
sessão do Facebook.
Lista 5. Inicialização do aplicativo
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Make sure the app client_app has been set
if (APP_ID == null) {
Util.showAlert(this,
"Warning", "Facebook Application ID must be set...");
}
// Initialize the content view
setContentView(R.layout.main);
// Get the status text line resource
mText = (TextView) SampleApp.this.findViewById(R.id.txt);
// Setup the ListView Adapter that is loaded when selecting "get friends"
listView = (ListView) findViewById(R.id.friendsview);
friendsArrayAdapter = new FriendsArrayAdapter(this, R.layout.rowlayout, friends);
listView.setAdapter(friendsArrayAdapter);
// Define a spinner used when loading the friends over the network
mSpinner = new ProgressDialog(listView.getContext());
mSpinner.requestWindowFeature(Window.FEATURE_NO_TITLE);
mSpinner.setMessage("Loading...");
// Initialize the Facebook session
mFacebook = new Facebook(APP_ID);
mAsyncRunner = new AsyncFacebookRunner(mFacebook);
}
O restante do fluxo do aplicativo é acionado por interações de UI através de itens de
menu. Três itens de menu são definidos:
- login/logout (alternância),
- get friends,
- post to the wall – como ilustrado na Lista 4.
Conforme o usuário seleciona um item de menu, o aplicativo realizada a
ação apropriada. A listagem a seguir mostra como os itens de menu são
manipulados. A Lista 6 mostra como instanciar o menu reduzindo sua definição de XML.
Lista 6. Criação de menu
/**
* Invoked at the time to create the menu
* @param the menu to create
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
A Lista 7
mostra como os itens de menu são modificados antes de serem exibidos,
ou seja, mostra o estado login ou logout apropriado e ativa/desativa get friends e post to wall conforme adequado.
Lista 7. Criação de menu
/**
* Invoked when preparing to display the menu
* @param menu is the menu to prepare
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem loginItem = menu.findItem(R.id.login);
MenuItem postItem = menu.findItem(R.id.wallpost);
MenuItem getfriendsItem = menu.findItem(R.id.getfriends);
if (mFacebook.isSessionValid()) {
loginItem.setTitle("Logout");
postItem.setEnabled(true);
getfriendsItem.setEnabled(true);
} else {
loginItem.setTitle("Login");
postItem.setEnabled(false);
getfriendsItem.setEnabled(false);
}
loginItem.setEnabled(true);
return super.onPrepareOptionsMenu(menu);
}
A Lista 8 mostra como os itens de menu são manipulados e como a ação apropriada (login/logout, get friends, post to wall) é chamada.
Lista 8. Manipulação da seleção de menu
/**
* Invoked when a menu item has been selected
* @param item is the selected menu item
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Login/logout toggle
case R.id.login:
// Toggle the button state.
// If coming from login transition to logout.
if (mFacebook.isSessionValid()) {
AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(mFacebook);
asyncRunner.logout(this.getBaseContext(), new LogoutRequestListener());
} else {
// Toggle the button state.
// If coming from logout transition to login (authorize).
mFacebook.authorize(this, PERMISSIONS, new LoginDialogListener());
}
break;
// Wall Post
case R.id.wallpost: // Wall Post
mFacebook.dialog(SampleApp.this, "stream.publish", new
WallPostDialogListener());
break;
// Get Friend's List
case R.id.getfriends: // Wall Post
// Get the authenticated user's friends
mSpinner.show();
mAsyncRunner.request("me/friends", new FriendsRequestListener());
break;
default:
return false;
}
return true;
}
O aplicativo usa uma série de chamadas de retorno para identificar o
estado de cada chamada assíncrona. A SampleApp define um retorno de
chamada para lidar com o êxito ou a falha de solicitações de login, de
diálogos de logout, de postagem para diálogos de wall e de solicitações
de amigos.
É possível pegar esse aplicativo de amostra e incluir suas
próprias ações seguindo o mesmo padrão de inclusão de menus e as
chamadas correspondentes para o Facebook com os retornos de chamada
correspondentes para receber as mensagens de estado.
Os itens de menu login e post to wall chamam o diálogo do Facebook,
que por padrão usa os diálogos baseados em visualização na Web do SDK,
se a conexão única na opção não estiver definida; isso é explicado na
seção a seguir.
O retorno de chamada FriendsRequestListener é abordado em Solicitações de API do Facebook. O último retorno de chamada, MyDialogListener implementa o SDK do Facebook para Android DialogListener,
que é usado para solicitações do Facebook que usam os diálogos baseados
em visualização na Web do SDK, como explicado na seção a seguir.
O
implementador de DialogListener deve implementar a lógica
de conclusão apropriada. Por exemplo, isso é usado durante o login e
solicitações de postagens no wall.
Exibição de diálogos do Facebook
O SDK do Facebook para Android conta com os diálogos baseados na Web/servidor do Facebook para interações
com o usuário, como autorização, permissão e publicação de mensagens do usuário.
A principal classe de
SDK Facebook.java define o método dialog() ao gerar o diálogo de UI para a ação solicitada.
Lista 9. O método Facebook Dialog
/**
* Generate a UI dialog for the request action in the given Android context
* with the provided parameters.
*/
public void dialog(
Context context,
String action,
Bundle parameters,
final DialogListener listener) {
:
:
}
Esse método assíncrono pega como entrada o contexto de aplicativos, a ação a ser realizada (como login, publish_stream, read_stream, offline_access),
os parâmetros exigidos para a solicitação ou ação específica, além de um
método listener que é chamado quando os métodos assíncronos concluem a
execução.
O método cria o diálogo de visualização na Web apropriado. Por
exemplo, para publicar uma mensagem de status, faça uma chamada para
método da classe principal do Facebook dialog() passando a ação stream.publish.
Lista 10. Chamada do método dialog() e processamento do retorno de chamada
package com.myapp.facebook.android;
:
import com.facebook.android.*;
:
mFacebook = new Facebook(); // Facebook core
:
// Create a Facebook dialog (using the call asynchronous API)
mFacebook.dialog(
this,
"stream.publish",
new MyDialogListener());
:
:
//
// My asynchronous dialog listener
//
public class MyDialogListener extends com.facebook.android.Facebook.DialogListener {
public void onComplete(Bundle values) {
final String postId = values.getString("post_id");
if (postId != null) {
// "Wall post made..."
} else {
// "No wall post made..."
}
}
public void onFacebookError(FacebookError e) {...}
public void onError(DialogError e) {...}
public void onCancel() {...}
}
O resultado dessa chamada é o diálogo baseado na Web do Facebook publish to wall como na Figura 2.
Figura 2. Postagem no wall
Esta é a página da Web familiar para postagem no wall do usuário como
oferecido pelo Facebook. O usuário pode ignorar, seguir em frente e
publicar a mensagem. Esse uso de conteúdo nativo e da Web juntos no
mesmo aplicativo remoto é um ótimo exemplo do poder dos aplicativos
híbridos.
Autorização para usuários
A Facebook Platform oferece suporte para autenticação do OAuth 2.0,
bem como suporte
para um esquema mais antigo de assinatura de autorização
customizada.
Você deve evitar usar o esquema de
autenticação ao gravar novos aplicativos, já que o suporte para esse
esquema mais antigo não estará disponível em um futuro próximo. Para
obter mais informações sobre o OAuth, consulte a especificação do
Protocolo OAuth 2.0 em Recursos.
O SDK do Facebook para Android junto com a Facebook Platform esconde a complexidade da autenticação do OAuth, como ilustrado na Figura 3.
Figura 3. O Protocolo OAuth 2.0 (IETF)
O SDK do Facebook para Android adota uma abordagem da Web remota para
autenticação, em vez de uma nativa. Observe que é possível que futuras
versões do SDK forneçam suporte do Android nativo para OAuth.
Para essa
abordagem, o SDK usa o diálogo de autenticação baseado na Web do
Facebook dentro de uma visualização na Web. Essa é uma abordagem
interessante por uma série de motivos:
- Ela reduz a complexidade da implementação de OAuth nativo no aplicativo.
- Tão importante quanto, ela ganha a confiança do usuário exibindo os
mesmos diálogos de permissão e de login familiares e padrão, como vemos
ao usar o Facebook em navegadores normais.
Uma desvantagem dessa abordagem é que ela pode, às vezes, parecer mais lenta do que uma implementação
nativa pura. Para isso, o SDK inclui uma abordagem alternativa de autenticação/login
que usa a conexão única do aplicativo nativo do Facebook.
Isto é, se o aplicativo nativo
oficial do Facebook for instalado em um telefone portátil, o SDK do Facebook para
Android pode usar sua atividade de autorização/login.
Mas, para fazer esse trabalho, você deve
primeiro inscrever seu aplicativo (consulte o artigo de Frank Ableson, “Introduction to Android
Security” em Recursos), depois gerar uma assinatura ou hash de
chave (consulte Lista 11).
Lista 11. Geração do hash de chave do aplicativo
keytool -exportcert -alias [alias] -keystore [keystore] | openssl sha1 -binary |
openssl base64
Observe que o código
na Lista 11 normalmente aparece em uma
única linha. Ele é dividido em diversas linhas para fins de formatação.
Você deve, então, registrar o hash de chave gerado no Facebook para seu aplicativo
particular na seção de remotos e dispositivos, como na Figura 4. (Veja uma versão
ampliada da Figura 4.)
Figura 4. Inserir o hash de chave do aplicativo
Depois de registrado, você deve definir um manipulador de resultados de atividade para o seu aplicativo;
implementar onActivityResult(…) no qual você deve chamar o método facebook.authorizeCallback(…) como na Lista 12.
Lista 12. Definição do manipulador de resultados de uma atividade
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
:
:
// ... Other onActivityResult steps per your app...
}
Observe que se o método de conexão única não é definido ou o
aplicativo nativo do Facebook não está presente, O SDK usará o método de
visualização na Web como padrão para autenticação/login. O restante do
artigo foca essa abordagem padrão.
Como mencionado anteriormente, por padrão, um aplicativo tem acesso a
todos os dados públicos do perfil do usuário. Para acessar dados
privados, o aplicativo deve solicitar e o usuário deve conceder ao
aplicativo permissões para fazer isso. As permissões para obter acesso a
dados privados são chamadas de permissões estendidas.
O método authorize() do SDK do Facebook para Android implementa
o fluxo User-Agent do OAuth 2.0 para recuperar um token de acesso para uso em solicitações subsequentes
de API.
O método inicia uma atividade (aplicativo nativo do Facebook, se presente e
configurado) ou um diálogo de visualização na Web para solicitar ao usuário credenciais
(autenticação) e permissões (autorização).
Lista 13. O método authorize
/**
* Authorize method that grants custom permissions.
*/
public void authorize(Activity activity, String[] permissions,
final DialogListener listener) {
:
:
}
Observe que para uma autenticação de conexão única funcionar adequadamente, você deve incluir uma chamada para o método authorizeCallback() em onActivityResult().
Lembre-se de Lista 8 como o item de menu de login chama o método authorize() com permissões.
A Lista 14 mostra como chamar o método authorize() com permissões para gravar conteúdo. Ele também possui permissões para gravar comentários e preferências (publish_stream), ler as alimentações do usuário, realizar procuras (read_stream) e dar às credenciais de acesso uma duração longa (offline_access). Não se esqueça de configurar o APP_ID.
Lista 14. Chamar o método authorize() com permissões
package com.myapp.facebook.android;
:
import com.facebook.android.*;
:
public static final String APP_ID = "13234...";
private static final String[] PERMISSIONS = new String[] {"publish_stream",
"read_stream", "offline_access"};
:
:
// Call the authorization method
mFacebook.authorize(
getContext(),
APP_ID,
mPermissions,
new MyLoginDialogListener());
:
:
// Asynchronous Callback when authorization completes
private final class MyLoginDialogListener implements com.facebook.android
.Facebook.DialogListener {
public void onComplete(Bundle values) {...} // here enable logout
public void onFacebookError(FacebookError error) {...}
public void onError(DialogError error) {...}
public void onCancel() {...}
}
O método authorize() chama internamente o método dialog() abordado anteriormente, mas, dessa vez, ele passa uma solicitação
de login para ação. Com a ajuda da Facebook Platform e suas implementações de
OAuth, o método authorize() também cuida
da solicitação de autenticação para o Facebook e retorna o
access_token que é usado por toda a sessão do Facebook e chamada de API:
https://graph.facebook.com/ID?access_token=….
Para obter mais detalhes sobre como a autenticação funciona, consulte a página Facebook Authentication
em Recursos. Chamar o método authorize() resulta nos diálogos baseados em visualização na Web na Figura 5.
Figura 5. As telas de autorização e permissões (visualização na Web)
Depois que o usuário faz o login, são solicitadas permissões (informações de e-mail ou telefone e
uma senha), como solicitado pelo aplicativo. O usuário pode permitir ou negar a
permissão para o aplicativo acessar o Facebook e realizar ações como acessar informações
básicas, postar no wall do usuário, acessar postagens em News Feed ou acessar dados do
usuário.
Solicitações de API do Facebook
A classe principal do Facebook implementa uma série de métodos request()
para chamadas para API REST antiga e API Graph. Além disso, o SDK
oferece classes auxiliares do wrapper para tornar as chamadas de
solicitação da API principal assíncronas.
Como exemplo de solicitação de API, você fará uma solicitação para
recuperar os amigos do usuário autenticado. Lembre-se da estrutura da
API Graph:
https://graph.facebook.com/ID/CONNECTION_TYPE
Lembre-se também do ID especial me, que é usado para identificar o usuário autenticado. O usuário se conectou em: https://graph.facebook.com/me/friends.
A Lista 15 mostra um fragmento da Lista 8 sobre como fazer a chamada do método request(). Neste exemplo, usamos o método AsyncFacebookRunner.request(…), que é um método auxiliar de wrapper para tornar o método de
solicitação subjacente assíncrono através da execução de seu próprio
encadeamento. Essa etapa é realizada para evitar o bloqueio do
encadeamento principal da UI.
Lista 15. Despacho de uma solicitação de forma assíncrona
// Get Friend's List
case R.id.getfriends: // Wall Post
// Get the authenticated user's friends
mSpinner.show();
mAsyncRunner.request("me/friends", new FriendsRequestListener());
break;
O retorno de chamada FriendsRequestListener onComplete(…) é chamado quando a solicitação para obter a lista de amigos acabar de
ser executada. Esse método analisa o JSON retornado pra a lista de
amigos. Observe que Lista 16 não mostra todos os métodos implementados.
Lista 16. Processamento da solicitação para obter amigos
/**
* FriendsRequestListener implements a request lister/callback
* for "get friends" requests
*/
public class FriendsRequestListener implements
com.facebook.android.AsyncFacebookRunner.RequestListener {
/**
* Called when the request to get friends has been completed.
* Retrieve and parse and display the JSON stream.
*/
public void onComplete(final String response) {
mSpinner.dismiss();
try {
// process the response here: executed in background thread
Log.d("Facebook-Example-Friends Request", "response.length(): " +
response.length());
Log.d("Facebook-Example-Friends Request", "Response: " + response);
final JSONObject json = new JSONObject(response);
JSONArray d = json.getJSONArray("data");
int l = (d != null ? d.length() : 0);
Log.d("Facebook-Example-Friends Request", "d.length(): " + l);
for (int i=0; i<l; i++) {
JSONObject o = d.getJSONObject(i);
String n = o.getString("name");
String id = o.getString("id");
Friend f = new Friend();
f.id = id;
f.name = n;
friends.add(f);
}
// Only the original owner thread can touch its views
SampleApp.this.runOnUiThread(new Runnable() {
public void run() {
friendsArrayAdapter = new FriendsArrayAdapter(
SampleApp.this, R.layout.rowlayout, friends);
listView.setAdapter(friendsArrayAdapter);
friendsArrayAdapter.notifyDataSetChanged();
}
});
} catch (JSONException e) {
Log.w("Facebook-Example", "JSON Error in response");
}
}
:
:
}
De acordo com seus requisitos de aplicativo, a resposta dos servidores
do Facebook,
que está em formato JSON, deve ser analisada e processada
apropriadamente. Você deve decidir exibir essas informações usando uma
visualização na Web ou uma visualização de lista como nesse SampleApp.
Figura 6. Exibição dos resultados
Conclusão
Neste artigo, você viu as APIs do Facebook. Você começou com uma visão
geral da Facebook Platform e suas APIs, seguido do SDK do Facebook para
Android e um aplicativo de amostra.
Com essas informações, agora você
possui um melhor entendimento das diferentes APIs do Facebook que estão
disponíveis e como começar a gravar aplicativos do Facebook para a
plataforma Android.
Download
Descrição | Nome | Tamanho | Método de download |
---|---|---|---|
Article source code | fbandroidsdk_sampleapp.zip | 124KB | HTTP |
Recursos
Aprender
- Página da Web remota do Facebook:
Aprenda como incorporar o Facebook em seu próprio aplicativo remoto
usando as mesmas APIs fornecidas para todos os Web sites, formatadas
para se ajustarem a um telefone celular. - Crie um aplicativo – Facebook Developers: Registre seu aplicativo do Facebook.
- Permissões estendidas – Facebook Developers:
Solicite permissões estendidas se seu aplicativo precisar acessar
outras partes do perfil do usuário que possam ser privadas, ou se seu
aplicativo precisar publicar conteúdo no Facebook em nome de um usuário. - A documentação oficial para o desenvolvedor do Facebook: Explore as poderosas APIs que permitem criar experiências sociais para orientar o crescimento e o compromisso em seu Web site.
- Autenticação do Facebook: Saiba mais sobre autenticação e autorização ao usar a plataforma do Facebook para desenvolver seus aplicativos.
- O Roteiro do Desenvolvedor do Facebook: Use esse roteiro para planejar mudanças que podem exigir alterações de código.
- Desenvolva aplicativos Android com Eclipse
(Frank Ableson, developerWorks, February 2008): The easiest way to
develop Android applications is to use Eclipse. Saiba tudo sobre esse
tópico no tutorial do developerWorks. - Introduction to Android development
(Frank Ableson, developerWorks, maio de 2009): Obtenha uma introdução à
plataforma Android e aprenda como codificar um aplicativo Android
básico. - Rede com Android (Frank Ableson, developerWorks, junho de 2009): Explore as capacidades de rede do Android.
- Trabalhando com XML no Android
(Michael Galpin, developerWorks, junho de 2009): Aprenda sobre as
diferentes opções para trabalhar com XML no Android e como usá-las para
construir seus próprios aplicativos Android. - Sob a superfície de aplicativos Web nativos para Android: Saiba mais sobre aplicativos híbridos no Android.
- Desbloqueando o Android (Frank Ableson, Manning Publications, 2010): Cubra todos os aspectos do desenvolvimento para Android neste livro.
- Mobile Design and Development
(Brian Fling, O’Reilly Media, 2009): Leia sobre orientações práticas,
padrões, técnicas e melhores práticas para construir produtos para
dispositivos remotos neste livro. - Documentação do SDK do Android : Obtenha as informações mais recentes na referência de API do Android.
- Documentation for the android.webkit package online: Find more information on setting up the WebView control.
- The Open Handset Alliance: Visite o patrocinador do Android.
- Mais artigos deste autor
(C. Enrique Ortiz, developerWorks, desde julho de 2004): Leia artigos
sobre Android, aplicativos remotos, serviços da Web e outras
tecnologias. - Área de XML do developerWorks: Obtenha os recursos necessários para melhorar suas qualificações na esfera de XML.
- Certificação XML da IBM: Descubra como se tornar um Desenvolvedor Certificado pela IBM em XML e tecnologias relacionadas.
- Biblioteca técnica de XML:
Consulte a zona de XML para obter uma ampla gama de artigos técnicos e
dicas, tutoriais, padrões e Redbooks da IBM. Leia também mais dicas de XML.
Obter produtos e tecnologias
- SDK do Facebook para Android (Atualmente um release Alpha): Trabalhe com essa biblioteca para integrar o Facebook ao seu aplicativo móvel do Android.
- A Facebook Platform: Aumente sua capacidade de construir aplicativos sociais no Facebook e na Web.
- A API REST antiga do Facebook
(A versão anterior da API Graph): Interaja com o Web site do Facebook
programaticamente através de solicitações simples de HTTP. - A API Graph do Facebook (A versão atual): Explore essa API principal da Facebook Platform.
- OAuth 2.0 Protocol specification (julho de 2010): Trabalhe com autenticação OAuth, suportada pela Facebook Platform.
- SDK do Android:
Faça o download do SDK, acesse a referência de API e obtenha as
notícias mais recentes do site oficial dos desenvolvedores do Android. A
versão 1.5 ou posterior funcionará. - O Android Open Source Project:
Encontre as informações de software livre e código de origem de que
precisa para construir um dispositivo compatível com o Android. - JDK 6 Update 21: Obtenha a Java Platform, Standard Edition.
- Eclipse: Obtenha o IDE mais recente do Eclipse.
- O SDK do Facebook para Android: Obtenha o release Alpha atual do SDK do Facebook para Android.
***
artigo publicado originalmente no developerWorks Brasil, por C. Henrique Ortiz
C. Enrique Ortiz é, há muito tempo, tecnólogo, desenvolvedor e autor para dispositivos remotos. Ele participa do blog About Mobility e é fundador do capítulo Austin do MobileMonday.