출처 : http://www.uengine.org:8088/wiki/index.php/Facebook_Open_API_%ED%99%9C%EC%9A%A9(Javascript_SDK)

Facebook Open API 활용(Javascript SDK)

Uwiki

App ID를 발급받기 위한 application 등록
먼저 페이스북 OPEN API를 사용하기 위해서는 Facebook Platfrom API key(App ID)를 발급받아야 한다. Key를 만들는 과정은 다음의 과정을 따른다.

1. http://www.facebook.com/developers/createapp.php 로 가서 new application을 생성한다. 페이스북 id및 인증을 위한 모바일 폰 번호를 필요함.
2. 어플리케이션 이름을 입력한다.
3. Basic탭에서 모두 기본값을 사용하고 callback URL(자신의 도메인)은 반드시 넣도록 한다.
4. 생성된 API key를 적당히 메모해 둔다. 

자신의 application 정보는 http://www.facebook.com/developers/apps.php 에서 확인할 수 있다.



API 활용
다음은 자신의 페이지에서 Facebook OPEN API를 사용하기 위해 SDK를 로딩하는 과정으로 반드시 페이지 내에 추가해 주어야 한다.

<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
 FB.init({
   appId  : 'APP ID',
   status : true, // check login status
   cookie : true, // enable cookies to allow the server to access the session
   xfbml  : true  // parse XFBML
 });
</script>


또는, 페이지 로딩 속도를 확보하기 위해 다음과 같은 코드를 사용할 수도 있다.

<script>
 window.fbAsyncInit = function() {
   FB.init({appId: 'your app id', status: true, cookie: true,
            xfbml: true});
 };
 (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>


FB.getLoginStatus()를 이용해서 유저의 로그인 상태 체크.

FB.getLoginStatus(function(response) {
 if (response.session) {
   // logged in and connected user, someone you know
 } else {
   // no user session available, someone you dont know
 }
});


FB.login()를 이용해서 페이스북로그인 창을 띄우기.

FB.login(function(response) {
 if (response.session) {
   // user successfully logged in
 } else {
   // user cancelled login
 }
});


FB.login()과 FB.getLoginStatus()를 이용해 이용해 다음과 같이 유저가 로그인 하도록 유도.

 FB.getLoginStatus(handleSessionResponse);
 function handleSessionResponse(response) { 
  if (!response.session) { 
   // Open login dialog box
   FB.login(handleSessionResponse);
   return; 
  } else{
   // already logged in
  }
 }


로그인 유저 정보 가져오기

function getUser(){
 FB.getLoginStatus(handleSessionResponse);
  function handleSessionResponse(response) { 
   if (!response.session) {
    //
   } else{
    FB.api( 
    {
      method: 'fql.query', 
      query: 'select uid,name,email,pic_square from user where uid  = "' + FB.getSession().uid + '"'
     }, 
    function(response) {
      for(var i=0; i < response.length; i++){
       response[i].uid; //유저아이디
       response[i].pic_square; // 사진
       response[i].name; // 이름
       response[i].email; // 이메일주소
      }
    } 
    );
   }
  }	 
}


내친구 리스트 가져오기

function getFriends(){
  FB.getLoginStatus(handleSessionResponse);
    function handleSessionResponse(response) { 
      if (!response.session) { 
         //
      } else{
        FB.api( 
         {
            method: 'fql.query', 
            query: 'SELECT uid, name, email, birthday, pic_square, online_presence  FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())'
         }, 
        function(response) {
          for(var i=0; i < response.length; i++){ 
             response[i].uid;
             response[i].pic_square;
             response[i].name;
             response[i].birthday;
             response[i].email;
             response[i].online_presence;
          }
        } 
        );
      }
   }
 }


내 담벼락의 글 가져오기

function getPersonalFeed(fbId){
   FB.getLoginStatus(handleSessionResponse);
     function handleSessionResponse(response) { 
        if (!response.session) { 
            alert("no login");
        } else{
          var path = '/me/feed';
          var num = 10;
          FB.api(path, { limit: num }, function(response) {
            for (var i=0, l= response.data.length; i< l; i++) {
               var info = response.data[i];
               if (info.message) {
                  info.id; // 글아이디
                  info.updated_time; // 갱신일
                  info.message; //글내용
                  info.from.name; //글쓴이
                }
             }
          });
        }
    }
  }
 }


