【问题标题】:Facebook: Javascript API sometimes doesn't loadFacebook:Javascript API 有时无法加载
【发布时间】:2011-05-24 18:57:15
【问题描述】:

每隔几次,对 Facebook API 的调用就没有完成(或者甚至可能没有完成)。例如,我正在计算也使用我的应用程序的用户朋友的数量,但这似乎从未计算过。我尝试调查此问题,但 Chrome 控制台中没有错误。您是否遇到过此类行为并知道如何解决?

编辑

这里有一些细节,我明白了:

error_code 190
error_msg Error validating access token: The session is invalid because the user logged out or because auth.expireSession was invoked

关键是我以一个用户的身份注销,然后以另一个用户的身份登录。为什么 Facebook 将其视为已注销的用户?此外,如果我刷新页面,一切正常。

EDIT2

这是一些代码sn-ps:

function facebookInit(config) {
  Config = config;

  FB.init({
    appId: Config.appId,
    xfbml: true,
    status: true,
    cookie: true,
    channelUrl:
      window.location.protocol + '//' + window.location.host + '/channel.html'
  });
  FB.Event.subscribe('auth.sessionChange', handleSessionChange);
  FB.Canvas.setSize();

  // ensure we're always running on apps.facebook.com
  if (window == top) { goHome(); }
}


window.fbAsyncInit = function() { 
    facebookInit({{ js_conf|safe }}) 
    afterSDK()  
};

问题就出现在这里:

var query = "SELECT '' " +
        "FROM user " +
        "WHERE is_app_user = \"1\" AND " +
              "uid IN (SELECT uid2 " +
                      "FROM friend WHERE uid1 = {{ user.user_id }})"
FB.api({'method': 'fql.query', 'query': query}, 
       function(response){

此代码在afterSDK() 函数内部调用。响应可能会带来错误,而不是使用应用的朋友数量。

【问题讨论】:

  • 你打什么电话?这是最近发生的错误吗?
  • 不,一直都是这样。有时它根本不起作用。
  • 你的代码是什么样的?您是否尝试将访问令牌用于任何事情?如果有,你是怎么得到的?
  • 我加了一些sn-ps的代码,好像不行。

标签: facebook facebook-javascript-sdk


【解决方案1】:

让我试一试。

我认为问题在于您注销了一个用户,然后又登录了另一个用户。可能会出现问题,因为 Facebook 没有检测到其他用户已注销,并认为是同一个人。这可能会解决这个问题:

FB.logout(function(response) {
  // user is now logged out
});

运行它以确保用户已注销,然后尝试从那里移动

希望这会有所帮助。

Here is the facebook logout method

你也可以看看at this previous SO question关于刷新会话(虽然它在 PHP 中,我不知道等效的 JS)

【讨论】:

  • 但是我应该在什么时候调用它呢?在我运行 init 方法之前?但是我不会让我当前的(正确的)用户退出并且什么都不起作用吗?
  • 没有。 init 方法需要首先运行(您可能需要再次运行它,但如果不是首先运行,那么我认为您会收到错误)。我可能对你在做什么感到困惑。您不是要以一个用户的身份退出并以另一个用户的身份登录吗?
  • 我是。我正在使用帐户-> 从 facebook 注销。然后我输入我的应用程序的 url 并单击“登录”,进行身份验证,然后才应该调用 init。这就是它的工作原理。
  • 然后先尝试运行FB.logout。如果您的帐户已经登录,那么Init 可能无关紧要(我一直认为您需要先调用该调用才能在apps.facebook 上运行任何facebook 应用程序)。您也可以尝试通过FB.getLoginStatus()this link for more info 对其进行调试。此方法可以让您访问所有访问令牌、FB id 等。这样,您可以尝试比较 FB Id,并在您点击 afterSDK() 方法时查看哪个用户已登录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 2017-07-25
  • 2018-03-26
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多