2012-05-04 93 views
2

我正在使用Nick Baker's(webtechnick)CakePHP/Facebook插件,它非常棒,效果很棒,但是我有一个问题,我似乎甚至无法接近答案。Cakephp Facebook插件 - 通过动作共享

我该如何绕过使用分享按钮并通过操作直接共享?

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

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

更新后的回答

Thx帮助spooney。我投了你的答案,因为你可以从我所知道的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。

+0

我知道JS SDK支持这种功能。正在使用它的可能性? –

+0

要完全诚实的呕吐我不知道...你说的是,http://developers.facebook.com/docs/reference/javascript/,对吗? –

+0

是的。使用JS SDK我可以调用API,比如人们阅读过的文章或者他们看过的视频,而且实现起来非常简单。您还可以提示用户将内容分享到他们的墙上(http://developers.facebook.com/docs/reference/javascript/FB.ui/) (https://developers.facebook.com/docs/reference/)对话框/进料/)。我不完全确定这是你正在寻找什么,或者如果它有意义的实现到你的应用程序,虽然。 –

回答

1

根据我们的谈话,我想我会在一个答案中提供更完整的描述。

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

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

一旦加载到您的页面中,您要查看的两个调用是FB.getLoginStatus和FB.api。 FB.getLoginStatus会给你回应一个响应,告诉你用户是否登录Facebook,以及他们是否已经批准你的应用程序。 This link将描述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应用程序共享某些内容,并且该程序无法正常工作,则应确认您拥有完成此操作所需的所有权限。

+0

嘿,我会在我的原始问题的更新中输入我的回复。这样我有更多的房地产为我的探索。 –