Facebook Graph API

  • Antworten:2
Christoph Huber
  • Forum-Beiträge: 5

11.01.2015, 10:03:56 via Website

Hallo,
evtl. hat mit der Facebook Graph API schon jemand von euch gearbeitet? Ich habe nämlich ein Problem damit, welches ich nicht nachvollziehen kann.

Von Facebook wird ein Graph API Explorer angeboten mit dem man die beliebigen Requests testen kann.

Ich testete im Graph API Explorer folgende Requests:
- me
- me/likes
- me/likes?fields=events
alle 3 funktionieren im Graph API Explorer ohne Probleme.

Führe ich dieselben requests jedoch in meiner Android app aus, funktioniert der letzte(me/likes?fields=events) nicht mehr und ich versteh nicht wieso.

Ich erhalte hier folgenden Fehler:
{Response: responseCode: 400, graphObject: null, error: {HttpStatus: 400, errorCode: 2500, errorType: OAuthException, errorMessage: An active access token must be used to query information about the current user.}, isFromCache:false}

Die Fehlermeldung sagt also, dass mein Access Token invalid sei, nur das stimmt nicht. Ich habe mir den Access Token ausgeben lassen und diesen debuged. Das Resultat war, dass der Access Token valide ist und alle benötigten Berechtigungen besitzt.

Was waren die einzelnen Schritte die ich bis jetzt gemacht habe:

  • Bei Facebook eine neue App angelegt und alle benötigten Informationen angegeben
  • FacebookSDK heruntergeladen und in meiner Android-App eingebunden
  • Kleine Testapp geschrieben die einen Facebook-LoginButton
    enthält und einen Request absetzen kann

Der Quellcode dazu:

private LoginButton loginBtn;
private TextView username;
private UiLifecycleHelper uiHelper;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    uiHelper = new UiLifecycleHelper(this, statusCallback);
    uiHelper.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    username = (TextView) findViewById(R.id.username);
    loginBtn = (LoginButton) findViewById(R.id.fb_login_button);
    loginBtn.setReadPermissions(Arrays.asList("user_likes"));
    loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
        public void onUserInfoFetched(GraphUser user) {
            if (user != null) {
                username.setText("You are currently logged in as "
                        + user.getName());
            } else {
                username.setText("You are not logged in.");
            }
        }
    });
}

private Session.StatusCallback statusCallback = new Session.StatusCallback() {
    public void call(Session session, SessionState state,
            Exception exception) {
        if (state.isOpened()) {
            Log.d("MainActivity", "Facebook session opened.");
        } else if (state.isClosed()) {
            Log.d("MainActivity", "Facebook session closed.");
        }
    }
};

@Override
public void onResume() {
    super.onResume();
    Session session = Session.getActiveSession();
    if (session != null && (session.isOpened() || session.isClosed())) {
        onSessionStateChange(session, session.getState(), null);
    }
    uiHelper.onResume();
}

private void onSessionStateChange(final Session session,
        SessionState state, Exception exception) {

    if (state.isOpened()) {
        // userInfoTextView.setVisibility(View.VISIBLE);
        String token = session.getAccessToken();
        Log.d("SESSION_TOKEN", token);
        new Request(session, "me/likes?fields=events", null, HttpMethod.GET,
                new Request.Callback() {
                    public void onCompleted(Response response) {
                        Log.i("INFO", response.toString());
                        // new
                        // GetResponses(userInfoTextView).execute(response);
                    }
                }).executeAsync();

    } else if (state.isClosed()) {
        // userInfoTextView.setVisibility(View.INVISIBLE);
    }
}

Habe ich irgendetwas vergessen weswegen es nicht funktionieren könnte?
Oder hat von euch irgendjemand einen Lösungsvorschlag? Ich verzweifle langsam :/

Oder hätte sogar jemand Zeit sich selber kurz eine solche Testapp zu bauen um zu sehen ob es bei ihm korrekt funktioniert?
Ich verstehe einfach nicht, wieso mit ein und demselben Access-Token die Abfragen im Graph API Explorer sowie als normaler http get request funktionieren jedoch in der Android app nicht.

— geändert am 25.01.2015, 09:43:36

Antworten
Daniel
  • Forum-Beiträge: 99

25.01.2015, 02:14:12 via App

braucht man nicht https, damit man ne facebook app betreiben kann?
anonsten habe ich mal ne zeit lang rumexperimentiert und war zum heulen facebooks graph api :D

Antworten
Christoph Huber
  • Forum-Beiträge: 5

25.01.2015, 09:52:26 via Website

ja facebook läuft nur über https aber was hat das damit zutun?

Hat es bei dir funktioniert?

Ich habe es jetzt einfach so gelöst, dass ich den http request einfach manuell absetze, also so(h_ttps wegen Spamschutz!) :

private static final String FACEBOOK_GRAPH_API_REQUEST_URL = "h_ttps://graph .facebook.com/me/likes?fields=events.limit(100)"
        + URLEncoder
                .encode("{cover,end_time,start_time,name, description,id}")
        + "&limit=1000&access_token=";

    String accessToken = Session.getActiveSession().getAccessToken();
    String requestString = FACEBOOK_GRAPH_API_REQUEST_URL+ accessToken;

diesen "requestString" kann ich ohne Probleme ausführen und ich bekomme das richtige Ergebnis, aber mit den von der Facebook-SDK vorgesehenen Methoden funktionierts eben nicht, zumindest bei mir nicht.

— geändert am 25.01.2015, 09:53:22

Antworten