Обратный вызов, когда JS SDK инициализирован и готов к вызовам API - PullRequest
2 голосов
/ 31 августа 2011

Я загружаю JS SDK async и запускаю FB.init внутри обратного вызова fbAsyncInit.После запуска FB.init я хочу сделать вызов API как можно скорее, но при выполнении вызова API сразу после FB.init я получаю следующее OAuthException

Object {type = "OAuthException", message = "Активный токен доступа должен использоваться для запроса информации о текущем пользователе."}

Если я задерживаю вызов API на X секунд, он работает.Итак, как мне получить обратный вызов, когда SDK готов к вызовам API?

См. Пример кода ниже.Аргумент «authResponse» для FB.init генерируется 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 голосов
/ 31 августа 2011

Если вы подписываетесь на событие auth.statusChange сразу после вызова FB.init, я считаю, что оно вызывается при получении сеанса, и тогда безопасно использовать FB.api. Подробнее см. Документы на FB.Event.subscribe.

...