我正在构建一个 Web 应用程序,我需要将它与 facebook 连接。我的最终目标是将图片发布到用户墙和相册,但我已经碰壁了。
当使用我自己的app_id
(我自己的,我的意思是我用我自己的 facebook 帐户创建了这个“测试”应用程序)时,它工作得很好——图片发布在用户的墙上和相册上。但是当使用客户端时app_id
(客户端使用他们自己的帐户创建了这个应用程序,我在那里被列为开发人员)它的行为不同 - 没有图片发布在用户墙上。
我检查了设置,它们是相同的。代码,一样。发布图片时我从 Facebook 得到的回应 - 不同。
这是我正在使用的代码:
<button>share photo</button>
<div id="fb-root"></div>
<script>
var graph_url = 'https://graph.facebook.com/me/photos?access_token=';
var photo_url = '<?php echo $photo_url; ?>';
var user_id = null;
var access_token = null;
window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({
appId : '<?php echo $app_id; ?>', // App ID from the app dashboard
channelUrl : '//my-website/channel.php', // Channel file for x-domain comms
status : true, // Check Facebook Login status
xfbml : true // Look for social plugins on the page
});
// Additional initialization code such as adding Event Listeners goes here
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
user_id = response.authResponse.userID;
access_token = response.authResponse.accessToken;
} else if (response.status === 'not_authorized') {
// nothing to do
} else {
FB.login(function(response) {
if (response.authResponse) {
user_id = response.authResponse.userID;
access_token = response.authResponse.accessToken;
}
});
}
});
$('button').on('click', function(ev) {
if (user_id && access_token) {
FB.api('/me/photos', 'post', {
url: photo_url,
message: 'dasdad',
access_token: access_token
}, function(response) {
console.log(response); // <---- this different
});
}
});
};
// 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/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
此代码记录id
and post_id
(使用 my app_id
,就像它应该的那样)或只是id
(使用 client app_id
)。我在这里完全迷路了,谁能指出我正确的方向?我在这里做错了什么?这个错误在facebook方面吗?