Facebook javascript SDK 分享图片问题

Posted

技术标签:

【中文标题】Facebook javascript SDK 分享图片问题【英文标题】:Facebook javascript SDK share image issue 【发布时间】:2019-08-22 16:16:06 【问题描述】:

我想为通过 Facebook 分享图片制作自定义按钮。

我一开始已经添加了 JS SDK 脚本:

<script async defer src="https://connect.facebook.net/en_US/sdk.js"></script>

然后我添加了FB.ui按钮点击功能:

$('.fb.btn').click(function() 
   // Open FB share popup
   FB.ui(
      method: 'share_open_graph',
      action_type: 'og.shares',
      action_properties: JSON.stringify(
            object: 
               'og:url': window.location.href,
               'og:title': 'My Title',
               'og:description': 'Some description here',
               'og:image': 'img url'
            
      )
   ,
   function (response) 
      // Action after response
   );
);

所以,我想将我网站主页的链接指定为og:url

我还想指定images文件夹中的共享图片。

但是FB.ui 函数会忽略除og:url 之外的所有og 参数。它获取网站 URL 并从 URL 中提取所有参数,但不从 FB.ui 函数中的指定参数中提取。它不会在共享链接中显示指定的图像,它只是从主链接 (og:url) 获取任何图像。标题也一样。

尽管我可以单独指定这些参数,为什么它仍然从一个页面中获取所有内容?

我想将www.example.com 作为og:url 传递,Hello World 作为og:titlewww.example.com/images/hello.jpg 作为og:image 传递。

如何使用FB.ui 函数并传递与我指定的完全相同的参数,而不管og:url 页面?

【问题讨论】:

你不能。您必须将 og-tags 放在您共享的页面上 不幸的是 og-tags 在静态页面上也不起作用 网址是什么? 那么我应该设置所有这些参数(og:title、og:description、og:image)什么? 您将这些标签放在您共享的页面上。您可以将它们设置为任何您想要的。 【参考方案1】:

我发现只有在我的域上放置带有适当 og: 标记的静态页面,然后为这个特殊页面提供共享权的链接时,它才对我有用。

通过 Facebook 请求分享链接示例:

function share_fb(url) 
   window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(url),'sharer','toolbar=0,status=0,width=1200,height=630', '_blank');


var shareLinkFB = 'www.example.com/page_for_fb_sharing.html';

share_fb(shareLinkFB);

在您的服务器上共享链接 (www.example.com/page_for_fb_sharing.html) 的示例页面:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   
   <meta property="og:title" content="My website title" />
   <meta property="og:description" content="Some description" />
   <meta property="og:caption" content="Also caption" />
   <meta property="og:image" content="www.example.com/images/sharing_image.png">
   <meta property="og:url" content="www.example.com/page_for_fb_sharing.html">

   <title>Playstation</title>
</head>
<body>
   <!-- just empty body -->
</body>
</html>

现在,当您在share_fb 函数中提出请求时,Facebook 必须在共享消息中正确显示标题和图像。

如果您在后端配置路由,此页面也可能是动态的(即 www.example.com/page_for_fb_sharing/id),但主要是为 og:url 元标记和共享链接本身分别设置相同的 URL否则 Facebook 将找不到您的分享页面,分享链接将被破坏。

所以使用这种方法你可以准备一堆静态页面,并根据它们给出不同的分享链接或制作动态页面。您还可以将 JS 脚本放在此共享页面的正文中,并自动重定向到另一个页面以拥有一个共享页面,特别是用于 FB 共享渲染,但动态以进一步重定向命中。

&lt;script&gt;window.location.replace('www.example.com/quiz_result.html?result=value');&lt;/script&gt;


在这种情况下根本不需要使用FB SDK。

删除&lt;script async defer src="https://connect.facebook.net/en_US/sdk.js"&gt;&lt;/script&gt;

【讨论】:

以上是关于Facebook javascript SDK 分享图片问题的主要内容,如果未能解决你的问题,请参考以下文章

html Facebook Javascript SDK演示

html 异步加载Facebook JavaScript SDK

Facebook javascript SDK 分享图片问题

Facebook 登录:如何将 JavaScript 与 PHP SDK 结合起来?

Facebook 权限对话框 (JavaScript sdk)

通过 Javascript SDK 共享 Facebook 链接返回错误 500