내 담벼락에 새글 쓰고 id가져오기

function postPersonalFeed(fbId){
  FB.getLoginStatus(handleSessionResponse);
    function handleSessionResponse(response) { 
      if (!response.session) { 
         alert("No login");
      } else{
         var path = '/me/feed';
         var body = document.getElementById("info1").value;
         FB.api(path, 'post', { message: body }, function(response) {
             if (!response || response.error) {
                 alert("error");
              } else {
                 alert("successful with id [" + response.id + "]");
              }
         });
      }
   }
 }


내 담벼락의 특정 글에 코멘트 달고 글 id가져오기

function postPersonalComment(postId){
   FB.getLoginStatus(handleSessionResponse);
       function handleSessionResponse(response) { 
         if (!response.session) {
            alert("No login");
          } else{
            var path = '/'+postId + '/comments';
            FB.api(path, 'post', { message: body }, function(response) {
               if (!response || response.error) {
                  alert("error");
               } else {
                  alert("successful with id [" + response.id + "]");
               }
            });
          }
     }
 }


내 담벼락의 특정 글의 코멘트 가져오기

 function getPersonalComments(postId){
   FB.getLoginStatus(handleSessionResponse);
     function handleSessionResponse(response) { 
       if (!response.session) { 
          alert("No login");
       } else{
          var path = '/'+postId+'/comments';
          var num = 10;
          FB.api(path, { limit: num }, function(response) {
              for (var i=0, l= response.data.length; i< l; i++) {
                 var info = response.data[i];
                 info.id;
                 info.message";
              }
          });
       }
    }
 }


그룹 리스트 가져오기

 function getGroupList(){
   FB.getLoginStatus(handleSessionResponse);
     function handleSessionResponse(response) { 
       if (!response.session) { 
          alert("No login");
        } else{
           FB.api( 
           {
              method: 'fql.query', 
              query: 'SELECT gid, name, description, creator, icon FROM group WHERE gid IN (SELECT gid FROM group_member WHERE uid = me())'
           }, 
           function(response) { 
              for(var i=0; i < response.length; i++){
                response[i].gid;
                response[i].icon;
                response[i].name;
                response[i].description;
           }
        });
      }
   }
 }


그룹 담벼락의 글 가져오기

function getGroupFeed(groupId){
   FB.getLoginStatus(handleSessionResponse);
     function handleSessionResponse(response) { 
       if (!response.session) { 
         alert("no login");
       } else{
          var path = '/' + groupId + '/feed';
          var num = 5;
          FB.api(path, { limit: num }, function(response) {
              for (var i=0, l= response.data.length; i< l; i++) {
                  var info = response.data[i];
                  if (info.message) {
                     info.id;
                     info.updated_time;
                     info.message;
                     info.from.name+;
                  }
               }
         });
      }
    }
 }


그룹 담벼락의 특정 글에 코멘트를 쓰고 id가져오기

function postGroupComment(postId){
   FB.getLoginStatus(handleSessionResponse);
     function handleSessionResponse(response) { 
        if (!response.session) {
            alert("No login");
        } else{
            var path = '/'+postId + '/comments';
            FB.api(path, 'post', { message: body }, function(response) {
                if (!response || response.error) {
                    alert("error");
                 } else {
                     alert("successful with id [" + response.id + "]");
                 }
             });
       }
    }
 }


그룹 담벼락의 특정 글의 코멘트 가져오기

 function getGroupComments(postId){
    FB.getLoginStatus(handleSessionResponse);
      function handleSessionResponse(response) { 
         if (!response.session) { 
            alert("No login");
         } else{
            var path = '/'+postId+'/comments';
            var num = 10;
            FB.api(path, { limit: num }, function(response) {
            for (var i=0, l= response.data.length; i< l; i++) {
               var info = response.data[i];
               info.id;
               info.message;
            }
         });
       }
    }
 }


그룹 담벼락에 새글 쓰고 id가져오기

 function postGroupFeed(groupid){
    FB.getLoginStatus(handleSessionResponse);
       function handleSessionResponse(response) { 
         if (!response.session) { 
            alert("No login");
         } else{
            var path = '/'+groupid+'/feed';
            FB.api(path, 'post', { message: body }, function(response) {
               if (!response || response.error) {
                  alert("failed");
               } else {
                  alert("successful with id [" + response.id + "]");
               }
            });
         }
    }
 }




참고 사이트

