1

嘿,Facebook 开发人员,

我已经阅读了数十个相关问题,并希望尝试了 developers.facebook.com 上的每个相关示例,但我无法让这个工作:

  1. 用户访问了我的网站并通过以下方式授权了我向他请求的权限

    FB.login(callback, {
        scope: 'publish_actions,user_actions:news,user_interests'
    });
    

    打电话后

    FB.init({
        appId: 'xxx', // App ID
        status: true, // check login status
        cookie: true,
        xfbml: true // parse XFBML
    });
    
  2. 我现在可以成功请求一个在一段时间内有效的访问令牌,并使用它来查询有关用户的各种信息。

  3. 无需在任何地方(Facebook 或我自己的网站)注销,如果我现在再次导航到该页面(或只是点击重新加载),我希望立即能够使用

    FB.getLoginStatus(callback)
    

    并收到 的响应connected。据我了解,用户不应该再点击任何东西。

不过,我得到的是unknown. 无论在什么浏览器中,无论我使用的是真正的开发人员资料还是 Facebook 测试用户。

我也订阅了这些事件auth.authResponseChangeauth.statusChange但它们只有在我明确调用时才会触发FB.login()

它在Facebook SDK 文档中的示例中说,我FB.init()从上面应该已经从 Facebook 获得了有关页面加载时间的必要信息,并且事件应该相应地触发。

由于我已经尝试了很多示例并且真的认为我理解文档,所以我看不出错误发生在哪里。

有什么我遗漏的东西,我有什么误解或我应该注意的时间问题吗?

附带说明一下,我已经尝试了比提到的 Facebook 事件更多的尝试,通过 强制状态更新FB.getLoginStatus(callback, true),通过在 Chrome 的 Javascript 控制台中输入代码逐步运行代码以及来自 SO 和 Facebook 论坛的更多建议。

4

2 回答 2

1

如果设置status: true,则FB.getLoginStatus响应对象将被 SDK 缓存,后续调用FB.getLoginStatus将从此缓存的响应中返回数据。

为了解决这个问题,您必须调用FB.getLoginStatus将第二个参数设置为 true 以强制往返 Facebook - 有效地刷新响应对象的缓存。

例子:

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

    FB.getLoginStatus( function(response) {
        //console.log(response);
        if (response.status === 'connected') {
            var accessToken = response.authResponse.accessToken;
            alert(accessToken);
        } else if (response.status === 'not_authorized') {
            //login function
        } else {
            //login function
        }
    }, true);

    FB.Event.subscribe('auth.authResponseChange', function(response) {
        //console.log('The status of the session changed to: '+response.status);
        alert(response.status);
    });
};

文档:https ://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

于 2012-07-02T10:54:50.950 回答
1

作为 Philip 接受的答案的附加信息,我想提一下cookie 阻止程序是自动登录不起作用的实际原因。

确保在测试代码并假设“真实世界”条件之前禁用您正在运行的任何插件。

于 2012-07-06T08:14:09.717 回答