<< 머구리 | Home | Facebook OAuth를 통한 인증 처리 >>

Facebook 로그인 기능 구현(FB Connect)

1. Facebook 어플 등록
 - 등록 사이트 : http://www.facebook.com/developers/createapp.php
 - 확인 정보 : application id, api_key, application secret

2. 앱의 종류
 - Facebook canvas applications : Facebook 사이트가 감쏴는 형태로 서비스됨
   : FBML / FBJS apps
   : Iframe canvas apps
 - Facebook desktop applications
 - Facebook connect applications
   : Web(CNN, Digg 등)
   : iPhone

3. API 종류
 - API : 모두 사용
 - FBML : canvas apps에서만 사용
 - XFBML : Facebook connect 에서만 사용
 - FQL : 모든 경우 사용
 - FBJS : 대부분 canvas apps에서 사용

4. 참조 오픈소스
 - facebook-java-api : http://code.google.com/p/facebook-java-api/

5. Canvas형 기능 구현
userClient = new FacebookXmlRestClient(apiKey, secret);
facebook = new FacebookWebappHelper<Document>(
request, response, apiKey, secret, userClient);
boolean redirectOccurred = facebook.requireLogin(null, nextPage,
"&extern=1&fbconnect=1&return_session=1");
log.error("redirectOccurred1: " + redirectOccurred);
if (redirectOccurred) {
return true;
}

redirectOccurred = facebook.requireFrame(null, nextPage, null);
log.error("redirectOccurred2: " + redirectOccurred);
if (redirectOccurred) {
return true;
}

jaxbClient = new FacebookJaxbRestClient(
userClient.getApiKey(), userClient.getSecret(),
userClient.getCacheSessionKey());
users = new ArrayList<Long>();
users.add(userClient.users_getLoggedInUser());
u = (UsersGetInfoResponse) jaxbClient.users_getInfo(users, _fields);
if (u != null && u.getUser() != null && u.getUser().size() > 0)
user = u.getUser().get(0);
request.setAttribute("facebook_user", user);
.............

6. 3rd Party 웹 사이트형 기능 구현
sessionStr = 
StringUtils.defaultIfEmpty(request.getParameter("session"), "");
userClient = new FacebookXmlRestClient(apiKey, secret);
facebook = new FacebookWebappHelper<Document>(request, response,
apiKey, secret, userClient);
if (StringUtils.isEmpty(sessionStr)) {
log.error("login called !");
nextPage = URLEncoder.encode("http://mimul.com/rpx/facebook/", "utf-8");
forwardUri = new StringBuffer();
forwardUri.append("http://www.facebook.com/login.php?api_key=")
.append(apiKey);
forwardUri.append("&next=").append(nextPage);
forwardUri.append("&cancel_url=").append(nextPage);
forwardUri.append("&extern=1&fbconnect=1&return_session=1" +
"&req_perms=email");
out = "<script type=\"text/javascript\">\ntop.location.href = \""
+ forwardUri.toString() + "\";\n</script>";
response.getWriter().print(out);
response.flushBuffer();
return true;
}

json = new JSONObject(sessionStr);
sessionKey = json.getString("session_key");
jaxbClient = new FacebookJaxbRestClient(
userClient.getApiKey(), userClient.getSecret(), sessionKey);
users = new ArrayList<Long>();
users.add(userClient.users_getLoggedInUser());
u = (UsersGetInfoResponse) jaxbClient.users_getInfo(users, _fields);
if (u != null && u.getUser() != null && u.getUser().size() > 0)
user = u.getUser().get(0);
request.setAttribute("facebook_user", user);
.............


7. 데모
 - http://mimul.com/rpx/facebook/

8. 기타 참고 사항
 - facebook 이용자 모두 이용할 경우 Sandbox Mode를 Disable로 안그러면 "The application you are trying to access is unavailable or restricted." 메세지 나타남.
 - facebook은 이메일 계정을 3rd Party에 공유 안함.(스팸 악용 의도 차단)


Avatar: 최규문

