Das Android-SDK unterstützt die Integration in Facebook Graph API. Mit den Klassen GraphRequest
und GraphResponse
kannst du asynchron in JSON Anfragen senden und Antworten abrufen. Mit GraphRequestBatch
kannst du zudem Batch-Anfragen mit einem einzelnen Round-Trip zu den Facebook-Servern tätigen.
Weitere Infos zur Graph API:
In den Referenzen zu GraphRequest
, GraphResponse
und GraphRequestBatch
erfährst du außerdem, wie du das Facebook-SDK für Android verwendest und Graph API-Aufrufe für weitere Anwendungsfälle tätigst.
Richte zunächst Folgendes ein:
GraphRequest
-KlasseDie GraphRequest
-Klasse umfasst eine newMeRequest
-Methode, die den Endpunkt /user/me aufruft, um die Nutzerdaten für den jeweiligen Zugriffsschlüssel abzurufen.
Das Android-SDK sendet alle Berechtigungen deiner App im access_token
, wodurch der Datenzugriff gesteuert wird. Wenn deine App keinen verfügbaren Zugriffsschlüssel aufweist, gibt Graph API nur öffentlich verfügbare Informationen zurück. Einzelheiten zu User
-Eigenschaften und -Berechtigungen findest du in der Graph API-Referenz, User
.
Standardmäßig ruft eine newMeRequest
-Methode Standardfelder aus einem Nutzerobjekt ab. Wenn du zusätzliche Felder benötigst oder die Payload der Antwort aus Performancegründen reduzieren möchtest, kannst du einen fields
-Parameter hinzufügen und spezielle Felder anfragen:
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();
In der Rückrufmethode werden die Antwortdaten in ein JSONObject
deserialisiert, wenn die Anfrage erfolgreich ist. Die Felder, die aufgrund fehlender Berechtigungen nicht abgerufen werden können, werden nicht in das Ergebnis aufgenommen.
Für den angemeldeten Nutzer verfügt das SDK über Profile
- und ProfileTracker
-Klassen (siehe Facebook Login für Android).
Die Daten, auf die du zugreifst, hängen von den Berechtigungen ab, die eine Person deiner App erteilt, sowie von den Daten, die sie mit Apps teilt. Hier findest du eine Beispiel-Graph API-Rohantwort für user_location
und 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 }
Je nach aufgerufenem Endpunkt erhältst du entweder ein JSONObject
oder ein JSONArray
.
Einzelobjektaufrufe, wie newMeRequest
, geben ein JSONObject
zurück. Aufrufe für mehrere Ergebnisse, wie newMyFriendsRequest
, geben ein JSONArray
zurück.
Du kannst das Fehlerfeld für ein GraphResponse
-Objekt untersuchen, um zu prüfen, ob eine Anfrage fehlschlägt oder nicht. Das Fehlerfeld hat den Typ FacebookRequestError
. Du kannst die folgenden Methoden aufrufen:
Das Fehlerobjekt weist Felder auf, die Details zum Fehler enthalten, wie:
error code
,sub error code
error message
user facing error message
Weitere Einzelheiten zu möglichen Fehlercodes findest du unter Verwenden der Graph API, Umgang mit Fehlern.
Das GraphResponse
-Objekt weist außerdem ein enum
-Element auf, das den Fehler kategorisiert. Die folgenden drei Kategorisierungen sind möglich:
LOGIN_RECOVERABLE
: Es liegt ein Problem vor, wegen dem der Nutzer sich erneut anmelden muss. Du kannst resolveError
von LoginManager
mit dem GraphResponse
-Objekt und der Aktivität oder dem Fragment aus deiner App aufrufen. Dadurch wird die Facebook Login-UI ausgelöst und du musst einen CallbackManager
vom aufrufenden Fragment oder von der aufrufenden Aktivität implementieren, damit der Login erfolgreich verläuft.TRANSIENT
: Gibt an, dass ein vorübergehendes Problem aufgetreten ist und deine App die Anfrage wiederholen kann.OTHER
: Gibt an, dass ein allgemeines Problem aufgetreten ist. Du findest weitere Details in error code
und sub error code
.Wenn Probleme beim Abrufen von Nutzerdaten auftreten, aktiviere die Protokollierung von HTTP-Anfragen, indem du diesen Code hinzufügst, bevor deine App Nutzerdaten anfragt:
FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);
Dadurch werden Details zu HTTP-Anfragen und -Antworten im Konsolenlog protokolliert.
Sende Batch-Anfragen für Daten, wenn deine App:
Wenn du Server-Round-Trips reduzieren möchtest, kannst du eine Batch-Anfrage verwenden. Beispiel: Wir rufen einen Nutzer und dessen Freunde ab:
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();
Das obige Beispiel zeigt die Batch-Anfrage als asynchronen Aufruf. Wenn dieser Code in einem Hintergrundthread ausgeführt wird und du ihn blockieren möchtest, bis der Aufruf beendet ist, kannst du batch.executeAndWait()
aufrufen.
User
– Graph API-NutzerreferenzGraphRequestBatch
– Referenz für GraphRequestBatch
GraphRequest
– Referenz für GraphRequest