0

我正在构建一个 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>

此代码记录idand post_id(使用 my app_id,就像它应该的那样)或只是id(使用 client app_id)。我在这里完全迷路了,谁能指出我正确的方向?我在这里做错了什么?这个错误在facebook方面吗?

4

1 回答 1

1

我没有看到您在登录时要求任何权限 - 所以我认为您的应用程序可能仍然拥有该权限,因为您之前提供了它,但另一个应用程序没有它。

请将这两个应用程序的访问令牌记录到您的浏览器控制台,然后在此处查看https://developers.facebook.com/tools/debug

于 2013-04-26T15:03:13.217 回答