|
대략 이런정도 내용을 볼수 있습니다. 여기서,
이 세가지 항목을 익혀두세요. 앞으로 이 내용을 프로그램에서 사용하게 됩니다. 여기까지 한 후에는
http://apps.facebook.com/내 앱 이름/
http://내 앱 주소/
이 두가지를 주소창에 쳣을때 페이지가 나타나야 합니다. 다시 강조하건데
1. 주소는 슬래시로 끝나도 나타나는 페이지여야 합니다.
2. 반드시 get/post등 verb를 이해하는 파일이어야 합니다. 다시말해 asp, php같은 서버페이지여야 합니다. 아직까지 서버코드를 사용한적이 없더라도 말이죠.
[단계3: 자바스크립트로 사용자인증 받기]
지금까지 잘되었다면 이제 사용자로부터 인증을 얻어내는 단계입니다. 다시말해 내 프로그램으로 하여금 사용자정보에 액세스할 권한을 얻는 과정입니다. 앞서 보았던 두 변수,
var _perms = 'email,read_stream,publish_stream';
var auth_u = 'https://graph.facebook.com/oauth/authorize?client_id=[139682712752669]&redirect_uri=[http://www.docu1.com/apps/face2/]&type=user_agent&display=popup&scope=' + _perms;
이 변수가 중요한 역할을 합니다. 위에건 허락받을 내용이고, 아래건 허락받는 주소입니다. 스크립트 중에서 두번째 변수 auth_u에서 []로 둘러쌓인 부분 두 곳을 여러분의 어플리케이션ID와 앱주소로 바꿔주세요. 그리고 괄호 []는 삭제합니다.
그리고 스크립트 블럭 전체를 아래와 같이 채웁니다.
var a_token;
var _perms = 'email,read_stream,publish_stream';
var auth_u = 'https://graph.facebook.com/oauth/authorize?client_id=178011625555277&redirect_uri=http://www.docu1.com/apps/face2/&type=user_agent&display=popup&scope=' + _perms;
function load1() {
var u1 = document.URL;
try {
if (u1.indexOf('#access_token=') > 0) {
var re = /access_token=[^&]+/;
a_token = re.exec(u1)[0];
alert(a_token);
}
else if (u1.indexOf('?error') > 0) {
alert('Rejected!');
}
else {
window.location.href = auth_u;
}
}
catch (e) {
alert(e.Message);
}
}
그리고 페이지가 로드될때 위 load1() 함수를 실행하는 코드를 한줄 넣어주세요. 이부분은 에디터 쓰기제한으로 인해 안써지네요.
스크립트는 다음과 같은 일을 합니다.
1. 처음 로드될때 auth_u의 주소로 리다이렉션한다.
이 의미는 사용자로부터 내 프로그램을 허가받는 모듈로 이동하는 것입니다.
2. 만약 사용자가 내 프로그램을 허락했으면 (u1.indexOf('#access_token=') > 0) access_token을 얼럿
3. 만약 사용자가 내 프로그램을 불허하면 불허햇다는 메시지.
성공햇을때 메시지는 이런식으로 나타날거에요.
access_token=178011625555277%7C2.IQHWgWivQuIVEt2l0feE2g__.3600.1293789600-100000238823906%7C5q-oWvLrOGTnEmDeEaLs_bzv4_M
여러분의 프로그램의 첫사용자는 아마도 여러분 자신일것이므로 허락을 할것입니다~ 그래서 access_token을 메시지로 볼수있다면 성공입니다. 이 access_token만 잇으면 뭐든지? 할수잇습니다. 유저의 계정정보, 친구리스트, 글올리기 등등. 허락은 한번만 받으면 다음부터는 또묻지 않습니다.
유저로부터 좀더많은 사용허가를 받으려면,
var _perms = 'email,read_stream,publish_stream,offline_access,status_update,photo_upload,create_event,rsvp_event,sms,video_upload,create_note,share_item';
이런 여러가지 허가리스트중에서 적당한걸 골라보세요. 단 불필요하게 많은 허락을 요구하면 거절의 이유가 됩니다.
[단계4: access_token을 사용하여 사용자 계정정보를 가져오거나 포스팅하기]
그동안 우리가 한것은 클라이언트 사이드에서 자바스크립트를 통해 인증토큰을 가져오는 것이었습니다. 서버사이드에서는 같은 일을 훨씬 효율적으로 할수 있습니다. 이 문제는 나중에 설명하기로 하고, 우선 우리가 가진 인증토큰으로 사용자 계정정보를 가져오거나 사용자 담벼락에 포스팅해보기로 합니다.
여기서부터는 서버코드를 필요로 합니다. 이론적으로는 클라이언트 사이드에서 가능하지만 보안장벽을 뚫기가 어려워서 서버코드로 갑니다. 저는 ASP.NET을 사용하지만, 서버측 코드가 워낙 간단하고 가장 일반적인 메소드이므로 어떤 서버코드이든 큰 문제가 없을거에요.
우선 클라이언트 HTML페이지를 좀 고칩니다. 우선 BODY부분,
<ol style='text-align:left;'>
<li><a href='#' [안내]태그제한으로등록되지않습니다-xxonclick='get_face("get", this)'>https://graph.facebook.com/me</a></li>
<li><a href='#' [안내]태그제한으로등록되지않습니다-xxonclick='get_face("get", this)'>https://graph.facebook.com/me/friends</a></li>
<li><a href='#' [안내]태그제한으로등록되지않습니다-xxonclick='get_face("post", this)'>https://graph.facebook.com/me/feed</a></li>
</ol>
이걸 삽입합니다. 몇가지 URL이 나오는데 이것들은 각각
1. 내 계정정보를 가져온다
2. 내 친구 리스트를 가져온다
3. 내 담벼락에 글을 쓴다
이런 일을 하는 주소들입니다. 이외에도 많이 있지만 강의 목적상 이정도로 충분하다고 봅니다.
각 리스트항목을 클릭하면 자바스크립트 GET_FACE() 함수로 현재 개체와 메소드(get or post)를 전달합니다. 인제 get_face() 함수는 이렇게 생겻습니다. 다음 스크립트를 앞서 페이지의 스크립트 블럭에 삽입합니다.
function get_face(method1, this1) {
var u2 = "../face/face1.ashx?method=" + method1 + "&uri=" + encodeURI(this1.innerHTML) + "&" + a_token;
this1.href = u2;
this1.target = '_blank';
}
이 함수는 현재 링크의 URL을 설정합니다. 그리고 서버코드에 메소드와 현재리스트의 url, access_token을 전달합니다. a_token or access_token은 앞서 페이지가 로드될때 이미 설정되엇다는걸 상기하세요.
이 호출을 받는 서버코드는 다음과 같습니다. get방식과 post방식인데, get1()은 가져오기만 하는것, post1()은 담벼락에 글을 쓰는 코드입니다. 둘 다 전달된 method(get or post)를 verb로 선택해주고, 전달된 url과 access_token으로 그냥 호출하는것밖에 없습니다. 호출결과물은 JSON이라는 문자열포멧으로 떨어지는데 약간 난잡하기때문에 제가 XML로 바꿔주는 부분이 한두줄 더 들어갑니다. 여러분은 그대로 보여도 됩니다.
private void get1(string uri1, string a_token)
{
HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create(uri1 + "?access_token=" + a_token);
wReq.Method = "GET";
HttpWebResponse response = (HttpWebResponse)wReq.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader sr = new StreamReader(stream);
string s = sr.ReadToEnd();
XmlDocument doc = (XmlDocument)JsonConvert.DeserializeXmlNode(s, "x");
HttpContext.Current.Response.Write(doc.OuterXml);
}
private void post1(string uri1, string a_token)
{
HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create(uri1);
wReq.Method = "POST";
string postData = string.Format("access_token={0}&message=HelloFromApp", a_token);
UTF8Encoding encoding = new UTF8Encoding();
byte[] byte1 = encoding.GetBytes(postData);
wReq.ContentType = "application/x-www-form-urlencoded";
wReq.ContentLength = byte1.Length;
Stream newStream = wReq.GetRequestStream ();
newStream.Write (byte1, 0, byte1.Length);
newStream.Close();
HttpWebResponse response = (HttpWebResponse)wReq.GetResponse();
Stream stream2 = response.GetResponseStream();
StreamReader sr = new StreamReader(stream2);
string s = sr.ReadToEnd();
XElement ele = new XElement("posted");
if (s != null)
{
ele.Add(new XElement("return-msg", s));
}
HttpContext.Current.Response.Write(ele.ToString());
}
이상의 모든 절차들은 제가 이 코드들을 구현해놓은 다음 주소에서 테스트할수 있습니다.
http://apps.facebook.com/mokdong/
의문점이나 안되는 부분이 생기면 댓글로 알려주세요. 또는 더빠른 응답은 저에게 친구신청을 해서 담벼락에 올려주세요.
http://www.facebook.com/officetel/
제가 다음에 기회가 된다면 서버사이드 코드를 통한 인증을 올리려 합니다. 그럼 이만.
첫댓글 와우.... 감사 감사... 고맙습니다.... 제가 이 [페이스북사용자모임] 카페를 개설한 게 지난 6월 중순경이었는데, 근 반 년 만에 처음으로 자발적인 [개발자 정보]가 올라온 사례입니다... 그 동안 좋은 정보나 포스트를 발견해 당사자의 허락을 받아서 퍼온 사례는 몇 번 있는데, 이처럼 직접 긴 글을 게시판에 올려주신 사례는 처음입니다. 새해 첫날 받은 선물로 무척 기분이 좋고 흐뭇합니다... 페이스북은 친구와 친구들 간의 나눔의 공간입니다. 더 많은 카페 회원분들께서 이용만 하지 마시고, 자신이 알게된 새로운 정보나 팁을 좀더 적극적으로 공유하고 나누어주시는 새해가 되었으면 좋겠습니다..
감사합니다~ 새해에는 모든분들께 좋은일만 있기를 기대합니다....
고맙습니다. 한투 님도 새해 뜻하신 소망 모두 이루세요... 근데 목동 사시나 봐여... 샘플 예제로 만드신 어플 이름을 mokdong 으로 지어 놓으신 걸 보니... 저도 목동 삽니다... 목동 단지가 아니라 용왕산 줄기 밑에 변두리 목동...^^
정말 우연이군요~ 저도 거기 살았답니다. 본각사 있는데. 지금은 신정동이예요. 언제 차한잔하죠^^
ㅎㅎㅎ 고맙습니다.. 지금은 구로 가산밸리 구석에 박혀서 책 원고 작업에 집중하고 있는데, 조만간 설 쇠고 나면 사무공간도 등촌동 쪽으로 옮겨가게 될 것 같습니다... 그 쪽이 더 가까우실 터이니, 자리 잡으면 한번 초청하겠습니다. 고맙습니다...
고맙습니다.
감사히 잘보앗습니다. 너무 감사합니다!
많은 도움이 되었습니다.
잘 보았읍니다 감사합니다^
와.. 진짜 이런분들보면 멋지신것같아요.. 잘 봤습니다 !
안녕하세요! 질문입니다. 혹시 웹은 처음 만져보는 컴공과 학생이 간단한 앱을 만들어 보려면 어느 정도 기간이 필요할까요??
좋은자료 감사합니다.
감사합니다 잘 보고 있어요 ㅎ
70대인 저는 이해가 잘가지 않습니다. 저도 페북과 페이지 트위터 블로그 등등 스마트폰 기능도 많이 알고있습니다만 페이스북앱만들기는 정말 어려운것 같아 좀더 많은것을 알고난 다음에 배워야 할것 같습니다. 앞으로 많은 지도바랍니다~^^