如何检查用户是否分享了网站(Facebook)?这是否可能?

8

我正在编写一个网站,需要关于Facebook集成的帮助。 我需要一个函数(PHP或JS均可),可以检查特定用户是否分享了我的网站, 但我不知道如何编写。 您能否指点我正确的方向?

2个回答

7

首先,在你的标签后面加载Facebook SDK:

<div id="fb-root"></div>
  <script>
  window.fbAsyncInit = function() {
    FB.init({
      appId                : "YOUR APP ID",
      status               : true, // check login status
      cookie               : true, // enable cookies to allow the server to access the session
      xfbml                : false,  // parse XFBML
      perms                : 'read_stream',
      access_token         : "USER ACCESS TOkEN",
      frictionlessRequests : true
    });
  };

  // Load the SDK Asynchronously
  (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/pt_BR/all.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));

</script>

然后您可以使用回调函数来执行您想要的操作:
<script type="text/javascript">
    function shareOnFacebook() {
    FB.ui(
      {
        method        : 'feed',
        display       : 'iframe',
        name          : 'name',
        link          : 'http://www.linktoshare.com',
        picture       : 'http://www.linktoshare.com/images/imagethumbnail.png',
        caption       : 'txt caption',
        description   : 'txt description',
        access_token  : 'user access token'
      },
      function(response) {
        if (response && response.post_id) {

          // HERE YOU CAN DO WHAT YOU NEED
          alert('OK! User has published on Facebook.');

        } else {
          //alert('Post was not published.');
        }
      }
    );
  }
</script>

那么你应该这样使用:

<a href="#" onclick="shareOnFacebook();">Share on facebook</a>

你忘了提到需要实例化SDK才能使用这些功能... 这是一个重要的点... - Lix
2
你必须小心处理这个问题,记住它是在客户端运行的,用户可能会执行一个函数或者类似于已经分享但实际上并没有分享的操作。 - RJardines

5
使用 JavaScript SDK、FB.ui()feed 对话框, 您可以提示您的用户在 Facebook 上分享一个 URL。该对话框提供了回调函数,以便您可以确定帖子是否成功发布。
代码示例来自上述链接...
 var obj = {
    method: 'feed',
    link: 'https://developers.facebook.com/docs/reference/dialogs/',
    picture: 'http://fbrell.com/f8.jpg',
    name: 'Facebook Dialogs',
    caption: 'Reference Documentation',
    description: 'Using Dialogs to interact with users.'
};

function callback(response) {
    document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}

FB.ui(obj, callback);

这是实现您需求的最简单方法。但不能测试别人是否在对话框外分享了您网站的URL。


一个更复杂的替代方案不需要对话框回调,可以利用read_stream权限来完成。一旦获得该权限,就可以扫描用户的过去帖子,看他是否曾经在自己的墙上分享了您的网站...

请记住,如果用户在其他人的墙上或页面上分享了您的网站,则此方法将无法正常工作...


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