想在Flash应用程序中自定义Facebook分享链接的标题/图像/描述

54

可能是重复问题:
Facebook Sharer 如何选择图片?

我正在制作一个Flash应用程序,展示在不同速度下驾驶可能发生的交通事故。我希望用户能够在Facebook上分享这些信息。但是这需要我以某种方式自定义将出现在Facebook上的文本。

我正在创建一个在空白窗口中打开的URL(从Flash应用程序本身)。我指定了“u”和“t”参数,并将生成的消息作为“t”参数。但是这似乎总是被页面标题覆盖。如果我在HTML代码中省略标题标签,则使用文件名(也会覆盖指定的标题)。

http://www.facebook.com/sharer.php?u=http://espentokerud.com/face/addiste.html&t=test;

我也尝试过对url进行编码,但没有成功。

http://www.facebook.com/sharer.php?u=http%3a%2f%2fespentokerud.com%2fface%2faddiste.html&t=test;
我也尝试使用addthis API,但遇到了同样的缺点。有趣的是,如果我发布一个swf文件,标题和描述可以自定义,并且还可以指定一个截图。但是如果我不发布swf文件,则似乎会忽略这一点。
我知道可以在html页面上使用meta标签来指定缩略图、标题和描述,但其中一些内容必须基于flash应用程序内部的计算。

我也遇到了这个问题,非常希望能找到解决方案,因为它似乎是违反直觉的,在你明确给出参数后,它会重置它们! - stealthcopter
我卡在同样的问题上了,准备设置赏金。 - Rod
@stealthcopter, @Rodrigo你就是不行,你需要在目标页面上有元数据。话虽如此,你可以绕过这个问题,看看我的回答。 - eglasius
你的问题得到解答了吗? - Snekse
2
很确定你不能再使用&t来设置标题了。 - Jack Marchetti
6个回答

66

2016更新

使用分享调试器找出问题所在。

确保您遵循Facebook的分享最佳实践

确保您正确使用Open Graph Markup

原始答案

我同意这里已经说过的话,但是根据Facebook开发者网站上的文档, 您可能想要使用以下元标签。

<meta property="og:title" content="title" />
<meta property="og:description" content="description" />
<meta property="og:image" content="thumbnail_image" />

如果您无法通过元标签实现目标,需要嵌入URL版本,请参见@Lelis718下面的答案


8
如果我们有一个动态的标题和描述,该怎么办? - Kasturi
1
我没有尝试过,但我想你可以用动态值替换静态标题和描述。 - Snekse
我有这些设置,但似乎sharer.php无法获取它们。它对其他人有效吗?也许这与他们推动“喜欢”按钮而不是“分享”按钮有关。 - forresto
1
@forresto - 试试这个:https://dev59.com/0XA85IYBdhLWcg3wF_YO - Snekse
@forresto,那个其他的SO答案对sharer有用吗? - Snekse
显示剩余4条评论

29

这正是我一直在寻找的。图形 API 对于许多事情都很好,但仅预先传播一些帖子数据不需要令牌和应用程序授权。 - novwhisky
3
现在对我来说不起作用。 - stoefln
这就是我一直在寻找的,提供第三方图像链接以及它所在页面作为URL结构的方式。如果其他人也在寻找,这里是链接:http://www.facebook.com/sharer/sharer.php?s=100&p[title]=LINK_TITLE&p[summary]=LINK_DESCRIPTION&p[url]=URL_TO_LANDING_PAGE&p[images][0]=URL_TO_IMAGE& - Dylan Valade
3
这个不再起作用了。您能否提供任何替代方案? - user270014

4

我在一周前遇到了同样的问题。

首先,我注意到您的URL在参数字符串之前有一个“&”符号,但实际上应该用一个问号代替来开始参数字符串,并在每个额外参数之间使用“&”符号。

现在,您需要转义您的URL,但同时也需要双重转义传递给URL的URL参数(标题或其他您需要提供的分享内容),如下所示:

var myParams = 't=' + escape('Some title here.') + '&id=' + escape('some content ID or any other value I want to load');
var fooBar = 'http://www.facebook.com/share.php?u=' + escape('http://foobar.com/superDuperSharingPage.php?' + myParams);

现在,您需要创建上面链接的superDuperSharingPage.php,该页面应提供您所需的动态标题、描述和图像内容。类似于以下内容即可:
<?php
    // get our URL query parameters
    $title = $_GET['t'];
    $id = $_GET['id'];
    // maybe we want to load some content with the id I'll pretend we loaded a
    // description from some database in the sky which is magically arranged thusly:
    $desciption = $databaseInTheSky[$id]['description'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title><?php echo $title;?></title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="title" content="<?php echo $title;?>" />
  <meta name="description" content="<?php echo $desciption;?>" />
  <!-- the following line redirects to wherever we want the USER to land -->
  <!-- Facebook won't follow it. you may or may not actually want || need this. -->
  <meta http-equiv="refresh" content="1;URL=http://foobar.com" />
</head>
<body>
  <p><?php echo $desciption;?></p>
  <p><img src="image_a_<?php echo $id;?>.jpg" alt="Alt tags are always a good idea." /></p>
  <p><img src="image_b_<?php echo $id;?>.jpg" alt="Make the web more accessible to the blind!" /></p>
</body>
</html>

如果这对你有用,请告诉我,它基本上就是为我所做的 :)

