2

我正在使用 Nick Baker (webtechnick) 的 CakePHP / Facebook 插件,它很棒而且效果很好,但是我有一个问题,我似乎无法回答。

我将如何绕过共享按钮的使用并直接通过操作进行共享?

例如,我通过我的网站发布了一个帖子,该帖子按应有的方式添加到了数据库中,它还通过该操作向登录的用户 Twitter 帐户发送了一个帖子。我怎样才能让这个操作句柄将它分享到我的 FB 帐户(已经建立连接)。?我尝试了第一件事,我认为任何人显然都会直接在操作中尝试 $this->Facebook->share() ,但也无济于事......

任何想法或解决方案都会有很大帮助......

回答后更新

谢谢你的帮助。我投票赞成你的答案,因为据我所知,你是 100% 正确的。我正在加载 JS SDK。

    function init($options = null, $reload = true) {
        if (empty($options)) {
            $options = array();
        }
        if ($appId = FacebookInfo::getConfig('appId')) {
            $session = json_encode($this->Session->read('FB.Session'));
            if ($reload) {
                $callback = "FB.Event.subscribe('auth.login',function(){window.location.reload()});";
            } else {
                $callback = "if(typeof(facebookReady)=='function'){facebookReady()}";
            }
            $callback .= "FB.Event.subscribe('auth.logout',function() {window.location = '/bastards/users/logout'});";
            $init = '<div id="fb-root"></div>';
            $init .= $this->Html->scriptBlock(
<<<JS
window.fbAsyncInit = function() {
    FB.init({
        appId : '{$appId}',
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml : true, // parse XFBML
        oauth : true // use Oauth
    });
    {$callback}
};
(function() {
    var e = document.createElement('script');
    e.src = document.location.protocol + '//connect.facebook.net/{$this->locale}/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());
JS
            , $options);
            return $init;
        } else {
            return "<span class='error'>No Facebook configuration detected. Please add the facebook configuration file to your config folder.</span>";
        }
    }

我可以毫无问题地提取用户信息并处理所有这些。我已经完成了从我的网站到 FB 的发布,但这只是通过一个链接,使用 FB.ui...

    <a href="#" onClick="publishStory();" class="sendFeed"><br><font style="color:#FFF; text-decoration:none;padding-left:27px;">post to wall</font></a><br>
<script>
function publishStory() {
  FB.ui({
    method: 'feed',
    name: 'message name',
    caption: 'message caption ',
    description: 'description goes here',
    link: 'the url current page',
    picture: 'if you want to add an image'
  }, 
  function(response) {
    console.log('publishStory response: ', response);
  });
  return false;
}
</script>

我试过用...替换上面的代码

    <a href="#" onClick="publishStory();" class="sendFeed"><br><font style="color:#FFF; text-decoration:none;padding-left:27px;">post to wall</font></a><br>
<script>
function publishStory() {
  var body = 'Reading JS SDK documentation';
FB.api('/me/feed', 'post', { message: body }, function(response) {
  if (!response || response.error) {
    alert('Error occured');
  } else {
    alert('Post ID: ' + response.id);
  }
});
}
</script>

但是每次都会出错。

我还应该指出,用户 FB 墙上的帖子并不是真的来自网站 persay,而是用户在他们自己的墙上的帖子,基本上是说:“我在 ladala.com 上发了一个帖子,你应该去去看看吧。”

所以现在我需要弄清楚如何通过提交帖子的操作来运行 FB.ui。

4

1 回答 1

1

根据我们的谈话,我想我会在答案中加入更完整的描述。

您可以使用 JavaScript SDK 触发共享调用。

首先,您需要按照https://developers.facebook.com/docs/reference/javascript/的加载部分中的说明加载 JavaScript SDK 。

加载到页面后,您要查看的两个调用是 FB.getLoginStatus 和 FB.api。FB.getLoginStatus 会给你一个回复,告诉你用户是否登录到 facebook,以及他们是否批准了你的申请。此链接将描述 getLoginStatus 的功能,但简而言之,您需要检查 response.connected(如果需要,可能会再次调用以确认用户的权限)。

如果用户已登录并已批准您的应用程序,则您可以尝试使用FB.api进行 API 调用。请记住,要执行此操作,您可能需要用户已允许publish_stream权限。

您的代码将如下所示:

//Do FB initialization
FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    FB.api('/me/feed', 'post', { message: body }, function(response) {
      if (!response || response.error) {
        //Post was successful
      }
    });
  }
});

这可以以任何您想要的方式触发。页面加载、点击、其他事件完成等。

请记住,这只是实现这一点的一种方法。此外,如果您尝试与您的 FB 应用程序共享某些内容,但它无法正常工作,您应该确认您拥有执行此操作所需的所有权限。

于 2012-05-04T18:57:54.687 回答