O SDK do Android é compatível com a integração com a API de Gráfico do Facebook. Com as classes GraphRequest
e GraphResponse
, você pode fazer solicitações e obter respostas em JSON de forma assíncrona. Também é possível fazer solicitações em lote com uma única ida e volta aos servidores do Facebook com GraphRequestBatch
.
Saiba mais sobre a API de Gráfico em:
Veja também as referências GraphRequest
, GraphResponse
e GraphRequestBatch
para saber como usar o SDK do Facebook para Android e como fazer chamadas da API de Gráfico para casos de uso adicionais.
Antes de começar, configure:
GraphRequest
A classe GraphRequest
tem um método newMeRequest
, que chama o endpoint /usuário/eu para buscar dados do usuário para o token de acesso específico.
O SDK do Android envia permissões que o aplicativo tem no access_token
, e isso controla o acesso aos dados. Se o aplicativo não tiver um token de acesso disponível, a API de Gráfico retornará apenas as informações publicamente disponíveis. Para obter detalhes sobre as propriedades e as permissões do User
, confira Referência da API de Gráfico, User
.
Por padrão, um método do newMeRequest
busca campos padrão de um objeto de usuário. Se você precisar de algum campo adicional ou quiser reduzir a carga de resposta por motivos de desempenho, adicione um parâmetro fields
e solicite campos específicos:
GraphRequest request = GraphRequest.newMeRequest( accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject object, GraphResponse response) { // Application code } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link"); request.setParameters(parameters); request.executeAsync();
No método de retorno de chamada, os dados de resposta são desserializados em um JSONObject
se a solicitação for bem-sucedida. Serão omitidos do resultado os campos que não puderem ser buscados devido à falta de permissões.
Para o usuário logado, o SDK tem as classes Profile
e ProfileTracker
, confira Login no Facebook para Android.
Os dados que você acessar dependem das permissões que alguém concede ao aplicativo e dos dados que eles escolheram compartilhar com aplicativos. Aqui está um exemplo de resposta bruta da API de Gráfico para user_location
e user_birthday
:
{ "id": "12345678", "birthday": "1/1/1950", "first_name": "Chris", "gender": "male", "last_name": "Colm", "link": "http://www.facebook.com/12345678", "location": { "id": "110843418940484", "name": "Seattle, Washington" }, "locale": "en_US", "name": "Chris Colm", "timezone": -8, "updated_time": "2010-01-01T16:40:43+0000", "verified": true }
Dependendo do endpoint chamado, você receberá um JSONObject
ou JSONArray
.
Chamadas de objeto único, como newMeRequest
, retornam um JSONObject
. Chamadas de vários resultados, como newMyFriendsRequest
, retornam um JSONArray
.
Você pode examinar o campo de erro em um objeto GraphResponse
para ver se uma solicitação falha ou não. O campo de erro é do tipo FacebookRequestError
. Os métodos que você pode chamar são:
O objeto de erro tem campos que explicam detalhes sobre o erro, incluindo:
error code
,sub error code
error message
user facing error message
Para mais detalhes sobre possíveis códigos de erro, confira Como usar a API de Gráfico, Como lidar com erros.
O objeto GraphResponse
também tem um enum
que categoriza o erro. As três categorizações possíveis são:
LOGIN_RECOVERABLE
- Há um problema exigindo que o usuário faça login novamente. Você chama o LoginManager
do resolveError
com o objeto GraphResponse
e a atividade ou o fragmento do aplicativo do seu aplicativo. Isso abre a interface do usuário de Login no Facebook, e você precisa implementar um CallbackManager
chamando o fragmento ou a atividade para o login ser realizado.TRANSIENT
- Indica que ocorreu um problema temporário, e seu aplicativo pode repetir a solicitação.OTHER
- Indica que ocorreu um problema geral, e que você pode obter mais detalhes verificando o error code
e o sub error code
.Se você tiver problemas para buscar dados de usuário, ative o registro em log de solicitação HTTP adicionando este código antes de o aplicativo solicitar dados de usuário:
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
Isso registrará os detalhes sobre as solicitações HTTP e a resposta ao registro do console.
Você deverá fazer solicitações em lote para dados se o aplicativo lidar com os seguintes tipos de situações:
Se você quiser reduzir a quantidade de idas e voltas ao servidor, use uma solicitação em lote. Por exemplo, podemos buscar um usuário e seus amigos:
GraphRequestBatch batch = new GraphRequestBatch( GraphRequest.newMeRequest( access_token, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted( JSONObject jsonObject, GraphResponse response) { // Application code for user } }), GraphRequest.newMyFriendsRequest( access_token, new GraphRequest.GraphJSONArrayCallback() { @Override public void onCompleted( JSONArray jsonArray, GraphResponse response) { // Application code for users friends } }) ); batch.addCallback(new GraphRequestBatch.Callback() { @Override public void onBatchCompleted(GraphRequestBatch graphRequests) { // Application code for when the batch finishes } }); batch.executeAsync();
O exemplo acima mostra a solicitação em lote como uma chamada assíncrona. Se este código estiver em um segmento de segundo plano e você quiser bloquear até a conclusão da chamada, pode chamar batch.executeAndWait()
.
User
- Referência do Usuário da API de GráficoGraphRequestBatch
- Referência para GraphRequestBatch
GraphRequest
- Referência para GraphRequest