Apakah sharer.php Facebook berubah menjadi tidak lagi menerima parameter rinci?

103

Kami telah membuka popup berbagi (melalui window.open) dengan URL seperti

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

dan sampai beberapa titik yang tidak diketahui dalam sebulan terakhir ini semuanya baik-baik saja.

Yang terjadi sekarang adalah; dialog popup muncul dan dengan benar menyertakan Judul, Deskripsi, Gambar dan URL yang disediakan oleh parameter string kueri, tetapi ketika posting dikirimkan, posting dinding yang dihasilkan di Facebook kehilangan Judul, Deskripsi dan Gambar, meskipun masih tertaut ke URL yang benar.

Adakah yang tahu jika ada perubahan baru-baru ini yang bisa tiba-tiba menghentikan pekerjaan ini?

Pre-empting beberapa tanggapan umum:

  • "sharer.php URL tidak digunakan lagi" - penggunaan sepertinya berlanjut dan konsensusnya adalah bahwa sebagian besar dianggap bertahan - Saya belum melihat indikasi khusus bahwa seharusnya tiba-tiba berhenti berfungsi - mungkin telah melewatkan sesuatu

  • "Gunakan JavaScript SDK / tag meta OG ini" - tidak mungkin dalam situasi khusus saya - percayalah ... Saya dapat menjelaskan jika Anda BENAR-BENAR ingin tetapi itu benar-benar tidak relevan.

  • "Gunakan dialog feed" - tidak cocok karena kurangnya dukungan untuk memposting dengan lampiran di halaman FB

tdous
sumber
Ada bug Facebook yang dicatat oleh orang lain di sini developers.facebook.com/bugs/563991033677853 jadi saya menyarankan siapa pun yang memiliki masalah ini membantu menandai ini dengan FB dengan pergi ke sana dan mengonfirmasi bahwa Anda juga memiliki masalah ini.
tdous
PERBARUI untuk siapa pun yang mengalami masalah yang sama ... Orang lain yang melaporkan ini sebagai bug ke Facebook tidak begitu bersemangat dalam memberikan detail di awal atau menanggapi informasi, jadi saya mengirimkan kembali laporan bug baru dan telah ditugaskan ke pengembang. Tinggal menunggu kabar dari FB. developers.facebook.com/x/bugs/357750474364812
tdous
4
Sayangnya, jawaban yang diterima benar. Setelah 3 bulan menunggu bug "diperbaiki", mereka mengubah perilaku sharer.php yang diterima sehingga parameter ini tidak dapat digunakan lagi.
tdous

Jawaban:

105

Facebook tidak lagi mendukung parameter khusus dalam sharer.php

Pembagi tidak akan lagi menerima parameter khusus dan facebook akan menarik informasi yang sedang ditampilkan di pratinjau dengan cara yang sama yang akan muncul di facebook sebagai posting dari tag meta url OG.

Gunakan dialog / feed daripada 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

Jawaban resmi dari tim fb

jsnjack
sumber
1
Pukul saya untuk menjawab pertanyaan saya sendiri;)
tdous
32
tetapi Anda memerlukan ID aplikasi dalam kasus ini. Bagaimana jika itu hanya situs web?
Capuano Jerman
3
Dari Facebook: Dialog Feed untuk web sudah tidak digunakan lagi di API Versi 2.0. Di web, pengembang didorong untuk menggunakan Share Dialog yang lebih modern, yang dapat melakukan semua fungsi yang sama seperti dialog lama ini, tetapi juga dapat menerbitkan cerita Open Graph kustom tanpa memerlukan Login dengan Facebook. developers.facebook.com/docs/sharing/reference/share-dialog
RubeOnRails
Jika memungkinkan, saya sarankan menggunakan SDK Facebook dengan JavaScript. Jauh lebih mudah untuk membuat kode dan saya akan menganggapnya jauh lebih tidak pilih-pilih daripada menggunakan formulir tautan di atas. Lihatlah di: developers.facebook.com/docs/sharing/web
LiquidDrummer
12
@LiquidDrummer inti dari penggunaan jenis URL ini adalah agar Anda tidak perlu menggunakan SDK . Ini menambahkan kinerja yang tidak perlu ke halaman Anda, membantu FB menyerang privasi orang dan tidak lebih sederhana dari <a>tag atau open()panggilan biasa.
Walf
98

Mulai 18 Juli 2017 Facebook telah memutuskan untuk mengabaikan parameter khusus yang ditetapkan oleh pengguna. Pilihan ini memblokir banyak kemungkinan yang ditawarkan oleh jawaban ini dan juga memecah tombol yang digunakan di beberapa situs web.

The quotedan hashtagparameter bekerja sebagai dari Desember 2018.


Adakah yang tahu jika ada perubahan baru-baru ini yang bisa tiba-tiba menghentikan pekerjaan ini?

Parameter telah berubah. Jawaban yang diterima saat ini menyatakan:

Facebook tidak lagi mendukung parameter khusus dalam sharer.php

