JS SDK初始化并准备进行API调用时的回调

时间:2011-08-31 14:05:46

标签: javascript sdk facebook-javascript-sdk

我正在加载JS SDK异步并在fbAsyncInit回调中运行FB.init。在运行FB.init之后,我想尽快进行API调用,但是在FB.init之后执行API调用时,我得到以下OAuthException

  

Object {type =“OAuthException”,message =“必须使用活动访问令牌来查询有关当前用户的信息。”}

如果我用X秒延迟API调用它可以工作。那么,当SDK准备好进行API调用时,如何获得回调?

请参阅下面的代码示例。 FB.init的参数“authResponse”由PHP SDK(getSignedRequest())生成。

<!DOCTYPE html>
<html>

<button onclick="getMe();">Get me</button>

<script>
    function getMe() {
        FB.api('/me', function(response) {
            console.log(response);
        });
    }
</script>

    <div id="fb-root"></div>
    <script style="text/javascript">
    window.fbAsyncInit = function() {
        console.log("fbAsyncInit called");
        FB.init({appId: "XXX", status: true, cookie: false, authResponse: {"algorithm":"HMAC-SHA256","expires":1314802800,"issued_at":1314798072,"oauth_token":"XXX","user":{"country":"se","locale":"en_US","age":{"min":21}},"user_id":"XXX"}, oauth: true, xfbml: true});
        FB.api("/me", function(response) {console.log(response);});
    };
    (function() {
        var e = document.createElement("script"); e.async = true;
        e.src = document.location.protocol + "//connect.facebook.net/en_GB/all.js";
        document.getElementById("fb-root").appendChild(e);
    }());
</script>
</body>
</html>

1 个答案:

答案 0 :(得分:-1)

如果您在调用auth.statusChange后立即订阅FB.init事件,我相信当您获得会话时会调用它,然后可以安全地使用FB.apiFB.Event.subscribe {{1}}了解更详细信息。