2013-06-09 5 views
8

Ich versuche, auf das Facebook SDK 3.0 zu aktualisieren und habe endlich alles mit Request.newStatusUpdateRequest() zu arbeiten. Meine App teilt jedoch Text mit einem Link. Ich habe versucht,/sah in den folgenden:Teilen Link und Text mit Android Facebook SDK 3.0

Request.newStatusUpdateRequest() 

Dies keine Optionen für ein Bundle oder jede andere Art und Weise zu haben scheint einen Link und Symbol aufzunehmen.

Request.newRestRequest() 

Übersprungen dies, weil ich sah REST wurde abgeschrieben.

new WebDialog.FeedDialogBuilder(_activity, session, params).build().show(); 

Das funktioniert eigentlich ziemlich gut, aber der daraus resultierende Beitrag scheint nicht zu meinem Facebook-App verknüpft werden, und ich bin nicht sicher, wie dies meine Facebook Erkenntnisse bewirken wird.

Von dem, was ich gelesen habe, scheint diese Methode der richtige Weg zu sein. Allerdings kann ich nicht herausfinden, wo das GraphObject als einer der Parameter übergeben werden soll.

Was ist die PROPPER Weg, um Text, Link und Bild an die Wand des Benutzers zu senden/teilen? Es scheint, Request.newPostRequest() zu sein, also werde ich den Code einschließen, den ich dafür habe.

Request request = Request.newPostRequest(session, "me/feed", ??graph_object??, new Request.Callback() { 
    @Override 
    public void onCompleted(Response response) { 
     showPublishResult("message", response.getGraphObject(), response.getError()); 
    } 
}); 
request.setParameters(params); 
Request.executeBatchAsync(request); 

Aber was ist wirklich ein GraphObject? Woher bekomme ich das graph_object? Je mehr ich von der FB auf GraphObject/OpenGraph/Graph API lese, desto mehr verwirrt mich.

Wenn ich in die falsche Richtung gehe, bitte sag es mir. Wenn Request.newPostRequest der geeignete Weg ist, um dies zu tun, geben Sie mir bitte weitere Informationen zum GraphObject-Parameter.

Antwort

15

es endlich geschafft, alles, was ich mit dem Facebook-SDK 3.0 mit dem folgenden zu erhalten benötigt:

Bundle params = new Bundle(); 
params.putString("caption", "caption"); 
params.putString("message", "message"); 
params.putString("link", "link_url"); 
params.putString("picture", "picture_url"); 

Request request = new Request(Session.getActiveSession(), "me/feed", params, HttpMethod.POST); 
request.setCallback(new Request.Callback() { 
    @Override 
    public void onCompleted(Response response) { 
     if (response.getError() == null) { 
      // Tell the user success! 
     } 
    } 
}); 
request.executeAsync(); 
+0

Ich habe die gleiche Frage. Die Verwendung einer 'vanilla'-Anfrage im Gegensatz zur Verwendung eines newPostRequest (.. openGraphObject ..) erscheint mir auch ein bisschen brutal, aber je mehr ich schaue, desto mehr komme ich zu dem Schluss, dass die meisten Leute nur das tun, was Sie geschrieben haben über. – JRun

+0

gibt Kompilierungsfehler: Der Konstruktor Request (Sitzung, String, Bundle, HttpMethod) ist nicht definiert – kgandroid

+0

Die Request-Klasse kann nicht mehr zugegriffen werden. Sie legen es jetzt in ein privates Paket. – rafid059

4

ich mit dieser Methode haben. Sehen Sie, ob dies helfen kann oder nicht.

public static void publishFeedDialog(final Activity current, final String title, 
     final String caption, final String description, final String link, 
     final String pictureUrl) { 
    // start Facebook Login 
    Session.openActiveSession(current, true, new Session.StatusCallback() { 

     // callback when session changes state 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      if (session.isOpened()) { 
       Bundle params = new Bundle(); 
       params.putString("name", title); 
       params.putString("caption", caption); 
       params.putString("description", description); 
       params.putString("link", link); 
       params.putString("picture", pictureUrl); 

       WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(
         current, Session.getActiveSession(), params)) 
         .setOnCompleteListener(new OnCompleteListener() { 

          @Override 
          public void onComplete(Bundle values, 
            FacebookException error) { 
           if (error == null) { 
            // When the story is posted, echo the 
            // success 
            // and the post Id. 
            final String postId = values 
              .getString("post_id"); 
            if (postId != null) { 
             ToastHelper.MakeShortText("Posted"); 
            } else { 
             // User clicked the Cancel button 
             ToastHelper 
               .MakeShortText("Publish cancelled"); 
            } 
           } else if (error instanceof FacebookOperationCanceledException) { 
            // User clicked the "x" button 
            ToastHelper 
              .MakeShortText("Publish cancelled"); 
           } else { 
            // Generic, ex: network error 
            ToastHelper 
              .MakeShortText("Error posting story"); 
           } 
          } 

         }).build(); 
       feedDialog.show(); 
      } 
     } 
    }); 
1

Zur Seite oder Link teilen

Bundle params = new Bundle(); 
params.putString("link", "link_url"); 


Request request = new Request(Session.getActiveSession(), "me/feed", params, HttpMethod.POST); 
request.setCallback(new Request.Callback() { 
    @Override 
    public void onCompleted(Response response) { 
     if (response.getError() == null) { 
      // Tell the user success! 
     } 
    } 
}); 
request.executeAsync(); 

Weitere Post-Parameter siehe me/feed on developer.facebook.com