Facebook sharer.php đã thay đổi để không còn chấp nhận các thông số chi tiết không?


103

Chúng tôi đã mở một cửa sổ bật lên chia sẻ (qua window.open) với URL như

https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE 

và cho đến một thời điểm nào đó không xác định trong tháng trước hoặc lâu hơn thì mọi thứ vẫn ổn.

Những gì đang xảy ra bây giờ là; hộp thoại bật lên xuất hiện và bao gồm chính xác Tiêu đề, Mô tả, Hình ảnh và URL được cung cấp bởi các tham số chuỗi truy vấn, nhưng khi bài đăng được gửi, kết quả bài đăng trên tường trên Facebook bị thiếu Tiêu đề, Mô tả và Hình ảnh, mặc dù nó vẫn liên kết đến đúng URL.

Có ai biết nếu có những thay đổi gần đây có thể đột ngột dừng hoạt động này không?

Bỏ trước một số câu trả lời phổ biến:

  • URL "sharer.php không được dùng nữa" - việc sử dụng dường như vẫn tiếp tục và có vẻ như sự đồng thuận là nó phần lớn được coi là vẫn tồn tại - tôi chưa thấy bất kỳ dấu hiệu cụ thể nào cho thấy nó nên đột nhiên ngừng hoạt động - có thể đã bỏ lỡ điều gì đó

  • "Sử dụng JavaScript SDK / các thẻ meta OG này" - không thể trong trường hợp cụ thể của tôi - chỉ cần tin tưởng tôi ... Tôi có thể giải thích nếu bạn THỰC SỰ muốn nhưng nó thực sự không liên quan.

  • "Sử dụng hộp thoại nguồn cấp dữ liệu" - không phù hợp do không hỗ trợ đăng có tệp đính kèm trên trang FB


Có một lỗi Facebook được ghi lại bởi người khác tại đây Develop.facebook.com/bugs/563991033677853, vì vậy tôi đề nghị bất kỳ ai khác gặp sự cố giúp gắn cờ điều này với FB bằng cách vào đó và xác nhận rằng bạn cũng gặp sự cố này.
tdous

CẬP NHẬT cho bất kỳ ai gặp phải vấn đề tương tự ... Những người khác đã báo cáo đây là lỗi cho Facebook không quá quan tâm đến việc cung cấp thông tin chi tiết trước hoặc phản hồi thông tin, vì vậy tôi đã gửi lại báo cáo lỗi mới và nó được giao cho một nhà phát triển. Chỉ chờ nghe tin tức từ FB. developers.facebook.com/x/bugs/357750474364812
tdous

4
Đáng buồn thay, câu trả lời được chấp nhận là đúng. Sau 3 tháng chờ đợi lỗi được "sửa", họ đã thay đổi hành vi được chấp nhận của sharer.php nên các thông số này không thể sử dụng được nữa.
tdous

Câu trả lời:


105

Facebook không còn hỗ trợ các thông số tùy chỉnh trong sharer.php

Người chia sẻ sẽ không chấp nhận các thông số tùy chỉnh nữa và facebook sẽ kéo thông tin đang được hiển thị trong bản xem trước giống như cách nó xuất hiện trên facebook dưới dạng một bài đăng từ các thẻ meta url OG.

Sử dụng hộp thoại / nguồn cấp dữ liệu thay vì sharer.php

https://www.facebook.com/dialog/feed?
  app_id=145634995501895
  &display=popup&caption=An%20example%20caption 
  &link=https%3A%2F%2Fdevelopers.facebook.com%2Fdocs%2Fdialogs%2F
  &redirect_uri=https://developers.facebook.com/tools/explorer

Câu trả lời chính thức từ nhóm fb


1
Đánh bại tôi để trả lời câu hỏi của riêng tôi;)
tdous

32
nhưng bạn cần một id ứng dụng trong trường hợp này. Nếu đó chỉ là một trang web thì sao?
Đức Capuano

3
Từ Facebook: Hộp thoại Nguồn cấp dữ liệu cho web đã không còn được dùng trong phiên bản API 2.0. Trên web, các nhà phát triển được khuyến khích sử dụng Hộp thoại Chia sẻ hiện đại hơn, có thể thực hiện tất cả các chức năng giống như các hộp thoại cũ hơn này, nhưng cũng có thể xuất bản các câu chuyện Open Graph tùy chỉnh mà không yêu cầu Đăng nhập Facebook. developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails

Nếu có thể, tôi sẽ đề xuất sử dụng SDK Facebook với JavaScript. Nó dễ dàng hơn để viết mã và tôi sẽ coi nó ít kén chọn hơn nhiều so với việc sử dụng biểu mẫu liên kết ở trên. Hãy xem tại: Developers.facebook.com/docs/sharing/web
LiquidDrummer

