이 메서드는 Messenger 확장 기능 SDK의 일부입니다. 사이트에 SDK를 포함하는 데 관한 정보는 Messenger 확장 기능 SDK 추가를 참조하세요.
사용 가능 여부
이 API는 Android의 경우 v113 이상, iOS의 경우 v114 이상의 Messenger 버전에서만 사용할 수 있습니다.
특정 클라이언트에서 사용 가능 여부를 확인하려면 getSupportedFeatures()
를 호출하고 응답의 context
속성을 확인하세요.
getContext()
메서드를 사용하면 WebView를 연 사용자 및 스레드에 관한 추가 정보를 검색할 수 있습니다. 이 메서드는 인터랙티브 그룹 환경 및 게임을 만드는 데는 물론 특정 스레드에만 공유되도록 설정된 콘텐츠를 제한하는 데도 유용합니다.
이제 사용 중단된 getUserID()
대신 getContext()
를 사용해야 합니다.
사용자의 PSID, 스레드 ID 및 대화 유형을 가져오려면 이 함수를 호출하세요. 메서드 매개변수의 전체 리스트를 보려면 getContext() 참고 자료를 확인하세요.
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
success callback에 전달되는 응답은 다음과 같은 형식의 JavaScript 개체입니다.
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
확인로그인 또는 구매와 같은 행동을 수행하기 전에 getContext()
에서 얻은 정보를 백엔드에 전송하고 확인하고 싶은 경우가 있습니다. 이렇게 하면 정보가 실제로 Messenger에서 제공되었으며 도용되지 않았는지 확인할 수 있습니다.
signed_request
는 OAuth 2.0 스펙에 따라 base64url로 인코딩되었으며 앱 시크릿 코드의 HMAC 버전으로 서명되었습니다.
다음 4단계로 확인할 수 있습니다.
'.'
문자로 구분된 두 부분으로 분할합니다(예: 238fsdfsd.oijdoifjsidf899
)issued_at
타임스탬프를 보고 최신 요청인지 확인할 수도 있습니다. 이 작업은 최신 프로그래밍 언어로 수행할 수 있습니다. 다음은 PHP의 예입니다.
function parse_signed_request($signed_request) { list($encoded_sig, $payload) = explode('.', $signed_request, 2); $secret = "appsecret"; // Use your app secret here // Decode the data $sig = base64_url_decode($encoded_sig); $data = json_decode(base64_url_decode($payload), true); // Confirm the signature $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); if ($sig !== $expected_sig) { error_log('Bad Signed JSON signature!'); return null; } return $data; } function base64_url_decode($input) { return base64_decode(strtr($input, '-_', '+/')); }
페이로드를 디코딩하면 getContext()
에서 원래 반환한 것과 같은 정보가 포함된 개체가 생성되지만 algorithm
, issued_at
및 page_id
필드가 추가됩니다.
{ "psid": "1293479104029354", "algorithm": "HMAC-SHA256", "thread_type": "GROUP", "tid": "1411911565550430", "issued_at": 1491351619, "page_id": 167938560376726 }
앱 시크릿 코드를 실수로 누설하지 않기 위해 클라이언트 쪽 코드가 아니라 서버에서 확인해야 합니다.
일부 비즈니스에서는 글로벌 페이지 구조를 하나의 앱 ID 또는 봇과 연결된 여러 페이지와 함께 사용합니다. 이 경우 채팅 확장 기능에서 getContext()
에 의해 반환되는 스레드 ID는 여러 국가의 사용자별로 다릅니다.
다음 API를 사용하여 국가 페이지별 스레드 ID를 글로벌 스레드 ID에 전달하고 해당 글로벌 스레드 ID를 사용하여 각 지역 페이지에서 채팅 확장 기능에 액세스하는 사용자 간의 상태를 유지하세요.
글로벌 스레드 ID를 가져옵니다.
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
다음은 응답의 예시입니다.
{"tid":1577059318985661,"global_tid":1577059318985661}
글로벌 페이지가 없으면 global_tid
가 존재하지 않습니다.