티스토리 뷰
페이스북은 실시간 업데이트에 대한 API를 제공합니다.
페이스북의 서드파티 어플리케이션 사용자의 어떠한 정보가 바뀌었을때 정보가 바뀌었음을 실시간으로 알려주는 API입니다.
어플리케이션 개발자들이 사용자의 데이터가 바뀌었는지 안바뀌었는지 매번 조회할 필요 없이
페이스북이 해당 알림을 주는 경우에 해당 사용자의 정보를 다시 가져와서 업데이트 하면 되는 아주 편리한 API죠.
가장 흔히 쓰이는 경우는 페이스북 친구목록이 변경되었을때 이를 반영하기 위한 용도나,
사용자의 이름, 프로필 등이 변경되었을때 이를 반영하기 위한 용도죠.
페이스북에서 앱을 만들고 설정 메뉴의 Realtime Updates 메뉴에서 설정할수 있습니다.
fields 항목에는 업데이트 알림을 받고 싶은 범위를 선택하면 되고
callback에는 업데이트 알림을 받을 우리측 서버의 url을 넣으면 됩니다.
verify token은 callback으로 온 업데이트 알림이 페이스북으로 부터 유효하게 온것인지 체크하는 용도의 키값입니다.
이렇게 Realtime Updates를 설정하면 페이스북으로 부터 알람을 받을수 있게 됩니다.
페이스북은 해당 앱 사용자의 정보가 변경된 경우, 앱 설정에 Realtime Updates가 설정되었다면
해당 callback url로 해당 알림을 발송합니다.
콜백서버는 POST와 GET의 두가지 리퀘스트를 처리하면 됩니다.
페이스북이 콜백 url을 GET방식으로 호출할때에는 다음의 쿼리파라메터가 전송됩니다.
hub.mode - "subscribe" 이라는 string이 전송됩니다.
hub.challenge - 랜덤한 string이 전송됩니다.
hub.verify_token - 설정했던 verify_token이 전송됩니다.
PHP에서 쿼리파라메터의 .(점)과 공백은 _ (언더바)로 자동 변환되기 때문에
$_GET['hub_mode'], $_GET['hub_challenge'], $_GET['hub_verify_token']
이렇게 값을 사용해야 합니다.
콜백서버는 전송된 verify_token 값이 내가 설정한 값과 일치하는지 먼저 확인하고 맞다면
전송받은 hub.challenge 값을 그대로 출력하면 됩니다.
페이스북은 이 리턴된 값을 통해 해당 콜백서버에 대한 검증을 마치고 콜백서버로 데이터를 전송할 준비를 마치게 되는겁니다.
그리고 POST방식으로 실제 데이터를 전송합니다.
콘텐츠타입은 application/json 이고 json형태로 인코딩된 스트링이 전해집니다.
PHP의 경우 아래와 같이 페이스북으로부터 온 string을 전달받아 파싱하여 사용할수 있습니다.
$data = file_get_contents("php://input");
$json = json_decode($data);
페이스북은 매 5초마다 변경된 내역을 모아서 알림을 보내주거나, 변경된 내역이 1000개를 넘으면 보내준다고 하네요.
사용자의 어떠한 필드들이 변경되었는지 해당 회원의 ID와 함께 정보가 전달됩니다.
보안을 이유로 이 데이터에는 변경된 필드명만 있고,
실제로 변경된 값은 해당 회원의 엑세스토큰을 이용해 다시 페이스북의 API를 조회하여 얻어야 합니다.
페이스북이 전송하는 데이터 형태는 이런 구조를 갖습니다.
{
"object": "user",
"entry": [
{
"uid": 1335845740,
"changed_fields": [
"name",
"picture"
],
"time": 232323
}, {
"uid": 1234,
"changed_fields": [
"friends"
],
"time": 232325
}
]
}
만약 이 알림이 서버로 전달되는데 실패하면 페이스북은 몇차례 더 시도를 한다고 합니다.
페이스북은 추가로 X-Hub-Signature HTTP헤더를 전송합니다.
헤더값은 request 페이로드를 app의 secret을 사용하여 SHA1로 사인하고 sha1= 이란 접두사를 붙여서 전송됩니다.
이 값을 이용해서 콜백서버에서 시그니쳐를 비교분석하여 무결성을 검증할 수 있습니다.
PHP의 callback 예제 첨부하니 도움이 되었으면 좋겠네요.
if($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['hub_mode']) && $_GET['hub_mode'] == 'subscribe' && isset($_GET['hub_verify_token']) && $_GET['hub_verify_token'] == '확인용토큰') {
echo $_GET['hub_challenge'];
}else if($_SERVER['REQUEST_METHOD'] == 'POST'){
$post_body = file_get_contents('php://input');
$obj = json_decode($post_body, true);
foreach($obj['entry'] as $v){
if(in_array('friends', $v['changed_fields'])){
}
if(in_array('picture', $v['changed_fields'])){
}
}
}
'페이스북' 카테고리의 다른 글
페이스북 비즈니스관리자 계정 초대 수락시 오류가 발생하면 (0) | 2019.03.15 |
---|---|
돈 1원도 안쓰고 공짜로 폰번호 문자 인증 서비스 만들기 (6) | 2018.12.21 |
페이스북 인증실패시 체크해봐야할것 (0) | 2013.05.22 |
페이스북 access_token에 대한 이해 (2) | 2013.05.21 |
페이스북 오픈그래프를 활용하는 개발자들이 알아야할 중요한 개발도구 (0) | 2013.05.13 |
- Total
- Today
- Yesterday
- 트위터
- 창업
- 경진대회
- 안드로이드
- android
- 모바일
- Apple
- 대학생
- 스마트폰
- 구글
- 아이폰
- php
- CSS
- 앱
- 웹표준
- iPhone
- 게임
- 네이버
- 공모전
- 애플
- 벤처
- JavaScript
- 아이디어
- 앱스토어
- AWS
- 자바스크립트
- 소프트웨어
- 어플리케이션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |