2011-09-23 1 views
8

어려운 문제가 있습니다. 어려운 것은 전체 FBJS SDK 설명서와 함께 StackOverflow 및 그물을 검색하여 대답을 찾지 못했음을 의미합니다.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"매개 변수와 함께 사용할 수 없습니다.이 매개 변수는 사용되지 않습니다. " 내가 "다음"매개 변수를 사용하지 않았기 때문에 어느 것이 매우 이상합니다. 그러나 내가 정의되지 않은 다음 집합을 설정하면 잘 작동하지만 창은 표시되지만 "주어진 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에 새로운 앱을 만들어 . 이 코드는 완벽하게 작동합니다. getLoginStatus를 사용할 수 있습니다. 로그인 할 수 있습니다. FB의 컨텍스트에서 작업하고 FB JavaScript SDK를 사용하여 독립 실행 형 웹 사이트에서 어떤 차이가 있습니까? FB JS SDK Documentation에서

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

: 사용자가 로그인되어있는 경우

+0

더 많은 코드를 제공해 주시겠습니까? – ifaour

답변

16

FB.getLoginStatus는 콜백을 발생하지 않습니다. 나는 보통 로컬 또는 스테이징 서버에서 개발할 때 이런 상황에 처한다. 당신이 example.com에 사이트를 등록하면

예를 들어, 스테이징 서버는 example.mystagingserver.com, 콜백 늘 불입니다.이 경우 Facebook에 두 번째 응용 프로그램을 만들고 새 응용 프로그램에 응용 프로그램 ID 및 암호를 사용해야합니다.

+0

무슨 일이 있었는지 모르지만 어제는 앱 설정을 다시 확인했고, App 도메인은 내가 보던 문자열이 아니라 삭제 가능한 레이블로 표시되었습니다. - 보일 - 모든 것이 원활하고 실행중인 컴퓨터로 작동합니다. –

0

당신은 확인하려면 다음 코드를 사용할 수 있습니다.

당신은 준비 jQuery에 전체 코드를 래핑 할 수 있습니다

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

은 또한 당신이 this question StackOverflow을 확인 할 수 있습니다.

+1

그것은 나쁜 부분입니다. 콜백 함수가 원래 질문에서 말한 것처럼 getLoginStatus ...에서 실행되지 않기 때문입니다. 그리고 당신이 언급 한 질문을 읽었지만 도움이되지 않았습니다. –

+0

동일한 문제가 발생했습니다. FB.getLoginStatus는 사용자가 로그인 한 경우에만 호출됩니다. – thesmart

+0

로그인했는데 그런 행운은 없습니다. O –

2

이 코드를 성공적으로 사용하고 있습니다. 차이점은 어디 있는지 모르겠지만 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

시도했지만 도움이되지 않았습니다 ... 어쨌든 고맙습니다. –

3

일부 사용자에게만 발생했지만 동일한 문제가 발생했습니다.

귀하의 앱이 샌드 박스 모드 인 경우 개발자가 아닌 사용자는 여전히 내 앱을 pagetab로 볼 수 있습니다. 그러나 getLoginStatus를 호출하면 자동으로 실패하고 (로깅을 켠 경우에도) 실패합니다.

그 중 하나를 파악하는 동안 잠시만 시간을내어 다른 사람이 시간을 절약 할 수 있기를 바랍니다.

0

나를 위해 광범위한 테스트 후 사용하지 않는 사용자가 표시되지 않습니다 로그인 할 때 대화 상자를 확인할 수있는 유효한 이들은

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

에서 찾을 수 있습니다 Application ID

그냥 당신이 가진 API를 호출해야합니다 정확한 ID.