太好了,谢谢。这个双重转义的想法节省了我很多时间。 - hudolejev

2

我实际上有一个类似的问题。我有一个页面上有多个单选按钮,每个按钮都会在JavaScript中更改时设置页面的标题和描述元标记。

例如,如果用户选择第一个按钮,则元标记将显示:

<meta name="title" content="First Title">
<meta name="description" content="First Description">

如果用户选择第二个按钮,这将更改元标记为:
<meta name="title" content="Second Title">
<meta name="description" content="Second Description">

...等等。我已经通过Firebug确认代码正常运行(即,我可以看到这两个标签已经正确更改)。

显然,Facebook Share只会拉取页面加载时可用的标题和描述元标记。对于页面加载后更改的这两个标记的更改将被完全忽略。

有人有什么想法来解决这个问题吗?也就是说,如何强制Facebook获取页面加载后更改的最新值。


1
发送到 Facebook 的 URL 必须包括所选的选项,以便返回您的网站。使用此选项确保在页面加载时加载值。有关解决问题的更清晰信息,请参见我的答案。 - eglasius

2
我有一个显示内容的Joomla模块...我想分享这些内容到Facebook,而不是页面的标题元描述...所以我的解决方法是在服务器上放置一个秘密的.php文件,当它检测到FB时执行该文件。
$_SERVER['HTTP_USER_AGENT']

if($_SERVER['HTTP_USER_AGENT'] != 'facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)') {
    echo 'Direct Access';
} else {
    echo 'FB Accessed';
}

我希望能通过URL传递变量,以使特定页面的标题和meta描述符格式化为我想要从我的Joomla模块共享的项目...

name="fb_share" share_url="MYURL/sharer.php?title=TITLE&desc=DESC"

希望这能帮到你...


0

你不能这样做,因为它不支持。

我必须问一下,为什么这些计算只能在Flash应用程序内部进行?

你必须导航到一个与Flash应用程序获取的元数据明确相关的URL。否则,Flash应用程序如何知道根据你访问的URL获取哪些值。

选项包括:

  • 在页面上进行计算:在提供页面时,您需要在服务器上执行相同的计算,并将标题等发送到页面元数据中。
  • 在查询字符串中向您的站点发送元数据:如果您真的必须将计算保留在服务器之外,另一个技巧是在用户从Facebook点击访问您的站点的URL时显式设置元数据。处理页面时,您只需将其复制回元数据部分(不要忘记适当编码)。由于URL大小限制,这显然是有限制的。
  • 将计算结果作为查询字符串发送到您的站点:如果这些计算只给出了在元数据中使用的几个数字,您可以将其包含在用户点击返回到您的站点的URL的查询字符串中。这更不可能给您带来URL大小方面的问题。

关于编程的内容,翻译如下:

为什么这个被点赞了?它是错误的。你可以 - 它支持添加自定义标题、描述和图片到你的分享中。我一直都这样做。- Dustin Fineout 3小时前

楼主非常明确地说明他已经知道你可以从页面中提供这些值,但是想要直接将这些值传递给Facebook(而不是通过目标页面)。

此外,请注意,我提供了三种不同的解决方案来解决这个问题,其中之一就是你后来作为答案发布的那个选项。你的选项并不是楼主尝试做到的方式,只是因为Facebook的限制而采取的一种解决方法。

最后,就像我所做的那样,你应该提到特定的解决方案存在缺陷,因为你很容易达到URL大小限制。


为什么这个被点赞了?它是错误的。你可以这样做 - 它支持添加自定义标题、描述和图片到你的分享中。我经常这样做。 - defines
@Dustin 在点踩之前请先阅读;)。请看我对答案更新的回复。 - eglasius
我已经全文阅读了,它们都是很好的建议,正如我在以前的评论中所说!实际上,在我的答案中某种程度上展示了每一个建议。我不同意你的回答说“你不能这样做,因为它不支持”,这是错误的,而且恰巧是你回答中的第一行。 - defines
非常抱歉,但你似乎忽略了文本的一部分:“OP 明确表示他已经知道可以从页面服务,但想直接将值传递给 Facebook(而不是通过目标页面)”…所以无法实现 OP 所需的功能,我们提供的解决方案只是一些变通办法 / 并不能真正直接发送到 Facebook。 - eglasius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接