#javascript #facebook #facebook-graph-api #facebook-javascript-sdk
#javascript #Facebook #facebook-graph-api #facebook-javascript-sdk
Вопрос:
Я пытаюсь добавить информацию о событиях в профиль пользователей facebook со стороннего веб-сайта, используя Javascript SDK, предоставленный facebook. Я просто погуглил несколько руководств и получил эти ссылки
http://thinkdiff.net/facebook/graph-api-javascript-base-facebook-connect-tutorial/
Я пытался использовать комбинацию входа, выхода из системы и обработки сеанса
это код, который я запускаю, просто чтобы проверить, работает он или нет.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function()
{
FB.init({
appId: '207712505927107',
status: true,
cookie: true,
xfbml: true
});
/* All the events registered */
FB.Event.subscribe('auth.login', function(response) {
// do something with response
login();
});
FB.Event.subscribe('auth.logout', function(response) {
// do something with response
logout();
});
FB.getLoginStatus(function(response)
{
if (response.session)
{
// logged in and connected user, someone you know
login();
}
});
};
(function()
{
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol
'//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
function login()
{
FB.api('/me', function(response)
{
document.getElementById('login').style.display = "block";
var loggedInMessage = response.name " successfully logged in!";
document.getElementById('login').innerHTML = loggedInMessage;
});
}
function logout()
{
document.getElementById('login').style.display = "none";
}
//addevent to facebook profile
function addevents()
{
FB.api('/me/events', 'post', {
name: "JS-SDK Event",
start_time: 1272718027,
location: "Beirut",
privacy_type: "OPEN"
}, function(resp) {
alert(resp.id);
});
}
</script>
<p>
<fb:login-button
autologoutlink="true"
perms="email,user_birthday,status_update,publish_stream,create_event">
</fb:login-button>
</p>
<p>
<a href="#" onclick="addevents(); return false;">Add Events</a>
</p>
<br />
<br />
<br />
<br />
<div id="login" style ="display:none"></div>
<div id="name"></div>
</body>
</html>
Когда я нажимаю на страницу добавления события, я получаю «undefined». Я не могу добавлять события в facebook profle. Пожалуйста, помогите мне
Ответ №1:
Я бы попробовал ваш код еще раз и, возможно, console.log (соответственно) в вашем методе обратного вызова функции addevents. Я тестировал ваш код на fbrell.com и это, казалось, работало отлично и так, как ожидалось.
редактировать: после небольшого исследования (и вашего исправленного кода ..) Я обнаружил, что кнопка fb: login не гарантирует, что ваше приложение имеет правильные разрешения, которые запрашивает параметр perms. Мы обнаруживаем это, когда выполняем запрос Graph, и он завершается неудачей. Итак, мы перехватываем ошибку, а затем запускаем модальный вход с помощью FB.login
метода и запрашиваем create_event
разрешение. Когда пользователь принимает это диалоговое окно, мы повторяем попытку создания события.
<fb:login-button
autologoutlink="true"
perms="email,user_birthday,status_update,publish_stream,create_event">
</fb:login-button>
<a href="#" id="create_event" onclick="create_event();">create</a>
<script>
FB.XFBML.parse();
document.getElementById('create_event').onclick = function() { create_event(); }
function create_event()
{
FB.api('/me/events', 'post', {
name: "JS-SDK Event",
start_time: 1272718027,
location: "Anywhere USA",
privacy_type: "OPEN"
}, function(resp) {
if (typeof resp.error != 'undefined')
{ /*this failed. most likely because we don't have the extended permission
for create_event. so lets check for it, ask for it, and try to create
the event again. but first, we'll make sure that the error message says
something about 'create_event' so we don't launch an infinite loop
*/
if (resp.error.message.match(/create_event/))
{
FB.login(function(response)
{
if (response.session
amp;amp; response.status == 'connected'
amp;amp; response.perms.match(/create_event/))
{
//this user is connected amp; we have create event permission.
create_event();
}
},
{
perms: 'create_event'
});
}
}
});
}
</script>
Рабочий код на fbrell.com:http://fbrell.com/saved/17c7b60eab91e6736a2a10c87d53c5b8
Комментарии:
1. привет, спасибо, но я разобрался с проблемой, я публикую ее ниже в качестве ответа, который вы можете посмотреть.
Ответ №2:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({appId: '207712505927107', status: true, cookie: true, xfbml: true});
/* All the events registered */
FB.Event.subscribe('auth.login', function(response) {
// do something with response
login();
});
FB.Event.subscribe('auth.logout', function(response) {
// do something with response
logout();
});
FB.getLoginStatus(function(response) {
if (response.session) {
// logged in and connected user, someone you know
login();
}
});
};
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol
'//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
function login(){
FB.api('/me', function(response) {
document.getElementById('login').style.display = "block";
document.getElementById('login').innerHTML = response.name " succsessfully logged in!";
});
}
function logout(){
document.getElementById('login').style.display = "none";
}
//add events
function addevents() {
FB.api('/me/events','post',{
name:"awesome event",
start_time:1272718027,
location:"Bengaluru",
privacy_type:"OPEN",
description:"U r invited !!!"
}, function(resp) {
document.write(resp.id);
});
}
//checking persmission
function check_perm() {
FB.api({ method: 'users.hasAppPermission', ext_perm: 'create_event' }, function(resp)
{
if (resp === "1") {
alert('Permission granted');
} else {
alert("Permission not granted");
}
});
}
</script>
<p>Please click on Login button first </p>
<p><fb:login-button autologoutlink="true" perms="create_event"></fb:login-button></p>
<p> Please click on check permissions first </p>
<a href="#" onclick="check_perm(); return false;"> check permissions </a>
<p> now u r all set to add events to facebook </p>
<p>
<a href="#" onclick="addevents(); return false;"> Add Events </a>
</p>
<br /><br /><br />
<div id="login" style ="display:none"></div>
<div id="name"></div>
</body>
</html>
Комментарии:
1. Таким образом, кнопка входа не подтверждает, что у вас есть запрашиваемые разрешения, а только то, что вы вошли в систему. это то, что я вижу? если это так, я добавлю это к своему ответу, чтобы он был полным.
2. да, именно JIMR, даже я был в таком замешательстве, благодаря всем блоггерам по всему миру, блоги более информативны, чем документация facebook. !!! спасибо за помощь!!!