我正在使用Nick Baker的(webtechnick)CakePHP / Facebook插件,该插件非常棒且效果很好,但我有一个问题,我似乎无法接近回答。
如何绕过使用共享按钮并直接通过操作共享?
例如,我通过我的网站发帖,帖子就像应该添加到数据库中,它还通过动作向登录用户的Twitter帐户发送帖子。如何将此操作句柄共享到我的FB帐户(已建立连接)。我尝试了第一件事,我认为任何人都会在行动中直接尝试$ this-> Facebook-> share(),也无济于事......
任何想法或解决方案都会有很大的帮助......
更新后更新
Thx for the help 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 :(得分: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应用程序共享某些内容并且它无法正常工作,则应确认您具有执行此操作所需的所有权限。