Le SDK Android prend en charge l’intégration avec l’API Graph de Facebook. Avec les classes GraphRequest
et GraphResponse
, vous pouvez envoyer des requêtes et obtenir des réponses au format JSON de façon asynchrone. Vous pouvez également envoyer des requêtes par lot avec une boucle unique vers les serveurs Facebook à l’aide de GraphRequestBatch
.
Apprenez-en davantage sur l’API Graph dans :
Consultez également les références concernant GraphRequest
, GraphResponse
et GraphRequestBatch
pour découvrir comment utiliser le SDK Facebook pour Android et pour appeler l’API Graph dans d’autres situations.
Avant de commencer, configurez :
GraphRequest
La classe GraphRequest
présente une méthode newMeRequest
qui appelle le point de terminaison /utilisateur/moi pour récupérer les données de l’utilisateur pour le token d’accès donné.
Le SDK Android envoie toutes les autorisations de votre app dans access_token
et l’accès aux données est ainsi contrôlé. Si votre app n’a pas de token d’accès disponible, l’API Graph renvoie uniquement les informations accessibles au grand public. Pour plus de détails sur les propriétés et les autorisations de User
, consultez Référence concernant l’API Graph, User
.
Par défaut, une méthode newMeRequest
récupère les champs par défaut depuis un objet utilisateur. Si vous avez besoin de champs supplémentaires ou si vous souhaitez réduire la charge utile des réponses pour des raisons de performance, vous pouvez ajouter un paramètre fields
et demander des champs particuliers :
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();
Dans la méthode de rappel, les données de réponse sont désérialisées en JSONObject
lorsque la demande a bien été envoyée. Les champs qui ne peuvent pas être récupérés en raison d’autorisations manquantes ne figureront pas dans le résultat.
Pour l’utilisateur connecté, le SDK a des classes Profile
et ProfileTracker
. Consultez Facebook Login pour Android.
Les données auxquelles vous accédez dépendent des autorisations qu’une personne accorde à votre app et aux données qu’elle choisit de partager avec les apps. Voici un exemple de réponse brute de l’API Graph pour user_location
et 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 }
En fonction du point de terminaison que vous appelez, vous recevez soit JSONObject
, soit JSONArray
.
Les appels d’objet unique, tels que newMeRequest
, renvoient JSONObject
. Les appels pour plusieurs résultats, tels que newMyFriendsRequest
, renvoient JSONArray
.
Vous pouvez vérifier le champ d’erreur sur un objet GraphResponse
pour voir si une requête a échoué ou non. Le champ d’erreur est de type FacebookRequestError
. Les méthodes que vous pouvez appeler sont :
L’objet d’erreur possède des champs qui expliquent les détails de l’erreur, notamment :
error code
;sub error code
;error message
;user facing error message
;Pour plus de détails sur les codes d’erreur possibles, consultez Utilisation de l’API Graph, Gestion des erreurs.
L’objet GraphResponse
possède également enum
, qui catégorise les erreurs. Les trois catégories possibles sont :
LOGIN_RECOVERABLE
: un problème nécessite que l’utilisateur se connecte à nouveau. Vous pouvez appeler LoginManager
de resolveError
avec l’objet GraphResponse
et l’activité ou le fragment depuis votre app. Cela déclenche l’interface utilisateur Facebook Login et vous devez implémenter CallbackManager
par le fragment ou l’activité d’appel pour que la connexion aboutisse.TRANSIENT
: indique qu’un problème temporaire est survenu et que votre app peut essayer d’envoyer à nouveau la requête.OTHER
: indique qu’un problème général est survenu. Vous pouvez obtenir plus de détails en vérifiant error code
et sub error code
.Si vous rencontrez des problèmes pour récupérer les données de l’utilisateur, activez la consignation des requêtes HTTP en ajoutant ce code avant que votre app ne demande les données de l’utilisateur :
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
Cela permettra de consigner les détails de vos requêtes et réponse HTTP dans le journal de la console.
Nous vous conseillons d’envoyer des requêtes par lot pour les données si votre app gère les types de scénarios suivants :
Si vous souhaitez réduire la quantité des boucles vers le serveur, vous pouvez utiliser une requête par lot. Par exemple, nous récupérons un utilisateur et ses amis :
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();
L’exemple ci-dessus montre la requête par lot en tant qu’appel asynchrone. Si ce code se trouve sur un thread d’arrière-plan et que vous souhaitez le bloquer jusqu’à ce que l’appel se termine, vous pouvez appeler batch.executeAndWait()
.
User
– Référence de l’utilisateur concernant l’API GraphGraphRequestBatch
– Référence concernant GraphRequestBatch
GraphRequest
– Référence concernant GraphRequest