我有一个facebook应用程序,其中用户通过PHP进行身份验证并授予应用程序权限,包括publish_stream
。
在申请过程中,用户正在浏览多个屏幕
在最后一个屏幕上,用户选择是否要在墙上共享帖子
如果他们这样做,应在他们的墙上张贴自动化和格式化的帖子。
我尝试用Javascript做但它没有用。你能看出什么是错的吗?
谢谢! 这是我的代码:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'MY APP ID',
status : true,
cookie : true,
xfbml : true
});
};
(function() {
var e = document.createElement('script');
e.src = 'http://connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
<script>
function postToFacebook() {
var body = '';
var params = {};
params['message'] = 'MESSAGE';
params['name'] = 'NAME';
params['description'] = '';
params['link'] = '';
params['picture'] = 'https://www.URL.com/pic.jpg';
params['caption'] = 'CAPTION';
FB.api('/me/feed', 'post', params, function(response) {
if (!response || response.error) {
// alert('Error occured');
} else {
// alert('Post ID: ' + response);
}
});
}
</script>
答案 0 :(得分:1)
通过阅读您的问题和各种评论,我认为用户会话信息不会持久存储到JavaScript SDK中 - 这假设在服务器端维护了有效的用户会话。
首先,您应该检查您是否使用了最新的PHP SDK。要仔细检查下载并安装GitHub的最新版本。 我认为这应该可以解决您的问题,因为包含授权用户会话数据的cookie应该在PHP和JavaScript SDK之间传递。
如果这不起作用,我怀疑用户未在服务器端正确认证。在这种情况下,您可以尝试以下操作。
在postToFacebook()
之前,您应该检查用户登录状态并在必要时将其登录。例如:
FB.getLoginStatus(function(response) {
if (response.authResponse) {
// logged in and connected user, someone you know
postToFacebook();
} else {
// no user session available, someone you dont know
FB.login(function(response) {
if (response.authResponse) {
// logged in and connected user
postToFacebook();
} else {
// User cancelled login or did not fully authorize
}
}, {scope: 'YOUR,REQUIRED,PERMISSIONS'});
}
});
答案 1 :(得分:0)
您没有调用函数postToFacebook()
!
window.fbAsyncInit = function() {
FB.init({
appId : 'MY APP ID',
status : true,
cookie : true,
xfbml : true
});
postToFacebook();
};
答案 2 :(得分:0)
当您尝试执行此操作时:
FB.api('/me/feed', 'post', params, function(response) { .. });
您需要将访问令牌与呼叫一起传递。我假设你在php / server端有它,所以那么:
FB.api('/me/feed/access_token='[INSERT_ACCESS_TOKEN], 'post', params, function(response) { .. });