12
@LiquidDrummer toàn bộ điểm của việc sử dụng các loại URL này là bạn không cần phải sử dụng SDK . Nó thêm một lượt truy cập hiệu suất không cần thiết vào trang của bạn, giúp FB xâm phạm quyền riêng tư của mọi người và không đơn giản hơn một <a>thẻ hoặc open()cuộc gọi thông thường.
Walf

98

Bắt đầu từ ngày 18 tháng 7 năm 2017 Facebook đã quyết định bỏ qua các thông số tùy chỉnh do người dùng thiết lập. Lựa chọn này chặn nhiều khả năng được cung cấp bởi câu trả lời này và nó cũng phá vỡ các nút được sử dụng trên một số trang web.

Các tham số quotehashtaghoạt động kể từ tháng 12 năm 2018.


Có ai biết nếu có những thay đổi gần đây có thể đột ngột dừng hoạt động này không?

Các thông số đã thay đổi. Câu trả lời hiện được chấp nhận cho biết:

Facebook không còn hỗ trợ các thông số tùy chỉnh trong sharer.php

Nhưng điều này không hoàn toàn chính xác. Vâng, có thể họ không hỗ trợ hoặc xác nhận chúng, nhưng các thông số tùy chỉnh có thể được sử dụng nếu bạn biết tên chính xác. Bao gồm các:

  • URL (tất nhiên) → u
  • hình ảnh tùy chỉnh & rarr; picture
  • tiêu đề tùy chỉnh & rarr; title
  • báo giá tùy chỉnh & rarr; quote
  • mô tả tùy chỉnh & rarr; description
  • chú thích (hay còn gọi là tên trang web) → caption

Ví dụ: bạn có thể chia sẻ câu hỏi này bằng URL sau:

https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fstackoverflow.com%2Fq%2F20956229%2F1101509&picture=http%3A%2F%2Fwww.applezein.net%2Fwordpress%2Fwp-content%2Fuploads%2F2015%2F03%2Ffacebook-logo.jpg&title=A+nice+question+about+Facebook&quote=Does+anyone+know+if+there+have+been+recent+changes+which+could+have+suddenly+stopped+this+from+working%3F&description=Apparently%2C+the+accepted+answer+is+not+correct.

Thử nó!

Tôi đã xây dựng một công cụ giúp chia sẻ URL trên Facebook dễ dàng hơn với các thông số tùy chỉnh. Bạn có thể sử dụng nó để tạo sharer.phpliên kết của mình , chỉ cần nhấn nút và sao chép URL từ tab mở ra.


2
Cảm ơn rất nhiều, điều đó thật tuyệt!
Nightmare_82

1
@ TakácsZsolt Bạn không cần JS trên trang, bạn chỉ có thể tạo URL phía máy chủ trong CMS hoặc mã tùy chỉnh của mình và sau đó cung cấp cho người dùng một URL đơn giản. Nút chia sẻ chính thức là không tốt vì nó bao gồm hàng tấn KB mã JS và nó theo dõi người dùng. Ngoài ra, nếu bạn đang chia sẻ các URL của riêng mình, bạn nên phân phát các thẻ OpenGraph phù hợp thay vì dựa vào các thông số của người chia sẻ Facebook. :)
Andrea Lazzarotto

1
@Garavani, vâng bạn nói đúng. Như đã thảo luận về các nhận xét của công cụ, họ đã không chấp nhận các tham số và loại bỏ chúng.
Andrea Lazzarotto

4
Kể từ tháng 4 năm 2018, có vẻ như bất kỳ thông số nào khác uđều bị bỏ qua.
leo

1
Khác với ucác chỉ Parameter tôi thấy phản ánh làquote
robskrob

3

Sự cố của bạn là do OpenGraph thiếu điểm đánh dấu, như bạn nói không thể do bạn triển khai vì lý do nào đó.