Tetapi ini tidak sepenuhnya benar. Yah, mungkin mereka tidak mendukung atau mendukung mereka, tetapi parameter khusus dapat digunakan jika Anda mengetahui nama yang benar. Ini termasuk:

  • URL (tentu saja) → u
  • gambar kustom → picture
  • judul khusus → title
  • kutipan khusus → quote
  • deskripsi khusus → description
  • caption (alias nama situs web) → caption

Misalnya, Anda dapat membagikan pertanyaan ini dengan URL berikut:

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.

Cobalah!

Saya telah membuat alat yang memudahkan untuk membagikan URL di Facebook dengan parameter khusus. Anda dapat menggunakannya untuk membuat sharer.phptautan, cukup tekan tombol dan salin URL dari tab yang terbuka.

Andrea Lazzarotto
sumber
2
Terima kasih banyak, bagus!
Nightmare_82
1
@ TakácsZsolt Anda tidak memerlukan JS pada halaman tersebut, Anda dapat membuat sisi server URL di CMS atau kode kustom Anda dan kemudian memberikan URL sederhana kepada pengguna. Tombol bagikan resmi buruk karena menyertakan banyak KB kode JS dan melacak pengguna. Selain itu, jika Anda membagikan URL Anda sendiri, Anda sebaiknya menyajikan tag OpenGraph yang tepat daripada mengandalkan parameter pembagi Facebook. :)
Andrea Lazzarotto
1
@Garavani, ya kamu benar. Seperti yang dibahas di komentar alat, mereka tidak lagi menggunakan parameter dan menghapusnya.
Andrea Lazzarotto
4
Mulai April 2018, tampaknya parameter apa pun selain udiabaikan secara diam-diam.
Leo
1
Selain satu u-satunya parameter yang saya lihat tercermin adalahquote
robskrob
3

Masalah Anda disebabkan oleh kurangnya penanda OpenGraph, seperti yang Anda katakan tidak mungkin Anda mengimplementasikan karena beberapa alasan.

Untuk Anda, satu-satunya solusi adalah menggunakan API Facebook PHP .

  1. Pertama Anda harus membuat aplikasi di akun facebook Anda.
  2. Saat membuat aplikasi, Anda akan memiliki dua data kunci untuk kode Anda:

    YOUR_APP_ID 
    YOUR_APP_SECRET
  3. Unduh Facebook PHP SDK dari sini .

  4. Anda dapat memulai dengan kode ini untuk berbagi konten dari situs Anda:

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

Anda dapat menemukan lebih banyak contoh di situs Pengembang Facebook:

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

Joseph Collins
sumber
3
Anda benar Joseph, dan saya harap informasi yang Anda berikan berguna bagi seseorang yang menemukan halaman ini. Karena itu saya telah memilihnya. Saya hanya belum menandainya sebagai jawaban karena kami sudah tahu bahwa kami harus kembali ke PHP jika Facebook tidak mengembalikan perubahan yang telah mereka buat. Solusi lengkap yang saya harapkan, cara menggunakan URL yang dibagikan mirip dengan cara kerjanya dulu, mungkin tidak ada sekarang atau di masa mendatang. Tapi terima kasih atas tanggapan Anda dan saya percaya ini akan berguna bagi seseorang dalam situasi ini.
tdous
2

Saya meninjau url Anda yang digunakan:

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

dan lihat perbedaan ini:

  1. URL pembagi tidak sama.
  2. Urutan senar berbeda. (Tidak tahu apakah ini mempengaruhi).

Saya menggunakan string URL ini:

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

Di bagian "judul" dan "ringkasan", saya menggunakan fungsi php urlencode();seperti ini:

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

Dan bekerja dengan baik untukku.

Joseph Collins
sumber
Apakah masih berfungsi di pihak Anda? Ketika saya mencoba URL contoh Anda, saya tidak mendapatkan judul dan ringkasan yang ditampilkan!
vcarel
1
@vcarel Ini hanya bekerja dengan OpenGraph, itulah masalahnya. Posting metode berbeda di jawaban lain.
Joseph Collins
@JosephCollins Menanggapi perbedaan Anda: 1. URL "hxxp: //facebook.com/sharer.php" hanya dialihkan ke "hxxp: //facebook.com/sharer/sharer.php", saya anggap kompatibel ke belakang dengan fitur berbagi sebelumnya. 2. Urutan bidang tidak ada bedanya. Saya memang mencoba pesanan Anda untuk berjaga-jaga, masih ada masalah. Seperti yang saya katakan dalam pertanyaan awal saya, ini berfungsi dengan benar, lalu suatu hari tidak tanpa perubahan di pihak kami. Ini telah diterima sebagai bug oleh Facebook, jadi ini bukan hanya masalah format URL. Tapi mereka pasti mengambil waktu manis mereka untuk melakukan apa saja.
tdous
-1

Jika Anda menyandikan & di URL Anda ke% 26, ini berfungsi dengan benar. Baru saja diuji dan diverifikasi.

Kyle Graham
sumber
Tercakup oleh jawaban lain dan juga tidak cukup teliti untuk menambah nilai.
utechtzs