개발자 사이트 : http://developers.facebook.com
Graph API : http://developers.facebook.com/docs/api
개발자 시작 가이드 : http://developers.facebook.com/docs/guides/web

출처 : http://chaospace.tistory.com/152
         http://www.ugoon.net/study/mobile/mobile_viewport.php


viewport란?

모바일 브라우저 중 webkit을 기반으로 한 녀석들은 PC의 브라우저 윈도우에
해당하는 Viewport라는 녀석이 있습니다.
기본적인 뷰포트의 넓이는 980px로 설정되어 있어서, 폰에서 보여질 컨텐츠를 500px로
만들었다면 480px의 여백이 생기도 페이지의 넓이는 980px이 됩니다.
정리하자면 아이폰의 경우 320 x 480px 의 화면사이즈를 가지기 때문에 980px과 비교하면
PC화면의 약 1/3의 크기로 보이게 됩니다.

viewport설정방법

viewport를 설정하려면 head에 meata태그를 추가하면 됩니다.
<meta name="viewport" content="속성값">

viewport속성값

속성 내용 단위 기본값 허용범위 특이사항
width viewport의 넓이 px 980px 200 ~ 10,000 뷰 포트의 픽셀 가로 길이를 지정. 가로 길이를 지정하지 않으면 데스크탑 사이즈로 지정.
(모바일 사파리의 경우는 980픽셀로 지정됨.)device-width로 지정가능
height viewport의 높이 px 가로화면비율에서
계산된 값
200 ~ 10,000 뷰 포트의 픽셀 세로 길이를 지정. 일반적으로, 이 속성에 대한 지정은 하지 않아도 무관 함.
device-height로 지정가능
initial-scale 초기 배율값 승수지정
120%
= 1.2
viewport에서
계산된 값
0 ~ 10 처음 모바일 페이지가 보여질 때 페이지 배율을 지정. (0~10.0)
(1.0으로 설정하는 것이 안정적임.)
값이 크면 확대, 값이 작으면 축소
minimum-scale 승수 지정 승수 .25 0 ~ 10 사용자가 축소할 수 있는 최소 배율을 지정. (0~10.0)
모바일 사파리는 기본으로 0.25로 설정.
maximum-scale 승수 지정 승수 1.6 0 ~ 10 사용자가 확대할 수 있는 최대 배율을 지정. (0~10.0)
모바일 사파리는 기본으로 1.6으로 설정.
user-scalable 확대,축소 지원여부 yes, no yes 사용자가 배율을 확대 또는 축소 허용 여부를 설정.
모바일 사파리는 기본으로 '사용 함'으로 설정.

viewport의 넓이를 400px하고 시작 비율을 2로 적용한 코드;
<meta name="viewport" content="width=400px, initial-scale=2">

viewport의 확대축소를 지원하고 싶지 않을 경우 :
<meta name="viewport" content="width=400px, user-scalable=no, initial-scale=2">

Viewport가 지원하지 않을때 meta tag 사용
<meta name="HandheldFriendly" content="true" />
<meta name="MobileOptimized" content="320" />


실습하기

시작시 content의 크기를 2.3배로 보이게 하는 코드 :
<meta name="viewport" content="width=320px, initial-scale=2.3">

결과 ( 웹 브라우저는 viewport가 무시됨 )

user-scalable을 이용해 content스케일 조절을 막은 코드 :
<meta name="viewport" content="width=320px, user-scalable=no, initial-scale=1">

결과화면 :


참고 사이트 :

 

 


1. 설정메뉴(옵션) > 기본설정 > 고급(탭) > 메뉴 막대에서 개발자용 메뉴 보기 체크

2. 메뉴 > 개발자용 > 사용자 에이전트 > 해당 User-Agent


 

주요모바일 기기 User-agent

IE8, IE9 User-Agent 변경하기
Opera User-Agent 변경하기
FireFox User-Agent 변경하기
Safari User-Agent 변경하기
Chrome User-Agent 변경하기


출처 : http://stove99.tistory.com/41


Firefox 는 부가기능을 설치하면 된다.

설치할 부가기능 : https://addons.mozilla.org/ko/firefox/addon/user-agent-switcher/

부가기능을 설치하고 나면 메뉴 > 도구 > Default User Agent 메뉴가 생긴다.

거기에서 디폴트로 등록되 있는 User-agent 들을 선택하거나 아니면 Edit User Agent 로 원하는 User-agent 를 추가하면 된다.



