#javascript #facebook #facebook-graph-api #facebook-javascript-sdk
#javascript #Facebook #facebook-graph-api #facebook-javascript-sdk
Вопрос:
Я использую Facebook open graph api вместе с JavaScript SDK на моем сайте. Моя цель состоит в том, чтобы пользователь подключился к моему сайту, а затем после выполнения определенных действий на моем сайте опубликовал сообщение facebook stream пользователей. У меня функция facebook connect работает просто отлично. Во время подключения я запрашиваю разрешения электронной почты, publish_stream, offline_access. Я думаю, это все, что мне нужно для того, что я пытаюсь сделать. Теперь, когда пользователь подключается через facebook connect, я получаю и фиксирую facebook access token и secret, хотя я не знаю, что с ними делать.
Согласно некачественной документации Facebook для JavaScript SDK … для выполнения того, что я пытаюсь сделать, в нем говорится об использовании следующего кода:
var body = 'Reading Connect JS documentation';
FB.api('/me/feed', 'post', { message: body }, function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('Post ID: ' response.id);
}
});
Я делаю это просто в качестве теста, и вместо того, чтобы предупреждать ответ, я строкую ответ в формате JSON и записываю на консоль. Достаточно сказать, что публикация потока завершается неудачно, и ответ таков:
{"error":{"type":"OAuthException","message":"An active access token must be used to query information about the current user."}}
Если пользователь «подключен» к моему сайту через facebook connect и принял все указанные мной разрешения, разве у меня нет действительного токена доступа? Является ли токен доступа еще одним параметром, который я должен передать в вызов api?
Ответ №1:
Убедитесь, что все это есть на странице:
<BODY>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script type="text/javascript">
FB.init({
appId : APP_ID, // the app ID you get when you register your app in http://www.facebook.com/developers/
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
if (FB.getSession() != null) {
var body = 'Reading Connect JS documentation';
FB.api('/me/feed', 'post', { message: body }, function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('Post ID: ' response.id);
}
});
}
</script>
Комментарии:
1. Спасибо за ответ. Я почти уверен, что FB API полностью загружен, поскольку я возвращаю действительный JSON из вызова API. У меня тот же вызов FB.init ({}), что и у вас там. Смотрите мой комментарий к сообщению @ Josh выше для получения дополнительной информации.
2. Хорошо, я вижу свою проблему. Я не вызывал FB.init(). Спасибо!
3. ПРИМЕЧАНИЕ: Вы никогда не должны использовать этот метод во время загрузки страницы. Как правило, безопаснее использовать FB.getLoginStatus(), если вы не уверены. ( developers.facebook.com/docs/reference/javascript/FB.getSession )
Ответ №2:
Приведенный выше код работал у меня с разрешением publish_stream. Убедитесь, что код не запущен до того, как javascript api получит токен доступа. Выполнить:
console.log(FB.getSession())
непосредственно над вызовом FB.api, чтобы убедиться, что у вас есть access_token.
Комментарии:
1. Спасибо за ответ. Я пошел дальше и разместил ваш фрагмент кода прямо над телом var… строка кода, и консоль выдает ‘undefined’, что характерно для меня, потому что непосредственно перед переходом на страницу, где находится этот фрагмент кода, я вошел в Facebook Connect… есть предложения?
2. Беру свои слова обратно, я не вызывал FB.init() на странице.