Facebook sharer.php เปลี่ยนเป็นไม่ยอมรับพารามิเตอร์แบบละเอียดอีกต่อไปหรือไม่?


103

เราได้เปิดป๊อปอัปการแบ่งปัน (ผ่าน window.open) ด้วย URL เช่น

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

และจนถึงจุดที่ไม่รู้จักในเดือนที่แล้วทุกอย่างเป็นไปด้วยดี

สิ่งที่เกิดขึ้นตอนนี้คือ; กล่องโต้ตอบป๊อปอัปจะปรากฏขึ้นและรวมถึงชื่อคำอธิบายรูปภาพและ URL ที่ได้รับจากพารามิเตอร์สตริงการสืบค้นอย่างถูกต้อง แต่เมื่อส่งโพสต์โพสต์บนผนังที่เป็นผลลัพธ์บน Facebook จะไม่มีชื่อคำอธิบายและรูปภาพแม้ว่าจะยังคงลิงก์ไปยัง URL ที่ถูกต้อง

มีใครทราบบ้างว่ามีการเปลี่ยนแปลงล่าสุดซึ่งอาจทำให้สิ่งนี้หยุดทำงานได้ทันที

การล้างคำตอบทั่วไปบางส่วนไว้ล่วงหน้า:

  • "sharer.php URL ถูกเลิกใช้งานแล้ว" - ดูเหมือนว่าการใช้งานจะยังคงดำเนินต่อไปและดูเหมือนว่าฉันทามติก็คือส่วนใหญ่จะถูกพิจารณาว่าติดอยู่ - ฉันไม่เห็นสิ่งบ่งชี้ที่เฉพาะเจาะจงว่าควรหยุดทำงานกะทันหัน - อาจพลาดบางอย่าง

  • "ใช้ JavaScript SDK / เมตาแท็ก OG เหล่านี้" - เป็นไปไม่ได้ในสถานการณ์เฉพาะของฉัน - เพียงแค่เชื่อฉัน ... ฉันสามารถอธิบายได้ว่าคุณต้องการจริงๆหรือไม่ แต่มันไม่เกี่ยวข้องจริงๆ

  • "ใช้กล่องโต้ตอบฟีด" - ไม่เหมาะสมเนื่องจากขาดการสนับสนุนในการโพสต์พร้อมไฟล์แนบบนหน้า FB


มีข้อผิดพลาดของ Facebook ที่บันทึกโดยคนอื่นที่นี่developer.facebook.com/bugs/563991033677853ดังนั้นฉันขอแนะนำให้ทุกคนที่มีปัญหาช่วยตั้งค่าสถานะนี้กับ FB โดยไปที่นั่นและยืนยันว่าคุณมีปัญหานี้ด้วย
tdous

อัปเดตสำหรับใครก็ตามที่ประสบปัญหาเดียวกัน ... คนอื่น ๆ ที่รายงานว่านี่เป็นข้อบกพร่องของ Facebook ไม่ได้ร้อนใจในการให้รายละเอียดล่วงหน้าหรือตอบสนองต่อข้อมูลดังนั้นฉันจึงส่งรายงานข้อบกพร่องใหม่อีกครั้งและได้มอบหมายให้นักพัฒนาแล้ว รอแค่ฟังข่าวจาก FB. Developers.facebook.com/x/bugs/357750474364812
tdous

4
น่าเศร้าที่คำตอบที่ได้รับการยอมรับนั้นถูกต้อง หลังจาก 3 เดือนของการรอให้ข้อบกพร่องได้รับการ "แก้ไข" พวกเขาได้เปลี่ยนพฤติกรรมที่ยอมรับของ sharer.php เพื่อให้ไม่สามารถใช้พารามิเตอร์เหล่านี้ได้อีกต่อไป
tdous

คำตอบ:


105

Facebook ไม่รองรับพารามิเตอร์ที่กำหนดเองในรูปแบบ sharer.php

ผู้แชร์จะไม่ยอมรับพารามิเตอร์ที่กำหนดเองอีกต่อไปและ facebook จะดึงข้อมูลที่แสดงในหน้าตัวอย่างในลักษณะเดียวกับที่จะปรากฏบน facebook เป็นโพสต์จากเมตาแท็ก url OG

ใช้ไดอะล็อก / ฟีดแทน 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

คำตอบอย่างเป็นทางการจากทีม fb


1
เอาชนะฉันให้ตอบคำถามของตัวเอง;)
tdous

32
แต่คุณต้องมีรหัสแอปในกรณีนี้ จะเป็นอย่างไรหากเป็นเพียงเว็บไซต์
German Capuano

