Metode ini adalah bagian dari SDK Ekstensi Messenger. Untuk informasi mengenai penyertaan SDK di situs Anda, buka Tambahkan SDK Ekstensi Messenger.
Ketersediaan
API ini tersedia hanya di Messenger v113+ di Android dan v114+ di iOS.
Untuk memeriksa ketersediaannya untuk klien tertentu, panggil getSupportedFeatures()
dan periksa properti context
dalam tanggapannya.
Metode getContext()
menarik informasi tambahan tentang orang dan utas yang membuka webview. Ini bermanfaat dalam menciptakan pengalaman dan game grup yang interaktif, serta pembatasan konten apa pun yang ditujukan untuk dibagikan hanya dengan utas tertentu.
getContext()
yang seharusnya digunakan sebagai ganti dari getUserID()
, yang sekarang dihentikan.
Panggil fungsi ini untuk mendapatkan PSID orang, ID utas, dan jenis utas. Untuk daftar lengkap parameter metode, lihat Referensi getContext().
MessengerExtensions.getContext('YOUR_APP_ID',
function success(thread_context){
// success
},
function error(err){
// error
}
);
Tanggapan yang diluluskan ke callback yang berhasil akan berupa objek JavaScript dalam format berikut:
{
"thread_type": "GROUP",
"tid": "1411911565550430",
"psid": "1293479104029354",
"signed_request": "5f8i9XXH2hEaykXHKFvu-E5Nr6QRqN002JO7yl-w_9o.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUwNDA0NjM4MCwicGFnZV9pZCI6NjgyNDk4MTcxOTQzMTY1LCJwc2lkIjoiMTI1NDQ1OTE1NDY4MjkxOSIsInRocmVhZF90eXBlIjoiVVNFUl9UT19QQUdFIiwidGlkIjoiMTI1NDQ1OTE1NDY4MjkxOSJ9"
}
signed_request
Terdapat beberapa situasi yang mungkin membuat Anda ingin mentransmisikan informasi yang diperoleh dari getContext()
ke backend Anda dan memvalidasinya sebelum melakukan tindakan seperti masuk atau pembelian. Dengan ini, Anda dapat memastikan bahwa informasinya benar-benar berasal dari Messenger dan pesan tersebut bukan pesan tipuan.
signed_request
adalah base64url yang dikodekan dan ditandatangani dengan versi HMAC dari Kunci Rahasia Aplikasi Anda, berdasarkan spesifikasi OAuth 2.0.
Anda dapat memvalidasinya dengan 4 langkah berikut:
'.'
(mis. 238fsdfsd.oijdoifjsidf899
)issued_at
di payload untuk memastikan kebaruan permintaan tersebut. Tindakan ini dapat dilakukan di bahasa pemrograman modern apa pun. Di bawah ini adalah contoh di 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, '-_', '+/')); }
Mengodekan payload akan menghasilkan objek dengan informasi yang sama seperti informasi yang aslinya dikembalikan dengan getContext()
, namun dengan tambahan kolom algorithm
, issued_at
, dan page_id
:
{ "psid": "1293479104029354", "algorithm": "HMAC-SHA256", "thread_type": "GROUP", "tid": "1411911565550430", "issued_at": 1491351619, "page_id": 167938560376726 }
Harap diingat, untuk mencegah bocornya kunci rahasia aplikasi Anda secara tidak sengaja, validasi ini harus terjadi di server Anda dan tidak terjadi di kode sisi klien.
Beberapa bisnis menggunakan struktur halaman global dengan beberapa halaman yang berkaitan dengan satu ID aplikasi atau bot. Dalam situasi ini, ID utas dikembalikan oleh getContext()
dalam ekstensi obrolan yang akan berbeda-beda untuk orang-orang di berbagai negara.
Gunakan API berikut untuk menghasilkan ID utas khusus halaman negara di ID utas global, dan gunakan ID utas global untuk menjaga status pengguna yang mengakses ekstensi obrolan dari halaman regional mereka masing-masing.
Ambil ID utas global:
curl -X GET "https://graph.facebook.com/v2.6/{thread-id}?access_token=<PAGE_ACCESS_TOKEN>"
Contoh tanggapan:
{"tid":1577059318985661,"global_tid":1577059318985661}
Jika tidak ada halaman global, maka global_tid
tidak akan ada.