FB.getLoginStatus不会触发回调函数

Sán*_*más 12 facebook oauth facebook-graph-api facebook-oauth

我有一个难题.困难意味着我搜索了网络和StackOverflow以及整个FBJS SDK文档并且没有找到答案.

我正在构建一个Page Tab应用程序,我想让粉丝们参加rsvp活动.所以我必须检查用户是否已登录,如果不是,我必须登录.这听起来很简单,但FB.getLoginStatus不会触发回调函数.这是代码摘录:

FB.init({
   appId: window.appID,
   status: true,
   xfbml: true,
   cookie: true,
   oauth: true,
   channelUrl: 'http://example.com/fb/channel.html'
 }); 
Run Code Online (Sandbox Code Playgroud)

然后我只是 - 当然在用户点击一个按钮后 - 调用FB.getLoginStatus,但它似乎没有做任何事情.

我已经检查了沙盒模式,FB.init成功,应用程序设置中的URL和开发环境.我可以调用FB.ui,尽管FB.ui的方法是:'oauth'我收到一条错误消息,说""redirect_uri"参数不能与"next"参数一起使用,这个参数已被弃用." 这很奇怪,因为我没有使用"next"参数.但是当我在undefined旁边设置时,它工作正常,我得到了窗口,但它说"应用程序配置不允许给定URL.".期待,我可以登录,然后我有access_token.但是在新窗口中,getLoginStatus仍然没有做任何事情.

所以欢迎任何建议.

谢谢,塔马斯

更新:

function onBodyLoad() { //on body onload
    FB.init({
     appId: window.appID,
     status: true,
     xfbml: true,
     cookie: true,
     oauth: true,
     channelUrl: 'http://example.com/fb/channel.html'
    });     
   }
...
function getName() { // on button onclick
 FB.getLoginStatus(function(response){
  if (response.authResponse)
   {
    window.loggedIn = true;
    debugString('Logged in');
   } else
   {
    window.loggedIn=false; 
    debugString('Not logged in');
   }
}, true);
if (window.loggedIn === undefined)   {
     debugString('getLoginStatus did not exec'); // I always get this message
  }
Run Code Online (Sandbox Code Playgroud)

}

更新2:我在不同的URL上创建了一个新的应用程序,该URL被配置为独立的网站.这些代码完美无缺,我可以获取登录状态,我可以登录等等.在FB的上下文中,在独立网站中使用FB JavaScript SDK有什么区别吗?

Jef*_*eff 23

FB.getLoginStatus当您在与注册应用程序的域不同的域上运行网站时,不会触发回调.当我在本地或登台服务器上进行开发时,我经常发现自己处于这种情况.

例如,如果您使用example.com注册该站点,并且您的登台服务器是example.mystagingserver.com,则回调不会触发.在这种情况下,您需要在Facebook中创建第二个应用程序,并为新应用程序使用应用程序ID和密钥.