2013-06-09 31 views
8

Tôi đang cố gắng nâng cấp lên Facebook SDK 3.0 và cuối cùng đã nhận được mọi thứ để làm việc với Request.newStatusUpdateRequest(). Tuy nhiên ứng dụng của tôi chia sẻ/đăng bài cùng với một liên kết. Tôi đã thử/xem xét những điều sau đây:Chia sẻ liên kết và văn bản với Android Facebook SDK 3.0

Request.newStatusUpdateRequest() 

Điều này dường như không có bất kỳ tùy chọn nào cho Gói hoặc bất kỳ cách nào khác để bao gồm liên kết và biểu tượng.

Request.newRestRequest() 

Bỏ qua điều này vì tôi thấy REST đã bị khấu hao.

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

Điều này thực sự hoạt động khá tốt nhưng bài đăng kết quả dường như không được liên kết với Ứng dụng Facebook của tôi và tôi không biết điều này sẽ ảnh hưởng đến thông tin chi tiết trên Facebook của tôi như thế nào.

Request.newPostRequest() 

Từ những gì tôi đã đọc, phương pháp này có vẻ là cách phù hợp. Tuy nhiên, tôi không thể tìm ra nơi để có được GraphObject để vượt qua như là một trong các tham số.

Cách PROPPER để đăng/chia sẻ văn bản, liên kết và hình ảnh lên tường của người dùng là gì? Nó có vẻ là Request.newPostRequest() vì vậy tôi sẽ bao gồm mã tôi có cho điều đó.

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); 

Nhưng thực sự GraphObject là gì? Tôi lấy graph_object ở đâu? Tôi càng đọc từ FB trên GraphObject/OpenGraph/Graph API càng bị lẫn lộn.

Nếu tôi đi sai hướng hoàn toàn, vui lòng cho tôi biết. Nếu Request.newPostRequest là cách propper làm điều này, hãy cho tôi biết thêm thông tin về tham số GraphObject.

Trả lời

15

Cuối cùng quản lý để có được tất cả những gì cần thiết với Facebook SDK 3.0 sử dụng như sau:

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

Tôi có cùng một câu hỏi. Sử dụng một yêu cầu 'vanilla' như trái ngược với việc sử dụng newPostRequest (.. openGraphObject ..) có vẻ hơi thô bạo với tôi, nhưng càng nhìn tôi càng nhận được kết luận rằng hầu hết mọi người chỉ làm những gì bạn đã viết ở trên. – JRun

+0

cho lỗi biên dịch: Yêu cầu hàm tạo (Session, String, Bundle, HttpMethod) là không xác định – kgandroid

+0

Lớp Request không thể được truy cập nữa. Họ đặt nó vào một gói riêng tư ngay bây giờ. – rafid059

4

tôi đã làm bằng cách sử dụng phương pháp này. Xem liệu điều này có thể giúp ích hay không.

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

Để chia sẻ trang hoặc liên kết

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(); 

Đối với bài nhiều tham số thấy me/feed on developer.facebook.com

Các vấn đề liên quan