L'SDK per Android supporta l'integrazione con l'API Graph di Facebook. Con le classi GraphRequest
e GraphResponse
, puoi fare richieste e ottenere risposte in JSON in modo asincrono. Puoi inoltre fare richieste batch con un singolo round-trip ai server di Facebook con GraphRequestBatch
.
Scopri di più sull'API Graph in:
Vedi anche i riferimenti di GraphRequest
, GraphResponse
e GraphRequestBatch
per imparare a usare l'SDK di Facebook per Android ed effettuare chiamate all'API Graph per altri casi d'uso.
Prima di iniziare, imposta:
GraphRequest
La classe GraphRequest
ha un metodo newMeRequest
che chiama l'endpoint /user/me per acquisire i dati utenti per il token d'accesso in questione.
L'SDK per Android invia tutte le autorizzazioni di cui dispone la tua app nel token access_token
che controlla l'accesso ai dati. Se la tua app non ha un token d'accesso disponibile, l'API Graph restituisce solo le informazioni disponibili pubblicamente. Per i dettagli su proprietà e autorizzazioni User
, vedi Riferimento dell'API Graph, User
.
Come impostazione predefinita, un metodo newMeRequest
acquisisce campi predefiniti da un oggetto utente. Se hai bisogno di campi aggiuntivi o desideri ridurre il payload di risposta a causa delle prestazioni, puoi aggiungere un parametro fields
e richiedere campi specifici:
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();
Nel metodo callback, i dati di risposta sono deserializzati in un JSONObject
se la richiesta è corretta. I campi che non possono essere acquisiti a causa di autorizzazioni mancanti saranno omessi dal risultato.
Per l'utente che ha effettuato l'accesso, l'SDK dispone delle classi Profile
e ProfileTracker
, vedi Facebook Login per Android.
I dati a cui accedi dipendono dalle autorizzazioni che qualcuno concede alla tua app e i dati che sceglie di condividere con le app. Ecco un esempio di risposta dell'API Graph non elaborata per 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 }
In base all'endpoint che chiami, puoi ricevere un JSONObject
o un JSONArray
.
Le chiamate di un singolo oggetto come newMeRequest
restituiscono un JSONObject
. Chiamate di più risultati come newMyFriendsRequest
restituiscono un JSONArray
.
Puoi esaminare il campo di errore su un oggetto GraphResponse
per vedere se una richiesta riesce o meno. Il campo di errore è di tipo FacebookRequestError
. I metodi che puoi chiamare sono:
L'oggetto errore dispone di campi che spiegano i dettagli tra cui:
error code
;sub error code
error message
user facing error message
Per maggiori dettagli sui possibili codici di errore, vedi Uso dell'API Graph, Gestione degli errori.
L'oggetto GraphResponse
dispone anche di un enum
che categorizza l'errore. Le tre categorizzazioni possibili sono:
LOGIN_RECOVERABLE
: problema che richiede all'utente di effettuare nuovamente l'accesso. Puoi chiamare il LoginManager
del resolveError
con l'oggetto GraphResponse
e l'attività o il frammento dalla tua app. Questo attiva l'interfaccia utente di Facebook Login, quindi devi implementare un CallbackManager
tramite il frammento o l'attività che hai chiamato per fare in modo che l'accesso vada a buon fine.TRANSIENT
: indica che si è verificato un problema temporaneo e la tua app può riprovare la richiesta.OTHER
: indica che si è verificato un problema generale e puoi ottenere maggiori dettagli esaminando l'error code
e il sub error code
.Se riscontri problemi nell'acquisizione dei dati degli utenti, abilita la registrazione della richiesta HTTP aggiungendo questo codice prima che l'app richieda i dati degli utenti:
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
Verranno registrati i dettagli su richieste HTTP e risposte al registro della console.
Devi eseguire richieste batch di dati se la tua app gestisce questi tipi di scenari:
Se vuoi ridurre la quantità di round-trip dei server, puoi usare una richiesta batch. Ad esempio acquisiamo un utente e i suoi amici:
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'esempio sopra riportato mostra la richiesta batch come chiamata asincrona. Se questo codice è su un thread in background e vorresti bloccarlo fino al termine della chiamata, puoi chiamare batch.executeAndWait()
.
User
- Riferimento utente dell'API GraphGraphRequestBatch
- Riferimento per GraphRequestBatch
GraphRequest
- Riferimento per GraphRequest