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

前端 未结 5 783
醉话见心
醉话见心 2020-11-27 09:59

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]         


        
相关标签:
5条回答
  • 2020-11-27 10:39

    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

    0 讨论(0)
  • 2020-11-27 10:47

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

    0 讨论(0)
  • 2020-11-27 10:48

    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.

    0 讨论(0)
  • 2020-11-27 10:55

    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

    0 讨论(0)
  • 2020-11-27 10:57

    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.

    0 讨论(0)
提交回复
热议问题