Cette méthode fait partie du SDK Messenger Extensions. Pour plus d’informations sur l’intégration du SDK dans votre site web, consultez Ajout du SDK Messenger Extensions.
Disponibilité
Cette API est uniquement disponible dans Messenger, version 113 ou ultérieure sur Android et version 114 ou ultérieure sur iOS.
Pour vérifier sa disponibilité pour un client donné, appelez getSupportedFeatures()
et recherchez la propriété context
dans la réponse.
La méthode getContext()
reçoit des informations supplémentaires à propos de la personne et du fil qui a ouvert la Webview. Elle est utile pour la création d’expériences de groupe interactives et de jeux, mais aussi pour restreindre tout contenu créé pour le partage sur un fil précis.
getContext()
doit être utilisé au lieu de getUserID()
, qui est désormais obsolète.
Appelez cette fonction pour obtenir le PSID de la personne, ainsi que l’ID et le type du fil. Pour une liste complète des paramètres de la méthode, consultez la référence getContext().
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
La réponse envoyée au rappel de réussite est un objet JavaScript au format suivant :
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
Vous pouvez être amené à transmettre les informations récupérées par getContext()
à votre serveur principal et à les valider avant d’effectuer une action comme une connexion ou un achat. Cela vous garantit que les informations sont bien tirées de Messenger et qu’elles n’ont pas été usurpées.
Le paramètre signed_request
est encodé avec base64url et signé avec une version HMAC de votre clé secrète, en fonction de la spécification OAuth 2.0.
Vous pouvez le valider en suivant ces quatre étapes :
'.'
(par exemple, 238fsdfsd.oijdoifjsidf899
).issued_at
de la charge utile pour que la demande soit récente. Vous pouvez suivre ces étapes dans n’importe quel langage de programmation moderne. Voici un exemple en 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, '-_', '+/')); }
Le décodage de la charge utile renvoie un objet contenant les mêmes informations que celles renvoyées par getContext()
, mais avec en plus les champs algorithm
, issued_at
et page_id
:
{ "psid": "1293479104029354", "algorithm": "HMAC-SHA256", "thread_type": "GROUP", "tid": "1411911565550430", "issued_at": 1491351619, "page_id": 167938560376726 }
N’oubliez pas que pour éviter de divulguer accidentellement votre clé secrète, cette validation doit se faire sur votre serveur et jamais avec le code côté client.
Certaines entreprises utilisent une structure de page mondiale avec plusieurs pages associées à un ID d’app ou un bot. Dans ce cas, les ID du fil renvoyés par getContext()
dans l’extension de discussion sont différents pour les personnes d’autres pays.
Utilisez l’API suivante pour transformer l’ID du fil par pays en ID mondial, et utilisez-le pour stabiliser les utilisateurs qui accèdent à l’extension de discussion à partir de leur page régionale respective.
Récupérer l’ID du fil mondial :
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
Exemple de réponse :
{"tid":1577059318985661,"global_tid":1577059318985661}
S’il n’y a pas de page mondiale, global_tid
n’apparaît pas.