Introdução às APIs do Facebook

Grave aplicativos do Facebook para a plataforma Android com o Facebook SDK para Android

É 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.

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

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 Recursos no final deste artigo.


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 (consulte Recursos ).

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 queOBJECT_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 (consulte Recursos ).


Introduçã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 (consulte Recursos ). 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
ClassesDescrição
AsyncFacebookRunnerUma classe auxiliar que implementa chamadas assíncronas da API do Facebook
DialogErrorUma classe que encapsula erro de diálogo
FacebookPrincipal classe do Facebook para interação com as APIs da Facebook Platform
FacebookErrorUma classe que encapsula um erro do Facebook
FbDialogUma classe que implementa uma visualização na Web para diálogos do Facebook
UtilUma 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 (consulte Recursos ).


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 (consulte Faça o Download para o código de origem).


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 de que você tem que configurar o atributo APP_ID emSampleApp.java para o client_id como fornecido pelo Facebook (consulte Lista 1).

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 e itens de menu para conectar/autenticar o usuário, obter uma lista de amigos e postar no wall do usuário autenticado (me). 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>

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 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>

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
Screen capture of the pre-login and post-login screen layouts in the 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 (consulte Lista 5).

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 1) login/logout (alternância), 2) get friends, e 3) 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. 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;
}

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);
}

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 (consulte Lista 9).

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, e 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 (consulte a Lista 10).

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
Screen capture of posting to the wall dialog

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)
Diagram of the OAuth 2.0 Protocol (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
Screen capture of Key hash field)

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), consulte Lista 13).

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.

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 oAPP_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)
Screen capture of WebView-based dialogs

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.

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 (consulte Figura 6).

Figura 6. Exibição dos resultados
Screen capture of a list of names and IDs displayed as results

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çãoNomeTamanho
Article source codefbandroidsdk_sampleapp.zip124KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre, Segmentos de mercado
ArticleID=630815
ArticleTitle=Introdução às APIs do Facebook
publish-date=12142010