Este método faz parte do SDK das Extensões do Messenger. Para obter informações sobre como incluir o SDK no seu site, consulte Adicionar SDK de Extensões do Messenger.
Disponibilidade
Esta API está disponível apenas no Messenger para Android v113 e iOS v114.
Para verificar a disponibilidade em um determinado cliente, chame getSupportedFeatures()
e verifique a propriedade context
na resposta.
O método getContext()
retoma informações adicionais sobre as pessoas e os tópicos abertos na webview. É útil para a criação de experiências de grupo interativas e jogos, além de restringir conteúdo destinado a ser compartilhado apenas em determinado tópico.
getContext()
deve ser usado no lugar de getUserID()
, que foi descontinuado.
Chame esta função para obter o PSID da pessoa, o número de identificação do tópico e o tipo de tópico. Para uma lista completa de parâmetros do método, veja a Referência getContext().
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
A resposta transmitida para o retorno da chamada com êxito será um objeto JavaScript no seguinte formato:
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
Há situações em que será conveniente transmitir as informações obtidas em getContext()
para seu back-end e validá-las antes de realizar ações, como um efetuar um login ou compra. Isso permite garantir que as informações são realmente provenientes do Messenger e não são falsas.
A signed_request
é codificado para base64url e assinado com uma versão HMAC de sua Chave Secreta do Aplicativo, com base na especificação OAuth 2.0.
Você pode validá-la seguindo as quatro etapas a seguir:
'.'
(por exemplo, 238fsdfsd.oijdoifjsidf899
)issued_at
na carga, para garantir que a solicitação seja recente. Isso pode ser feito em qualquer linguagem de programação moderna. Confira abaixo um exemplo em 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, '-_', '+/')); }
Decodificar a carga renderá um objeto com a mesma informação originalmente retornada por getContext()
, mas com a adição dos campos algorithm
, issued_at
, e page_id
:
{ "psid": "1293479104029354", "algorithm": "HMAC-SHA256", "thread_type": "GROUP", "tid": "1411911565550430", "issued_at": 1491351619, "page_id": 167938560376726 }
Lembre-se de que, para evitar a divulgação acidental da chave secreta do aplicativo, essa validação deverá ocorrer no seu servidor e nunca no código do cliente.
Algumas empresas usam uma estrutura de página global com várias páginas associadas com um ID do aplicativo ou bot. Nessa situação, os números de identificação do tópico retornados por getContext()
na extensão do bate-papo serão diferentes para pessoas em países diferentes.
Use a seguinte API para transformar o número de identificação do tópico específico para a página de um país em um número de identificação do tópico global. Em seguida, utilize o número de identificação do tópico global para manter o estado entre usuários que acessam a extensão de bate-papo de suas respectivas páginas regionais.
Recuperar o número de identificação do tópico global:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
Exemplo de resposta:
{"tid":1577059318985661,"global_tid":1577059318985661}
Caso não exista uma página global, global_tid
não estará presente.