Đối với bạn, giải pháp duy nhất là sử dụng API Facebook PHP .

  1. Đầu tiên bạn phải tạo ứng dụng trong tài khoản facebook của mình.
  2. Khi tạo ứng dụng, bạn sẽ có hai dữ liệu chính cho mã của mình:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Tải xuống Facebook PHP SDK từ đây .

  4. Bạn có thể bắt đầu với mã này để chia sẻ nội dung từ trang web của mình:

    <?php
      // Remember to copy files from the SDK's src/ directory to a
      // directory in your application on the server, such as php-sdk/
      require_once('php-sdk/facebook.php');
    
      $config = array(
        'appId' => 'YOUR_APP_ID',
        'secret' => 'YOUR_APP_SECRET',
        'allowSignedRequest' => false // optional but should be set to false for non-canvas apps
      );
    
      $facebook = new Facebook($config);
      $user_id = $facebook->getUser();
    ?>
    <html>
      <head></head>
      <body>
    
      <?php
        if($user_id) {
    
          // We have a user ID, so probably a logged in user.
          // If not, we'll get an exception, which we handle below.
          try {
            $ret_obj = $facebook->api('/me/feed', 'POST',
                                        array(
                                          'link' => 'www.example.com',
                                          'message' => 'Posting with the PHP SDK!'
                                     ));
            echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';
    
            // Give the user a logout link 
            echo '<br /><a href="' . $facebook->getLogoutUrl() . '">logout</a>';
          } catch(FacebookApiException $e) {
            // If the user is logged out, you can have a 
            // user ID even though the access token is invalid.
            // In this case, we'll get an exception, so we'll
            // just ask the user to login again here.
            $login_url = $facebook->getLoginUrl( array(
                           'scope' => 'publish_stream'
                           )); 
            echo 'Please <a href="' . $login_url . '">login.</a>';
            error_log($e->getType());
            error_log($e->getMessage());
          }   
        } else {
    
          // No user, so print a link for the user to login
          // To post to a user's wall, we need publish_stream permission
          // We'll use the current URL as the redirect_uri, so we don't
          // need to specify it here.
          $login_url = $facebook->getLoginUrl( array( 'scope' => 'publish_stream' ) );
          echo 'Please <a href="' . $login_url . '">login.</a>';
    
        } 
    
      ?>      
    
      </body> 
    </html>

Bạn có thể tìm thêm các ví dụ trong trang Facebook Developers:

https://developers.facebook.com/docs/reference/php


3
Bạn nói đúng Joseph, và tôi hy vọng thông tin bạn cung cấp sẽ hữu ích cho những người tìm thấy trang này. Vì điều đó tôi đã bình chọn nó. Tôi chỉ không đánh dấu nó là câu trả lời vì chúng tôi đã biết rằng chúng tôi sẽ phải quay trở lại với PHP nếu Facebook không hoàn nguyên những thay đổi mà họ đã thực hiện. Giải pháp hoàn chỉnh mà tôi hy vọng, một cách sử dụng URL của trình chia sẻ là một cách tương tự như cách nó từng hoạt động, có thể không tồn tại ngay bây giờ hoặc trong tương lai. Nhưng cảm ơn phản hồi của bạn và tôi tin rằng nó sẽ hữu ích cho ai đó trong tình huống này.
tdous

2

Tôi xem lại url của bạn đang sử dụng:

https://www.facebook.com/sharer/sharer.php?s=100&p[title]=EXAMPLE&p[summary]=EXAMPLE&p[url]=EXAMPLE&p[images][0]=EXAMPLE

và xem sự khác biệt này:

  1. URL của người chia sẻ không giống nhau.
  2. Các chuỗi có thứ tự khác nhau. (Không biết cái này có ảnh hưởng gì không).

Tôi sử dụng chuỗi URL này:

http://www.facebook.com/sharer.php?s=100&p[url]=http://www.example.com/&p[images][0]=/images/image.jpg&p[title]=Title&p[summary]=Summary

Trong phần "tiêu đề" và "tóm tắt", tôi sử dụng hàm php urlencode();như sau:

<?php echo urlencode($detail->title); ?>

Và làm việc tốt cho tôi.


Nó vẫn hoạt động về phía bạn? Khi tôi thử URL mẫu của bạn, tôi không hiển thị tiêu đề và tóm tắt!
vcarel

1
@vcarel Điều này chỉ hoạt động với OpenGraph, đó là vấn đề. Đăng một phương pháp khác trong một câu trả lời khác.
Joseph Collins

@JosephCollins Đáp lại sự khác biệt của bạn: 1. URL "hxxp: //facebook.com/sharer.php" chỉ chuyển hướng đến "hxxp: //facebook.com/sharer/sharer.php", tôi cho rằng nó tương thích ngược với một tính năng chia sẻ trước đó. 2. Thứ tự của các trường không có sự khác biệt. Tôi đã thử đơn đặt hàng của bạn để đề phòng, vẫn có vấn đề. Như tôi đã nói trong câu hỏi ban đầu của mình, điều này đã hoạt động chính xác, sau đó một ngày nó không có thay đổi nào ở cuối của chúng tôi. Nó đã được Facebook chấp nhận là một lỗi, vì vậy nó không chỉ là vấn đề định dạng URL. Nhưng họ chắc chắn đang dành thời gian ngọt ngào để làm bất cứ điều gì về nó.
tdous

-1

Nếu bạn mã hóa & trong URL của mình thành% 26 thì nó hoạt động chính xác. Chỉ cần thử nghiệm và xác minh.


Được bao phủ bởi các câu trả lời khác và cũng không đủ kỹ lưỡng để tăng thêm giá trị.
utechtzs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.