3
จาก Facebook: กล่องโต้ตอบฟีดสำหรับเว็บเลิกใช้งานแล้วใน API เวอร์ชัน 2.0 บนเว็บขอแนะนำให้นักพัฒนาใช้ Share Dialog ที่ทันสมัยกว่าซึ่งสามารถทำหน้าที่ทั้งหมดเช่นเดียวกับกล่องโต้ตอบรุ่นเก่าเหล่านี้ แต่สามารถเผยแพร่เรื่องราว Open Graph ที่กำหนดเองเพิ่มเติมได้โดยไม่ต้องเข้าสู่ระบบ Facebook Developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails

ถ้าเป็นไปได้ฉันขอแนะนำให้ใช้ Facebook SDK กับ JavaScript ง่ายกว่ามากในการเขียนโค้ดและฉันคิดว่ามันจะยุ่งยากน้อยกว่าการใช้แบบฟอร์มลิงค์ด้านบน ดูได้ที่: developers.facebook.com/docs/sharing/web
LiquidDrummer

12
@LiquidDrummer จุดรวมของการใช้ URL ประเภทเหล่านี้เพื่อให้คุณไม่ต้องใช้ SDK เพิ่มประสิทธิภาพที่ไม่จำเป็นให้กับเพจของคุณช่วยให้ FB บุกรุกความเป็นส่วนตัวของผู้คนและไม่ง่ายไปกว่า<a>แท็กธรรมดาหรือการopen()โทร
Walf

98

เริ่มตั้งแต่วันที่ 18 กรกฎาคม 2017 Facebook ได้ตัดสินใจที่จะไม่สนใจพารามิเตอร์ที่กำหนดเองที่ผู้ใช้กำหนด ตัวเลือกนี้จะบล็อกความเป็นไปได้หลายอย่างที่คำตอบนี้นำเสนอและยังแบ่งปุ่มต่างๆที่ใช้ในเว็บไซต์ต่างๆ

quoteและhashtagพารามิเตอร์การทำงาน ณ ธันวาคม 2018


มีใครทราบบ้างว่ามีการเปลี่ยนแปลงล่าสุดซึ่งอาจทำให้สิ่งนี้หยุดทำงานได้ทันที

พารามิเตอร์มีการเปลี่ยนแปลง คำตอบที่ยอมรับในปัจจุบัน:

Facebook ไม่รองรับพารามิเตอร์ที่กำหนดเองในรูปแบบ sharer.php

แต่นี่ไม่ถูกต้องทั้งหมด บางทีพวกเขาอาจไม่สนับสนุนหรือรับรองแต่สามารถใช้พารามิเตอร์ที่กำหนดเองได้หากคุณทราบชื่อที่ถูกต้อง ซึ่งรวมถึง:

  • URL (แน่นอน) → u
  • ภาพที่กำหนดเอง→ picture
  • ชื่อที่กำหนดเอง→ title
  • ใบเสนอราคาที่กำหนดเอง→ quote
  • คำอธิบายที่กำหนดเอง→ description
  • คำบรรยายภาพ (aka ชื่อเว็บไซต์) → caption

ตัวอย่างเช่นคุณสามารถแบ่งปันคำถามนี้กับ URL ต่อไปนี้:

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.

ลองมัน!

ฉันได้สร้างเครื่องมือที่ช่วยให้แชร์ URL บน Facebookด้วยพารามิเตอร์ที่กำหนดเองได้ง่ายขึ้น คุณสามารถใช้เพื่อสร้างsharer.phpลิงค์ของคุณเพียงแค่กดปุ่มและคัดลอก URL จากแท็บที่เปิดขึ้น


2
ขอบคุณมากเยี่ยมมาก!
Nightmare_82

1
@ TakácsZsoltคุณไม่จำเป็นต้องใช้ JS บนหน้านี้คุณสามารถสร้าง URL ฝั่งเซิร์ฟเวอร์ใน CMS หรือโค้ดที่กำหนดเองจากนั้นให้บริการ URL ที่เรียบง่ายแก่ผู้ใช้ ปุ่มแชร์อย่างเป็นทางการไม่ดีเนื่องจากมีโค้ด JS จำนวนมากและติดตามผู้ใช้ นอกจากนี้หากคุณแชร์ URL ของคุณเองคุณควรให้บริการแท็ก OpenGraph ที่เหมาะสมแทนที่จะใช้พารามิเตอร์ผู้แชร์ของ Facebook :)
Andrea Lazzarotto

1
@Garavani ใช่คุณพูดถูก ตามที่กล่าวไว้ในความคิดเห็นของเครื่องมือพวกเขาได้เลิกใช้งานพารามิเตอร์และลบออก
Andrea Lazzarotto

