0

facebook에서 제공하는 Javascript SDK를 사용하여 타사 웹 사이트에서 Facebook 사용자 프로필에 이벤트 정보를 추가하려고합니다. 난 그냥 몇 가지 튜토리얼 봤 나는 이것이 내가 처리 로그인 로그 아웃 및 세션의 조합을 시도이벤트 정보를 타사 웹 사이트의 Facebook 프로필에 추가하십시오.

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

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> 

이벤트 추가 페이지를 클릭하면 "정의되지 않음"이 표시됩니다. 페이스 북에 이벤트를 추가 할 수 없습니다. 친절하게 도와주세요

답변

1

addevents 함수에 대한 콜백 메소드에서 다시 코드를 시도하고 console.log (resp)를 사용하려고합니다. fbrell.com에서 코드를 테스트 한 결과 예상대로 완벽하게 작동하는 것으로 보였습니다.

작은 연구 (및 고정 코드 ..) 후 편집 : fb : login 버튼으로 인해 응용 프로그램에 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

감사 헤이하지만, 난 당신이 모양을 가질 수 대답은 아래를 게시하고있다. –

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

로그인 버튼은 내가 로그인 한 것뿐 아니라 요청한 권한을 가지고 있는지 확인하지 않습니다. 그렇다면 답을 추가하여 완성합니다. –

+0

네, 정확히 JIMR이었습니다. 전 세계의 모든 블로거 덕분에 혼란 스러웠습니다. 블로그는 더 유익한 정보였습니다. !!! 도와 주셔서 감사합니다!!! –

관련 문제