주요모바일 기기 User-agent

IE8, IE9 User-Agent 변경하기
Opera User-Agent 변경하기
FireFox User-Agent 변경하기
Safari User-Agent 변경하기
Chrome User-Agent 변경하기

출처 : http://stove99.tistory.com/40

1. 주소창에 opera:config 를 입력하고 이동

2. 목록중에 ISP 라는게 있는데 고부분을 클릭해서 ID 에 원하는 User-agent 스트링을 입력후 저장하고 브라우져를 껏다가 켜면 적용된다.




출처 : http://stove99.tistory.com/38         
         http://stove99.tistory.com/39


1. IE8 User-Agent 변경하기

IE8 은 별도 Add-on 기능을 설치해야 가능하다.

http://ieaddons.com/en/addons/detail.aspx?id=2040

요기 가서 Click to Install 클릭해서 프로그램 설치한다음

익스플로러 껏다 켜면

메뉴 > 도구 > Set UA String 이라고 추가된다~

고걸 클릭하면 팝업창이 하나 뜨는데 목록 중에서 바꾸고 싶은걸 선택하거나

입력하는 란에다 직접 원하는 User-agent 스트링을 입력한 다음 적용하면 된다.~




2. IE9 User-Agent 변경하기

1. F12 를 클릭해 개발자모드로 들어간다.

2. 개발자 모드 메뉴중에 도구 > 사용자 에이젼트 문자열 변경 > 사용자 지정 으로 가서 원하는 User-agent 를 추가한다.

3. 도구 > 사용자 에이젼트 문자열 변경 > 추가시킨 User-agent 를 선택하면 적용된다.

※ 탭별로 적용되는 거라서 새로운 탭을 열면 원래 기본 User-agent 로 다시 변경된다.




주요모바일 기기 User-agent

IE8, IE9 User-Agent 변경하기
Opera User-Agent 변경하기
FireFox User-Agent 변경하기
Safari User-Agent 변경하기
Chrome User-Agent 변경하기

출처 : http://stove99.tistory.com/17

갤럭시S2
Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; SHW-M250S Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1



갤럭시 탭
Mozilla/5.0 (Linux; U; Android 2.2.1; ko-kr; SHW-M180S Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1



아이폰 4
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; ko-kr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5



아이패드 2
Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; ko-kr) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5


주요모바일 기기 User-agent

IE8, IE9 User-Agent 변경하기
Opera User-Agent 변경하기
FireFox User-Agent 변경하기
Safari User-Agent 변경하기
Chrome User-Agent 변경하기

출처 : http://stove99.tistory.com/18

뭐 물론 보통브라우져에서 m.naver.com 이니 m.nate.com 이니 하는 m 시리즈로 접속을 하면 모바일 페이지로 접속을 할 수 있지만

간혹가다 보면 깐깐하게 사용자 브라우져를 체크해서 모바일 페이지로 이동이 안되는 사이트도 있다. 예를 들어 m.paran.com 같은..~

요럴땐 브라우져의 User-agent 를 모바일 브라우져의 User-agent 로 변경하면 잘 접속할 수 있다.

크롬의 경우 실행시 -user-agent 옵션을 줘서 변경할 수 있다.

윈도우 같은 경우는 간단하게 아이콘에서 오른쪽 버튼을 클릭해 속성창으로 가서 대상란에 적힌 문자열 맨 뒤에 한칸 띄우고

-user-agent "모바일 브라우져 user-agent 스트링" 요렇게 해주면 된다.

예를들어 갤럭시 S2로 접속한 것과 비슷하게 작동할려면 갤럭시 S2의 모바일 브라우져 User-agent String 을 옵션으로 줘서

-user-agent "Mozilla/5.0 (Linux; U; Android 2.3.3; ko-kr; SHW-M250S Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"

요걸 적어주고 적용을 한뒤 브라우져를 껏다 켜면 모바일 브라우져와 비슷하게 된다.



죠렇게 설정하고 다시 m.auction.co.kr 로 접속해 보자~ 모바일 옥션 화면이 정상적으로 로딩될것이다~

주요모바일 기기 User-agent

IE8, IE9 User-Agent 변경하기
Opera User-Agent 변경하기
FireFox User-Agent 변경하기
Safari User-Agent 변경하기
Chrome User-Agent 변경하기

+ Recent posts