4
เมื่อเดือนเมษายน 2018 ดูเหมือนว่าพารามิเตอร์อื่น ๆ นอกเหนือจากuจะถูกเพิกเฉย
สิงห์

1
นอกเหนือuจากพารามิเตอร์เดียวที่ฉันเห็นคือquote
robskrob

3

ปัญหาของคุณเกิดจากการขาดเครื่องหมาย OpenGraph อย่างที่คุณบอกว่าคุณไม่สามารถใช้งานได้ด้วยเหตุผลบางประการ

สำหรับคุณเพียงการแก้ปัญหาคือการใช้PHP Facebook API

  1. ก่อนอื่นคุณต้องสร้างแอปพลิเคชันในบัญชี Facebook ของคุณ
  2. เมื่อสร้างแอปพลิเคชันคุณจะมีข้อมูลสำคัญสองรายการสำหรับรหัสของคุณ:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. ดาวน์โหลด Facebook PHP SDK จากที่นี่

  4. คุณสามารถเริ่มต้นด้วยรหัสนี้เพื่อแบ่งปันเนื้อหาจากไซต์ของคุณ:

    <?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>

คุณสามารถดูตัวอย่างเพิ่มเติมได้ในไซต์ Facebook Developers:

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


3
คุณพูดถูกโจเซฟและฉันหวังว่าข้อมูลที่คุณให้มาจะเป็นประโยชน์กับผู้ที่พบหน้านี้ ด้วยเหตุนี้ฉันจึงโหวตมันขึ้นมา ฉันไม่ได้ทำเครื่องหมายว่าเป็นคำตอบเพราะเรารู้อยู่แล้วว่าเราจะต้องถอยกลับไปใช้ PHP หาก Facebook ไม่เปลี่ยนกลับการเปลี่ยนแปลงที่พวกเขาทำ วิธีแก้ปัญหาที่สมบูรณ์ที่ฉันหวังไว้วิธีใช้ sharer URL เป็นวิธีที่คล้ายกับวิธีที่ใช้ในการทำงานอาจไม่มีอยู่ในขณะนี้หรือในอนาคต แต่ขอบคุณสำหรับการตอบกลับของคุณและฉันเชื่อว่ามันจะเป็นประโยชน์กับใครบางคนในสถานการณ์นี้
tdous

2

ฉันตรวจสอบ URL ของคุณที่ใช้:

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

และดูความแตกต่างนี้:

  1. URL ของผู้แชร์ไม่เหมือนกัน
  2. สตริงอยู่ในลำดับที่แตกต่างกัน (ไม่ทราบว่ามีผลต่อ).

ฉันใช้สตริง URL นี้:

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

ในส่วน "title" และ "summary" ฉันใช้ฟังก์ชัน php urlencode();ดังนี้:

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

และทำงานได้ดีสำหรับฉัน


มันยังทำงานอยู่ข้างคุณ? เมื่อฉันลองใช้ URL ตัวอย่างของคุณฉันไม่ได้รับชื่อและบทสรุปปรากฏ!
vcarel

1
@vcarel ใช้งานได้กับ OpenGraph เท่านั้นนั่นคือปัญหา โพสต์วิธีการอื่นในคำตอบอื่น
Joseph Collins

@JosephCollins เพื่อตอบสนองความแตกต่างของคุณ: 1. URL "hxxp: //facebook.com/sharer.php" เพียงแค่เปลี่ยนเส้นทางไปที่ "hxxp: //facebook.com/sharer/sharer.php" ฉันถือว่าเข้ากันได้แบบย้อนหลัง ด้วยคุณสมบัติการแบ่งปันก่อนหน้านี้ 2. ลำดับของเขตข้อมูลไม่มีความแตกต่าง ฉันลองสั่งซื้อของคุณแล้วในกรณีที่ยังคงมีปัญหา ดังที่ฉันได้กล่าวไว้ในคำถามเดิมของฉันสิ่งนี้ทำงานได้อย่างถูกต้องแล้ววันหนึ่งมันก็ไม่เปลี่ยนแปลงในตอนท้ายของเรา Facebook ยอมรับว่าเป็นข้อบกพร่องดังนั้นจึงไม่ใช่แค่ปัญหารูปแบบ URL แต่พวกเขาใช้เวลาอันแสนหวานในการทำอะไรกับมัน
tdous

-1

หากคุณเข้ารหัส & ใน URL ของคุณเป็น% 26 จะทำงานได้อย่างถูกต้อง เพิ่งทดสอบและยืนยัน


คำตอบอื่น ๆ ครอบคลุมและไม่ทั่วถึงเพียงพอที่จะเพิ่มมูลค่า
utechtzs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.