1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Wie rufe ich Facebook Legacy API von Android

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von sem_thesis, 09.05.2011.

  1. sem_thesis, 09.05.2011 #1
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Hallo!


    Ich habe Facebook SDK auf Android installiert und auch schon ein paar Userdaten vom Graph API gesammelt.

    Nun möchte ich die Methode friends.getMutualFriends des Legacy API's (Link) verwenden, um die gemeinsamen Freunde zweier FB-User zu bestimmen.

    Dazu habe ich mir das Android-Tutorial auf FB Docs (Link) angeschaut.

    Dort steht Folgendes:
    Das Graph API konnte ich wie erwähnt erfolgreich aufrufen.
    Code:
    public static final APP_ID = "asdfasdf";
    mFacebook = new Facebook(APP_ID);
    mAsyncRunner = new AsyncFacebookRunner(mFacebook);
    mAsyncRunner.request("me", new IDRequestListener());
    
    Bei dem Aufruf Legacy-API scheitert das Ganze:
    Code:
    //call the Legacy REST API method friends.getMutualFriends
    Bundle parameters = new Bundle();
    parameters.putString("friends.getMutualFriends", "auth.expireSession");
    String response = request(parameters); 
    
    Eclipse gibt die Fehlermeldung:

    Ich verstehe nicht, was hier falsch läuft??

    Ausserdem: Wie kann ich für die friends.getMutualFriends-Methode Parameter wie targetid und sourceid angeben?
     
  2. Kranki, 10.05.2011 #2
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
  3. sem_thesis, 10.05.2011 #3
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Du meinst diesen hier?
    Der Graph API unterstützt die friends.getMutualFriends-Funktion noch nicht :-(
    Jah - vielleicht ist's nicht so sinnvoll, aber meine App wird später (von einer anderen Person) auch updated. Sie soll aber mit den jetzt vorhandenen Mitteln (Legacy API) funktionieren können.
     
  4. Kranki, 10.05.2011 #4
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    Nein, den darunter. (OK, dann ist das halt der zweite Absatz.)
     
  5. sem_thesis, 10.05.2011 #5
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Ok, das habe ich vorhin gelesen.
    Aber ich habe keine Ahnung wie das in Android realisierbar ist.

    HTTP requests?
    Wie baue ich mein access_token im HTTP Request hinein??
     
  6. Kranki, 10.05.2011 #6
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
  7. sem_thesis, 14.05.2011 #7
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One

    Danke!
    Jetzt habe ich mal deinen Tutorial befolgt.
    Damit will ich nun (für den Moment) das Resultat der GET-Abfrage anzeigen lassen.
    Der Code für die Webservice-Bearbeitung sieht nun folgendermassen aus:


    Code:
    public class WebService    {  
          
        //Bezeichnung der Klasse   
        private final String TAG = "WebService";  
        
        // globale Variable
        HttpClient httpClient;
          
        
        public void getJSONObject(String url)    {  
          
            httpClient = new DefaultHttpClient();  
            HttpGet httpGet = new HttpGet(url);  
            HttpResponse response;  
          
            try {  
                response = httpClient.execute(httpGet);  
          
                // TODO: HTTP-Status (z.B. 404) in eigener Anwendung verarbeiten.  
          
                Log.i(TAG,response.getStatusLine().toString());  
          
                HttpEntity entity = response.getEntity();  
          
                
                if (entity != null) {  
          
                    InputStream instream = entity.getContent();  
                    BufferedReader reader = new BufferedReader(new InputStreamReader(instream));  
                    StringBuilder sb = new StringBuilder();  
          
                    String line = null;  
                    while ((line = reader.readLine()) != null)    {
                        sb.append(line + "n"); 
                    }
                              
                    String result=sb.toString(); 
                    Log.i(TAG,result);
                    
                }
                
                
            }    catch (ClientProtocolException e) {  
                    e.printStackTrace();  
            }    catch (IOException e) {  
                    e.printStackTrace();  
               }    catch (Exception e){  
                    e.printStackTrace();  
               }    finally    {  
                    httpGet.abort();  
               }  
               
        }
        
        
        
        public void postJSONObject(String url, JSONObject data, String objectName)    {  
    
            HttpPost postMethod = new HttpPost(url);  
          
            try    {  
                HttpParams params = new BasicHttpParams();  
                params.setParameter(objectName, data.toString());  
          
                postMethod.setParams(params);  
                httpClient.execute(postMethod);  
                Log.i(TAG, "Post request, data: " + params.toString());  
          
            }    catch (ClientProtocolException e)    {  
                e.printStackTrace();  
            }    catch (IOException e)    {  
                e.printStackTrace();  
            }    catch (Exception e)    {  
                e.printStackTrace();        
            }    finally    {  
                postMethod.abort();  
            }
            
        }
        
            
    }
    
    Soweit, so gut.

    Jetzt kommt der Aufruf in der Hauptklasse:

    Code:
    WebService s = new WebService();
    s.getJSONObject("https://api.facebook.com/method/friends.getMutualFriends?target_uid=504184526&access_token=oauth_access_token");
    
    Die URL habe ich von der folgenden Seite erstellt.
    Ich habe eine beliebige ID aus meiner Freundesliste genommen mit dem ich 2 gemeinsame Freunde habe.

    Nun wird, wie gewollt, die result variable geloggt.
    Sie hat folgenden Output:

    Ich verstehe nicht wieso der access_token nicht akzeptiert wird.
    Ist mein Funktionsaufruf falsch geraten???
     
  8. sem_thesis, 14.05.2011 #8
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Ich habe mir gerade das Facebook Framework für das Graph API angeschaut. Das Framework macht schon alles (token-bearbeitung, request, etc.). Man muss nur die AsyncFacebookRunner-Klasse aufrufen und ein request("url") mit der richtigen URL schicken.

    Kann ich dieses Framework nicht direkt auch für das Legacy API nutzen?
     

    Anhänge:

  9. sem_thesis, 18.05.2011 #9
    sem_thesis

    sem_thesis Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    111
    Erhaltene Danke:
    0
    Registriert seit:
    06.03.2011
    Phone:
    Nexus One
    Es kann ja wohl nicht so schwer sein die alte Facebook API zu benutzen.

    Das Framework com_facebook_android macht das ja schon für die neue Graph API.


    Muss ich nun also
    a) ein neues HTTP-Request + HTTP-Get + Tokenverarbeitung Framework erstellen
    oder
    b) kann ich einfach meine HTTP-Requests insr alte Framework einbauen
    oder
    c) brauche ich gar kein Framework und kann einfach 2-3 Zeilen HTTP-Request-Code einbauen?



    Ich steh' da echt auf dem Schlauch.
    Was soll das ganze Facebook-Zeug? Es isch so schlecht dokumentiert...
     

Diese Seite empfehlen