如何与访问令牌共享?

时间:2012-06-16 10:07:53

标签: facebook facebook-graph-api facebook-javascript-sdk facebook-access-token

我已经编写了这段代码,但只有在我已登录facebook时它才有效,否则会出现一个弹出窗口,需要我在Facebook上登录电子邮件和密码。

这是代码:

window.fbAsyncInit = function () {
    FB.init({
        appId: 'xxx',
        frictionlessRequests: true,
        status: true,
        cookie: true,
        xfbml: true,
        oauth: true
    });

    function update(response) {
        if (response.authResponse) {
            FB.api('/me', function (info) {
                login(response, info);
            });

        } else {

        }
    }

    FB.getLoginStatus(update);
};
(function () {
    var e = document.createElement('script');
    e.async = true;
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
}());


function login(response, info) {
    if (response.authResponse) {
        publish();
    }
}

function publish() {
    var publish = {
        method: 'feed',
        access_token: '<?php echo $token; ?>',
        message: 'How are you ?',
        name: 'hi friends',
        caption: 'yuhuuuuuuuu',
        description: (' '),
        link: 'http://www.example.com',
        picture: 'http://cdn1.hark.com/images/000/004/514/4514/original.jpg',
        actions: [{
            name: 'Hello',
            link: 'http://www.example.com/'
        }],
        user_message_prompt: 'Share on facebook'
    };

    FB.ui(
    publish, function (response) {
        if (response && response.post_id) {
            alert('Post was published.');

        } else {
            alert('Post was not published.');
        }
    });
}

1 个答案:

答案 0 :(得分:0)

update方法的空白else中,您应该调用FB.login方法:

  

调用FB.login会提示用户验证您的应用程序   使用OAuth对话框。

但是,你不能这样做:

function update(response) {
    if (response.authResponse) {
        FB.api('/me', function (info) {
        login(response, info);
        });

    } else {
        FB.login(function(response) {
            if (response.authResponse) {
                console.log("user is logged in!", response.authResponse);
            }
        });
    }
}

因为它在文档中说明:

  

调用FB.login会导致JS SDK尝试打开弹出窗口   窗口。因此,只应在用户单击后调用此方法   事件,否则大多数浏览器都会阻止弹出窗口。

您必须向用户显示一个按钮或某些内容,告诉他点击才能登录,然后您可以调用FB.login方法。