페이스북 앱 개발 과정 및 SDK 등에 대해 정리한다.
페이스북 사이트에서 실행되는 앱인 canvas 앱 개발에 대해 살펴본다.
페이스북 앱 개발을 위해선 최소 아래의 환경이 필요하다.
웹서버에 https를 위한 인증서를 복사하고 https 접속 설정까지 하는 것이 좋다. 페이스북의 앱 URL로 들어가면 자동으로 https 사이트로 리다이렉트되기 때문이다. 만약 연결된 앱 페이지가 http 프로토콜로만 접속이 가능하다면 보안 문제로 자바스크립트 코드가 실행되지 않을 수 있다.
모든 환경이 준비되면 페이스북 개발자 페이지로 들어가 앱을 추가하고 Settings 페이지에서 Canvas 플랫폼을 추가한다.
먼저 index 페이지의 <head> 태그에서 페이스북 SDK 코드를 불러온다.
<script src="//connect.facebook.net/en_US/sdk.js"></script>
그리고 html 문서가 로드된 후 페이스북 SDK를 초기화한다.
$( document ).ready(function() { FB.init({ appId: YOUR_APP_ID, frictionlessRequests: true, status: true, version: 'v2.0' }); FB.Event.subscribe('auth.authResponseChange', onAuthResponseChange); FB.Event.subscribe('auth.statusChange', onStatusChange); });
FB.Event.subscribe() 함수는 이벤트와 이벤트 핸들러를 연결한다. FB.Event.subscribe('auth.authResponseChange', onAuthResponseChange);
는 auth.authResponseChange 이벤트가 발생하면 onAuthResponseChange() 이벤트 핸들러를 실행한다.
이벤트 핸들러는 다음과 같이 작성한다.
function login(callback) { FB.login(callback); } function loginCallback(response) { console.log('loginCallback',response); if(response.status != 'connected') { top.location.href = 'https://www.facebook.com/appcenter/YOUR_APP_NAMESPACE'; } } function onStatusChange(response) { if( response.status != 'connected' ) { login(loginCallback); } else { showHome(); } } function onAuthResponseChange(response) { console.log('onAuthResponseChange', response); }
위 코드는 아래와 같이 동작한다.
Graph API는 페이스북 사용자의 각종 정보를 얻어올 수 있는 API이다. FB.api()
함수를 이용하여 Graph API를 호출할 수 있다.
var friendCache = {}; function getMe(callback) { FB.api('/me', {fields: 'id,name,first_name,picture.width(120).height(120)'}, function(response){ if( !response.error ) { friendCache.me = response; callback(); } else { console.error('/me', response); } }); }
위 함수는 /me 엔드포인트를 통해 유저의 정보를 가져온다. 그리고 me 대신 페이스북 유저의 id를 넣으면 해당 유저의 정보를 가져올 수 있다. Graph API는 비동기적으로 호출됨에 유의한다. 즉, FB.api() 함수를 실행하면 파라메터의 콜백함수를 통해 Graph API가 호출된다.
주의사항 : Graph API 호출에 대한 응답 데이터인 response가 data 변수 안에 데이터를 포함할 수도 있다. 예를 들어 /me/permission 엔드포인트로 permission 리스트를 가져오면 다음과 같은 형태의 데이터를 가져오게 된다.
"data": [ { "permission": "installed", "status": "granted" }, { "permission": "public_profile", "status": "granted" }, { "permission": "user_friends", "status": "granted" } ]
페이스북의 공식 튜토리얼에는 이 부분이 틀려 permissions을 제대로 가져올 수 없었다. Graph API의 버전이 2.0으로 바뀌면서 생긴 오류인 것으로 추측. web-friend-smash-v2 예제의 FB.api() 함수 사용 부분을 참고하자. 더 좋은 것은 Graph Explorer로 데이터를 직접 확인해보는 것!
FB.login() 함수를 호출할 때 다음과 같이 permission을 요청할 수 있다.
function login(callback) { FB.login(callback, {scope: 'user_friends'}); }
위 함수는 user_friends 권한을 요청한다. Permission을 추가로 얻게 되면 Graph API 호출을 통해 얻을 수 있는 정보도 더 많아진다. Graph API 호출을 통해 얻는 데이터는 개발자 페이지 - Tools - Graph Explorer 페이지에서 확인해볼 수 있다. 다음 페이지도 참고.
특정 권한을 갖고 있는지 확인하려면 다음과 같이 한다.
function hasPermission(permission) { for( var i in friendCache.permissions ) { if( friendCache.permissions[i].permission == permission && friendCache.permissions[i].status == 'granted' ) return true; } return false; }
물론 그 전에 permissions 데이터를 FB.api() 함수로 가지고 와야 한다.
이곳을 참고
이곳을 참고