Facebook sharer.php 是否已经改变,不再接受详细的参数?

我们已经打开了一个共享弹出窗口(通过 window.open)

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/these OG meta 标签”-在我的特定 相信我,如果你真的想,我可以解释 这真的无关紧要

  • “使用提要对话框”-由于缺乏对 附件张贴于 FB 页

204439 次浏览

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.

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

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

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.

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