0

我想使用由Facebook提供的Javascript SDK将活动信息添加到来自第三方网站的Facebook用户个人资料。我只是用Google搜索一些教程,我得到了这个链接将活动信息从第三方网站添加到Facebook个人资料

http://thinkdiff.net/facebook/graph-api-javascript-base-facebook-connect-tutorial/

http://www.masteringapi.com/tutorials/how-to-ask-for-extended-permission-in-your-facebook-application/32/

http://www.masteringapi.com/tutorials/how-to-create-facebook-events-using-graph-api/49/#using_the_js-sdk

我试着登录注销和会话处理的组合

这是代码我只是为了测试它是否有效而运行。

<!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> 

当我点击添加事件页面时,我得到“未定义”。 Iam无法将活动添加到Facebook专业版。请帮助我

回答

1

我会再次尝试您的代码,并且可能在您的addevents函数的回调方法中使用console.log(resp)。我在fbrell.com上测试了你的代码,它看起来和预期一样完美。

编辑:经过一番研究(以及您的固定代码..)我发现fb:登录按钮并不能确保您的应用程序具有perms参数请求的正确权限。我们在做图表请求时发现这一点,并且失败。因此,我们捕获错误,然后通过FB.login方法启动登录模式,并请求获得create_event权限。当用户接受该对话框时,我们重试创建事件。在fbrell.com

<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 
         && response.status == 'connected' 
         && response.perms.match(/create_event/)) 
        { 
         //this user is connected & we have create event permission. 
         create_event(); 
        } 
       }, 
       { 
        perms: 'create_event' 
       }); 
      } 
     }  
    }); 
} 
</script> 

工作代码:http://fbrell.com/saved/17c7b60eab91e6736a2a10c87d53c5b8

+0

嘿感谢,但我想通了这个问题,我下面张贴的答案,你可以去看看。 – 2011-05-04 12:08:05

0
<!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

因此,登录按钮不会验证您是否具有您请求的权限,只是您已登录。是我所看到的吗?如果是这样,我会添加到我的答案,所以它是完整的。 – 2011-05-04 14:30:52

+0

是的,正是JIMR,即使我在这个困惑中,感谢当时世界各地的所有博客作者,博客更多的信息,然后facebook的文档。 !谢谢您的帮助!!! – 2011-05-05 04:56:05

相关问题