FB.getLoginStatus not calling its callback

帅比萌擦擦* 提交于 2019-12-21 07:07:18

问题


The title really says it all. Under some (undetermined) conditions FB.getLoginStatus() just stops working and won't invoke the callback I gave it. The only interesting clues I've found are

  • FB.Auth._loadState is stuck on "loading" -- whatever is supposed to make it click over to "loaded" isn't happening
  • slight delays like putting in alert() calls tend to make it start working

Any hints at all about even how to investigate this welcome.


回答1:


This usually happens for me when I am running the page under a different domain from what has been registered in Facebook. Typically this is when I am developing locally.

If you are running locally, you'll have to set up a local web server and then modify your hosts file to point the the registered domain to 127.0.0.1 in order to test on your local machine. Don forget to remove that line from the hosts file when you want to test it on the server.




回答2:


According to:

https://developers.facebook.com/bugs/240058389381072

You cannot put your application under sandbox mode, or else it won't work. Go into your app settings, advanced, and switch it. This stumped me for a couple hours until I happened upon the bug report.




回答3:


I had similar problem with FB API. It turned out, that my Facebook App was misconfigured. Please make sure that this is not the case for you. My problem was that my "Site URL" param in FB application was pointing to https, but I was using http protocol for development. Any call against FB api after FB.init was not calling my callback functions. So the first thing to do should be to double check App config.

Now, if some reason you depend on FB api but you wish to have a fallback option in case it;s inoperative - workaround with timer should be ok for you. Just set up a timer and disable it if FB Api gives you proper response. If not - fallback to some custom function which will perform some additional logic.

 function callFbApi() {
    var timeoutHandler = setTimeout(function() { requestFailed(); }, 1000);

    function requestFailed() {
        // When this happens, it means that FB API was unresponsive
        doSomeFallbackWork();
        alert('hey, FB API does not work!');
    }

    FB.getLoginStatus(function(response) {
        clearTimeout(timeoutHandler); // This will clear the timeout in case of proper FB call
        doSomeUsualWorkAfterFbReplies();

        return false;
    }, true);
 }



回答4:


If your application is in sandbox mode, Facebook acts as if your application is invisible to anyone who is not listed as an application developer. If you're not logged in, then it would stand to reason that your app is now invisible.

The callback will only fire if you're initializing with a visible application. Otherwise the following response is returned:

<span>Application Error: There was a problem getting data for the application you requested. The application may not be valid, or there may be a temporary glitch. Please try again later. </span>

For more info please see my comment on this bug ticket: https://developers.facebook.com/bugs/240058389381072




回答5:


Maybe you are using the asynchronous call. The same thing happened when I called FB.init with window.fbAsyncInit. All I did was delay the FB.getLoginStatus with a setTimeout function

  window.setTimeout(checkLogStatus, 1000);


  function checkLogStatus(){
          alert("check");
          // fetch the status on load      
          FB.getLoginStatus(handleSessionResponse);
  }

It seemed to work after that




回答6:


On the new version of the Developer app, you have to make sure to have put the correct URL you are using to access the application in the Website field under the

Select how your app integrates with Facebook

section.




回答7:


Make sure the protocol is HTTPS and not HTTP.




回答8:


I had a similar problem. The site worked every time when I was opening the browser, but fails when I tried to reload.

The cause was the missing "www" on the site name on Facebook configurations. Note that putting "www" (like www.yoursite.com) works on both situations (yoursite.com or www.yoursite.com).




回答9:


As others have posted, you must be accessing your site at the same URL that facebook expects. For example if facebook has a callback "example.com" but you're browser has "www.example.com", that can cause this problem.

In addition, if third-party cookies are not allowed by your browser, you may also see this problem. Or you may see the callback erroneously reporting the user is not connected.




回答10:


Just posting a situation I had were calling FB.getLoginStatus got absolutely no response.

My application is designed to run in a tab, and I only entered the Page Tab URLs on the app admin page, and not the App On Facebook (i.e. Canvas) URLs. The tab loads perfectly, but any calls to the FB JS SDK provoke no response.




回答11:


In Facebook App Settings, go to Client OAuth Settings, look at Valid OAuth redirect URIs

Make sure you have listed all URIs which are the domains from which Facebook SDK is being invoked. For example:

I develop at localhost:5000 and deploy to Heroku. Notice the format: http://domain.name/



来源:https://stackoverflow.com/questions/5189203/fb-getloginstatus-not-calling-its-callback

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!