FB.getLoginStatus不会触发回调函数

问题描述:

我有一个难题。困难的手段,我通过网络和*搜索以及整个FBJS SDK文档,并没有找到答案。FB.getLoginStatus不会触发回调函数

我正在构建一个页面选项卡应用程序,我想让粉丝来rsvp事件。所以我必须检查用户是否登录,如果没有,我必须登录。这听起来很简单,但FB.getLoginStatus不会触发回调函数。这是代码摘录:

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

,然后我简单 - 在用户点击按钮后,当然 - 拨打FB.getLoginStatus,但似乎并没有做任何事情。

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

因此,欢迎任何意见。

感谢, 塔马斯

UPDATE

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 
    } 

}

更新2:我创建了一个新的应用程序在不同的URL,它被配置为一个独立的网站。这些代码完美工作,我可以得到LoginStatus,我可以登录等等。在FB的上下文中以及在独立网站中使用FB JavaScript SDK有什么区别?

+0

你会提供更多的代码吗? – ifaour

FB.getLoginStatus当你在比你注册的应用程序会与一个不同的域中运行的网站不火的回调。当我在本地开发或在临时服务器上进行开发时,我通常会遇到这种情况。

例如,如果您注册了网站与example.com和您的临时服务器是example.mystagingserver.com,回调不会火。在这种情况下,您需要在Facebook中创建第二个应用程序,并为新应用程序使用应用程序ID和秘密。

+0

我不知道发生了什么,但昨天我再次检查了应用程序设置,并将App域显示为可删除的标签,而不是我以前看到的字符串,并且 - voilá - 所有内容都以平滑运行的机器运行。 –

您可以使用下面的代码来检查,如果用户登录:

FB.getLoginStatus(function(response) { 
    if (response.authResponse) { 
     // logged in and connected user, someone you know 
    } else { 
     // no user session available, someone you dont know 
    } 
}); 

FB JS SDK Documentation

可以在jQuery准备整个包住代码:

$('document').ready(function(){ 
    ... above code 
}) 

你也可能要检查this question *

+1

这是坏的部分,因为回调函数不会在getLoginStatus上运行......正如我在原始问题中所说的那样。我读到你提到的问题,但没有帮助。 –

+0

我遇到了同样的问题,只有在用户登录后才会调用FB.getLoginStatus。 – thesmart

+0

我已登录,没有这样的运气:O –

我正在使用此代码,成功。我不太清楚差异在哪里..但是我使用的是ASYNC FB Loader。

window.fbAsyncInit = function() { 
    FB.init({ appId: 'XXXXXX', //change the appId to your appId 
      status: true, 
      cookie: true, 
      xfbml: true, 
      oauth: true}); 

function authEvent(response) { 

    if (response.authResponse) { 
      //user is already logged in and connected 
      FB.api('/me', function(info) { 
       login(response, info); 
      }); 
    } else { 
      //user is not connected to your app or logged out 
      button.onclick = function() { 
      FB.login(function(response) { 
      if (response.authResponse) { 
       FB.api('/me', function(info) { 
        login(response, info); 
       }); 
       } else { 
       //user cancelled login or did not grant authorization 
      } 
     }, {scope:'email,rsvp_event,status_update,publish_stream,user_about_me'});  
        } 
       } 
      } 

      // run once with current status and whenever the status changes 
      FB.getLoginStatus(updateButton); 
      FB.Event.subscribe('auth.statusChange', updateButton); 
     }; 
     (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) { 
       accessToken = response.authResponse.accessToken; 
     userid = info.id; 


       userInfo.innerHTML = '<img src="https://graph.facebook.com/' + info.id + '/picture">' + info.name+"<br /> Your Access Token: " + accessToken; 
      } 
     } 
+0

试过了,但没有帮助...谢谢,反正 –

我刚刚有同样的问题,但它只发生在一些用户。

我终于发现,如果您的应用程序是沙盒模式,那么非开发人员用户仍然可以将您的应用程序视为页面选项卡。但是调用getLoginStatus会静默失败(即使打开日志记录)。

花了一段时间想出来,希望这可以节省别人一些时间。

对我来说,广泛的测试后,可以确认对话框登录的用户将不会显示,除非你使用一个有效的Application ID

这些可以在

https://developers.facebook.com/apps/{{Application__Id}}/settings/ 

发现只要确保你调用与API正确的ID。