تُعد هذه الطريقة جزءًا من مجموعة SDK لملحقات Messenger. للحصول على معلومات عن تضمين مجموعة SDK في موقعك، راجع إضافة مجموعة SDK لملحقات Messenger.
التوفر
تتوفر واجهة API فقط في Messenger الإصدار 113 أو أحدث على Android والإصدار 114 أو أحدث على iOS.
وللتحقق من توفرها على عميل محدد، يمكنك استدعاء getSupportedFeatures()
والبحث عن الخاصية context
في الاستجابة.
تسترجع الطريقة getContext()
معلومات إضافية عن الشخص وسلسلة الرسائل التي فتحت النافذة. وتتضح فائدة هذه الواجهة في إنشاء تجارب وألعاب جماعية تفاعلية إلى جانب تقييد أي محتوى كان الغرض هو مشاركته فقط في سلسلة رسائل محددة.
يجب استخدام getContext()
بدلاً من getUserID()
، والتي تم إيقاف استخدامها حاليًا.
يمكنك استدعاء هذه الوظيفة للحصول على PSID للشخص ومعرف سلسلة الرسائل ونوع سلسلة الرسائل. للاطلاع على قائمة كاملة بمعلمات الطريقة، يرجى الرجوع إلى getContext() Reference.
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
ستكون الاستجابة التي تم تمريرها إلى استدعاء حالة النجاح عبارة عن كائن JavaScript بالتنسيق التالي:
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
هناك مواقف قد ترغب فيها في نقل المعلومات التي تم الحصول عليها من getContext()
إلى النظام الخلفي والتحقق من صحتها قبل تنفيذ إجراءات مثل تسجيل الدخول أو الشراء. ويتيح لك هذا ضمان الحصول على المعلومات من Messenger بالفعل وعدم غشها.
ومعلمة signed_request
مشفرة بتشفير base64url وموقّعة بأحد إصدارات HMAC من المفتاح السري للتطبيق، استنادًا إلى مواصفات OAuth 2.0.
يمكنك التحقق من صحتها باتباع الخطوات الأربع التالية:
'.'
(مثل: 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 }
احرص على تجنب السماح بالمفتاح السري لتطبيقك دون قصد، حيث يجب أن تتم عملية التحقق من الصحة هذه من جانب الخادم وليس في رمز العميل على الإطلاق.
تستخدم بعض الأنشطة التجارية بنية صفحة عامة مع عدة صفحات مقترنة بمعرف تطبيق أو برنامج تلقائي واحد. في هذه الحالة، ستكون معرفات سلاسل الرسائل التي تم إرجاعها بواسطة getContext()
في ملحق الدردشة مختلفة لدى الأشخاص في مختلف البلدان.
يمكنك استخدام واجهة API التالية لتحليل معرف سلسلة الرسائل الخاص بصفحة البلد إلى معرف سلسلة رسائل عام واستخدام هذا المعرف العام في الحفاظ على الحالة بين المستخدمين الذين يصلون إلى ملحق الدردشة من صفحاتهم الإقليمية الخاصة بهم.
استرداد معرف سلسلة الرسائل العام:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
نموذج للاستجابة:
{"tid":1577059318985661,"global_tid":1577059318985661}
في حالة عدم وجود صفحة عامة، لن تكون القيمة global_tid
موجودة.