想要来自 Flash 应用程序的 Facebook 共享链接中的自定义标题/图像/描述 [重复]

Posted

技术标签:

【中文标题】想要来自 Flash 应用程序的 Facebook 共享链接中的自定义标题/图像/描述 [重复]【英文标题】:Want custom title / image / description in facebook share link from a flash app [duplicate] 【发布时间】:2011-01-24 22:47:18 【问题描述】:

可能重复:How does Facebook Sharer select Images?

我正在制作一个 Flash 应用程序,用于演示以不同速度行驶时可能造成的交通伤害。我希望用户能够在 facebook 上分享这些信息。然而,这要求我可以以某种方式自定义将出现在 facebook 上的文本。

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

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

我也尝试过对 url 进行 url 编码,但无济于事。

http://www.facebook.com/sharer.php?u=http%3a%2f%2fespentokerud.com%2fface%2faddiste.html&t=test;

我也尝试过使用 addthis API,但也遇到了同样的缺点。有趣的是,如果我发布一个swf,可以自定义标题和描述,还可以指定截图。但如果我不发布 swf,这似乎被忽略了。

我知道我可以在 html 页面上使用元标记来指定缩略图、标题和描述,但其中一些内容必须基于 Flash 应用程序内部的计算。

【问题讨论】:

我也遇到了这个问题,并且对解决方案非常感兴趣,因为在你专门给它参数后它会重置它们似乎违反直觉! 我遇到了同样的问题,打算悬赏 @stealthcopter, @Rodrigo 你不能,你需要在目标页面上有元数据。也就是说,你可以解决它,检查我的答案。 您的问题得到解答了吗? 很确定你不能再使用 &t 来设置标题了。 【参考方案1】:

2016 年更新

使用Sharing Debugger 找出您的问题所在。

确保您关注 Facebook Sharing Best Practices。

确保您正确使用了Open Graph Markup。

原答案

我同意这里已经说过的话,但是per documentation on the Facebook developer site,您可能想要使用以下元标记。

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

如果您无法使用元标记实现目标,并且您需要 URL 嵌入版本,请参阅 @Lelis718 的 answer below。

【讨论】:

太棒了,感谢您指出更改。一旦我确认这确实有效,我将更新我的代码:) 如果我们有一个动态的标题和描述呢?? 我没试过,但我想你可以用你的动态值替换静态标题和描述。 I have these set,但似乎sharer.php 没有得到它们。它对其他人有用吗?也许这与他们按“喜欢”而不是“分享”按钮有关。 @forresto - 试试这个***.com/questions/2950189/…【参考方案2】:

我认为这个网站有解决方案,我现在将对其进行测试。 好像 facebook 改变了 share.php 的参数,所以,为了自定义共享窗口文本和图像,你必须将参数放在“p”数组中。

http://www.daddydesign.com/wordpress/how-to-create-a-custom-facebook-share-button-for-your-iframe-tab/

检查一下。

【讨论】:

正是我想要的。图形 API 对很多事情都有好处,但只是预先传播一些帖子数据不需要令牌和应用授权。 现在不适合我 这就是我一直在寻找的 URL 结构,用于提供指向第三方图像的链接以及它被视为 URL 的页面。如果有人在看facebook.com/sharer/… 非常有帮助。谢谢! :D 这不再起作用了。你能建议任何替代解决方案吗?【参考方案3】:

我有一个显示内容的 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 传递变量,该 URL 使用我想从我的 joomla 模块共享的项目的标题和元描述格式化该特定页面...

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

希望这会有所帮助...

【讨论】:

【参考方案4】:

你不能,它只是不支持它。

我不得不问,为什么这些计算只需要在 Flash 应用程序内部进行?

您必须导航到与您从 Flash 应用程序获得的元数据明显相关的 URL。否则,Flash 应用程序如何知道根据您点击的 URL 获取值。

选项是:

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

为什么要投票?这是不对的。您可以 - 支持将自定义标题、描述和图像添加到您的共享中。我一直都这样做。 – Dustin Fineout 3 小时前

OP 非常明确地表示,他已经知道您可以从页面提供该服务,但希望将值直接传递给 facebook(而不是通过目标页面)。

此外,请注意,我提供了 3 种不同的选项来解决此问题,其中之一是您稍后发布的答案。您的选择不是 OP 试图这样做的方式,它只是一种解决方法,因为 facebook 的限制。

最后,正如我所做的那样,您应该提到特定的解决方案是有缺陷的,因为您很容易达到 URL 大小限制。

【讨论】:

为什么要投票?这是不对的。您可以 - 支持将自定义标题、描述和图像添加到您的共享中。我一直这样做。 @Dustin 在否决投票前阅读 ;)。在我的答案更新中查看我的回复 我已经完全阅读了,正如我在之前的评论中所说的,它们都是很好的建议!事实上,它们在某种程度上都体现在我自己的回答中。我不同意您的回答“您不能,它只是不支持它”,这是不正确的,恰好是您回答的第一行。 我很抱歉,但您再次忽略了部分文本“OP 非常清楚地表明他已经知道您可以从页面提供该服务,但想将值直接传递给 facebook (不是通过目标页面)。” ...所以是的,你不能做 OP 想要的,我们的解决方案是变通方法/不是真正将其直接发送到 facebook。【参考方案5】:

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

首先我注意到您的 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"  /></p>
  <p><img src="image_b_<?php echo $id;?>.jpg"  /></p>
</body>
</html>

如果这对你有用,请告诉我,它基本上对我有用:)

【讨论】:

太好了,谢谢。这种双重转义的想法为我节省了很多时间。【参考方案6】:

其实我也有类似的问题。我有一个带有多个单选按钮的页面;每个按钮都会在更改时通过 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 获取页面加载后更改的最新值。

【讨论】:

您发送到 facebook 的 url 必须包含选择的选项以返回您的网站。使用它来确保在页面加载时加载值。有关如何解决该问题的更明确信息,请参阅我的答案。

以上是关于想要来自 Flash 应用程序的 Facebook 共享链接中的自定义标题/图像/描述 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Facebook Flash 应用程序中进行身份验证?

调用 facebook 对话框后 Flash (wmode=window) 消失

ActionScript 3 通过Flash应用在Facebook中跟踪Google Analytics

通过flash应用在facebook上使用Google分析进行跟踪

来自 Flash 影片剪辑的多分辨率精灵表

facebook app 如何实现可拖动的浮动Button