2011-12-13 3 views
2

FB.init 바로 다음에 FB.api가 호출되면 작동하지 않습니다. 여기에 내가 코드를 사용한다 : 여기FB.init 바로 다음에 호출하면 FB.api가 작동하지 않습니다.

window.fbAsyncInit = function() { 
    FB.init({ 
    appId : window.APP_ID, 
    status : true, 
    cookie : true, 
    oauth : true, 
    channelUrl : window.MASTER_URL + "channel", 
    frictionlessRequests : true 
    }); 

    window.COMPANY.init(); 
}; 

(function() { 
    var e = document.createElement('script'); 
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
}()); 

그리고를 내 COMPANY.init()와 COMPANY.fetchAllFriends() : 응답이 말한다 오류가있는 경우 fetchAllFriends에서

friends: new Array(), 

init : function() { 
    // TODO 

    COMPANY.fetchAllFriends(); 

    FB.Canvas.setSize($(document).height()); 
    FB.Canvas.setAutoGrow(); 
},  

fetchAllFriends : function() { 
    FB.api('/me/friends', function(response) { 
    if (!response || response.error) { 
     return; 
    } 

    COMPANY.friends = new Array(); 
    $.each(response.data, function(index, value) { 
     COMPANY.friends.push(value.id); 
    }); 
    }); 
}, 

"활성 액세스 토큰은 현재 사용자에 대한 정보를 쿼리하는 데 사용해야합니다. " 필자는 FB.api를 호출하기 전에 FB.init가 호출되었다고 (브라우저 디버거를 통해) 확인했습니다.

도움이 될 것입니다!

답변

5

좋아, 문제가 해결되었습니다. 나는 변경 :

window.fbAsyncInit = function() { 
    FB.init({ 
    appId : window.APP_ID, 
    status : true, 
    cookie : true, 
    oauth : true, 
    channelUrl : window.MASTER_URL + "channel", 
    frictionlessRequests : true 
    }); 

    FB.Event.subscribe('auth.login', window.COMPANY.init); 
}; 

경우 다른 사람이 알고 싶어

window.fbAsyncInit = function() { 
    FB.init({ 
    appId : window.APP_ID, 
    status : true, 
    cookie : true, 
    oauth : true, 
    channelUrl : window.MASTER_URL + "channel", 
    frictionlessRequests : true 
    }); 

    window.COMPANY.init(); 
}; 

에. FB JS SDK는 FB.init가 반환 될 때까지 사용자 세션을 구성하지 않았으므로 init 함수를 사용하여 'auth.login'이벤트에 가입해야합니다. 더 많은 정보 here

2

사용자의 상태를 확인하는 것으로 보이지 않습니다. 당신이하고있는 일은 페이스 북을 초기화하는 것 뿐이다. 사용자가 페이스 북에 로그인했는지 페이스 북 계정을 가지고 있는지조차 모른다. FB.getLoginStatus를 호출하고 이들이 "연결되어 있는지"확인해야합니다. 연결되어 있지 않으면 액세스 토큰을 얻을 수있는 방법이 없습니다. 연결되어 있으면 액세스 토큰을 얻습니다.

+0

FB.getLoginStatus를 명시 적으로 호출하거나 호출에 토큰을 넣지 않아도 페이지가로드 된 후 호출 될 때 'fetchAllFriends'메소드가 완벽하게 작동하는 이유는 여기에 설명되어 있지 않습니다. .. –

+0

내 앱이 Facebook 캔버스 페이지에 포함되어 있고 사용자를 인증하는 디스패치 페이지 뒤에 있기 때문에 위의 메소드가 호출 될 때 사용자가 Facebook에 로그인했는지 확인해야합니다. –

+1

나는 여전히 getLoginStatus를 호출하고 당신이 필요로하는 것을 콜백 함수에 넣는 것을 제안 할 것이다. 그것은 모든 것이 준비되었음을 보증합니다. 하지만 그렇게하고 싶지 않으면 FB.Event.subscribe를 사용하는 것이 좋습니다. 아마도 auth.statusChange를 구독하는 것입니다. 파견 페이지가 있어도 Facebook은 여전히 ​​사용자 상태를 확인해야합니다. 페이스 북은 파견 페이지가 있다는 것을 모릅니다. –

관련 문제