Facebook FBML 기초지식에 대한 강의 가능하실런지요?

pepsi@paran.com으로 관련 메일 한 통 보내드렸습니다... 내용 확인하시고 회신 주시면 대단히 고맙겠습니다...

Facebook FBML 기초지식에 대한 강의 가능하실런지요?

저기.. 저는 restFB를 사용 하고 있구요.

이번에 앱을 하게 되었는데 캔버스는 아이프레임을 사용하도록 했습니다.

그래놓고 일반 웹어플 인증 하던 식으로 인증을 시도 했는데. 다른주소를 요청하면

FACEBOOK 배너이미지가 뜨더라구요. 그리고 그걸 클릭해야 인증 화면으로 넘어가구요..

인증 했어도 언제나 FACEBOOK 배너이미지가 뜨면서 이동 합니다.

왜 그러나 문제를 찾아보니. FACEBOOK컨버스 인증이 따로 있드라구요.????

암호화를 해서 보내라는거 같긴한데.. 근데 원체 죄다 PHP샘플이고.. 제가 해본적이 없어서 이해를 하기 힘드네요..

보니까 다른 API쓰셔서.. 컨버스 이용하신거 같은데 컨버스 인증 방법을 알고 계시면 조언

좀 구해도 될까해서 문의 드립니다~

아니면 컨버스 인증을 안해도 제대로 인증 화면이 제대로 나오는 방법이 있는지?ㅜㅜ

 

Re: Canvas 인증을 어떤식으로 하셧는지???

안녕하세요.. 저는 restFb API를 사용하구요~ 일반 웹어플에서 사용하는거는 어렵지 않은데..

근데.. 캔버스에서  IFRAME 형식으로 하고 일반 웹에서 인증하는 절차와 같이 인증을 진행 하였는데

인증이 가능 하긴 하돼. 다른 주소로 이동하게 되면 FACEBOOK 배너이미지가 나오고. 진행이 되드라구요..  그래서 왜그런가 살펴보았더니.

canvas 인증이 따로 있습니다. 제가 갠적으로 php를 몰라서 해매고 있는데.. java에서 컨버스 인증 을 해보신적이 있으신지? 있으시다면.. 어떠한 방법으로 진행되어야되는지 조언좀 듣고 싶습니다.ㅠㅠ

 

Avatar: 미물

Re: Canvas 인증을 어떤식으로 하셧는지???

설정에 canvas로 되어 있는지 확인하세요.
Avatar: Anonymous

Re: Facebook 로그인 기능 구현(FB Connect)

canvas 형으로 개발을 할려구하는데요. index.html소스는 아래와 같습니다. <html> <head> <title>My Facebook Login Page</title> </head> <body> <div id="fb-root"></div> hello <script> window.fbAsyncInit = function() { FB.init({appId: '196980356997588', status: true, cookie: true, xfbml: true}); FB.login(function(response) { if (response.session) { try {FB.api('/me',function(response) {alert(response.name);}); } catch (ex) {alert(ex.toString());} } }, {'perms':'publish_stream,email,read_stream'}); }; (function() { var e = document.createElement('script'); e.async = true; e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; document.getElementById('fb-root').appendChild(e); }()); </script> </body> </html> 그런데 팝업으로 열리는데요. 페이지내에서 보이도록 했으면 하는데요.. 어떻게 해야되는지 꼭좀 알려주세요~~
Avatar: Anonymous

Re: Facebook 로그인 기능 구현(FB Connect)

위에 예제중에 canvas형 기능구현한 자바소스를 얻을수있을까요??

Re: Facebook 로그인 기능 구현(FB Connect)

위에 5. Canvas형 기능 구현 작성을 하였는데, 오류가 나요~ 도와주세요. com.google.code.facebookapi.FacebookException: A session key is required for calling this method
Avatar: 미물

Re: Facebook 로그인 기능 구현(FB Connect)

인증 후 발급되는 세션키를 파라미터로 넣어 주셔야 할듯 합니다.

Add a comment Send a TrackBack