Has Facebook sharer.php changed to no longer accept detailed parameters?

JavascriptPhpFacebookApiSharing

Javascript Problem Overview


We have been opening a sharing popup (via window.open) with the URL like

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

and until some unknown point in the last month or so everything was fine.

What is happening now is; the popup dialog appears and correctly includes the Title, Description, Image and URL provided by the query string parameters, but when the post is submitted, the resulting wall post on Facebook is missing the Title, Description and Image, though it still links to the correct URL.

Does anyone know if there have been recent changes which could have suddenly stopped this from working?

Pre-empting some common responses:

  • "sharer.php URL was deprecated" - usage seemed to continue and it seemed the consensus was that it was largely considered to be sticking around - I haven't seen any specific indication that it should have suddenly ceased working - might have missed something

  • "Use JavaScript SDK/these OG meta tags" - not possible in my specific situation - just trust me ... I can explain if you REALLY want but it's really not relevant.

  • "Use the feed dialog" - not suitable due to lack of support for posting with attachments on FB pages

Javascript Solutions


Solution 1 - Javascript

##Facebook no longer supports custom parameters in sharer.php

> The sharer will no longer accept custom parameters and facebook will > pull the information that is being displayed in the preview the same > way that it would appear on facebook as a post from the url OG meta > tags.

Use dialog/feeds instead of 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

Official answer from fb team

Solution 2 - Javascript

Starting from July 18, 2017 Facebook has decided to disregard custom parameters set by users. This choice blocks many of the possibilities offered by this answer and it also breaks buttons used on several websites.
The quote and hashtag parameters work as of Dec 2018.

> Does anyone know if there have been recent changes which could have suddenly stopped this from working?

The parameters have changed. The currently accepted answer states:

> Facebook no longer supports custom parameters in sharer.php

But this is not entirely correct. Well, maybe they do not support or endorse them, but custom parameters can be used if you know the correct names. These include:

  • URL (of course) → u
  • custom image → picture
  • custom title → title
  • custom quote → quote
  • custom description → description
  • caption (aka website name) → caption

For instance, you can share this very question with the following 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.

Try it!

I've built a tool which makes it easier to share URLs on Facebook with custom parameters. You can use it to generate your sharer.php link, just press the button and copy the URL from the tab that opens.

Solution 3 - Javascript

Your problem is caused by the lack of markers OpenGraph, as you say it is not possible that you implement for some reason.

For you, the only solution is to use the PHP Facebook API.

  1. First you must create the application in your facebook account.

  2. When creating the application you will have two key data for your code:

     YOUR_APP_ID 
     YOUR_APP_SECRET
    
  3. Download the Facebook PHP SDK from here.

  4. You can start with this code for share content from your site:

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

You can find more examples in the Facebook Developers site:

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

Solution 4 - Javascript

I review your url in use:

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

and see this differences:

  1. The sharer URL not is same.
  2. The strings are in different order. ( Do not know if this affects ).

I use this URL string:

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

In the "title" and "summary" section, I use the php function urlencode(); like this:

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

And working fine for me.

Solution 5 - Javascript

If you encode the & in your URL to %26 it works correctly. Just tested and verified.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiontdousView Question on Stackoverflow
Solution 1 - JavascriptjsnjackView Answer on Stackoverflow
Solution 2 - JavascriptAndrea LazzarottoView Answer on Stackoverflow
Solution 3 - JavascriptJoseph CollinsView Answer on Stackoverflow
Solution 4 - JavascriptJoseph CollinsView Answer on Stackoverflow
Solution 5 - JavascriptKyle GrahamView Answer on Stackoverflow