Menggunakan SDK plugin WV¶
Untuk mendukung pengambilan data pengguna, pelaksanaan trading, penanganan event dan lainnya, plugin WebView (klien) harus membangun komunikasi yang andal dengan aplikasi cTrader (host). SDK plugin WebView memfasilitasi interaksi ini dengan cTrader, dan panduan ini menjelaskan alur komunikasi antara klien dan host.
Instalasi SDK ¶
SDK plugin WebView tersedia sebagai paket npm. Untuk menginstal SDK, bukalah direktori proyek Anda di jendela terminal lalu jalankan perintah ini:
npm install @spotware-web-team/sdk
Sinkronisasi klien-host ¶
Catatan
Protokol yang relevan tersedia sebagai referensi pesan.
Sebelum pesan dapat dipertukarkan, saluran komunikasi harus dibuat. Operasi yang biasa dilakukan meliputi:
-
Pada awal komunikasi, terjadi pertukaran event alive di mana klien dan host sama-sama mengirimkan suatu event.
-
Host mengirim event registrasi (
payloadType = 2000). Contoh:window.dispatchEvent(new MessageEvent('message-from-host', { data: {"clientMsgId": "152cf2d4-bfb6-4426-a303-9243b6a0daf4", "payload": {}, "payloadType": 2000} })) -
Plugin WebView mengirim event konfirmasi (
payloadType = 2001). Contoh:window.dispatchEvent(new MessageEvent('message-to-host', { data: {"clientMsgId": "152cf2d4-bfb6-4426-a303-9243b6a0daf4", "payload": {}, "payloadType": 2001} })) -
Untuk setiap event konfirmasi baru, event registrasi baru dikirim untuk memastikan sinkronisasi, meskipun plugin diinisiasi ulang.
Catatan
Jika salah satu pihak gagal menerima event alive yang sesuai, plugin tidak akan terpasang. Untuk menghindari perulangan, plugin harus mengirim event konfirmasi satu kali saja dan melacak alur pesan.
Peringatan
Pengiriman beberapa event konfirmasi akan memicu event registrasi berulang, sehingga berpotensi mengakibatkan perulangan yang tidak diinginkan.
Permintaan ¶
Setelah sinkronisasi selesai, plugin dapat berinteraksi dengan layanan cTrader dengan memanggil metode SDK yang berkomunikasi secara internal dengan host.
-
Plugin memanggil suatu metode SDK. Misalnya, plugin dapat meminta informasi akun pengguna.
-
Plugin WebView mengirim permintaan. Contoh:
{ "payloadType": 2100, "payload": { "payloadType": 175, "clientMsgId": "asd1-asd1" }, "clientMsgId": "asd2-asd2" }Secara internal, plugin mengatur dua bidang
clientMsgId(inner dan outer):- Inner mengidentifikasi permintaan spesifik dalam payload serta digunakan oleh cTrader untuk mencocokkan permintaan tersebut dengan respons yang sesuai dan event yang berkaitan.
- Outer (ketika digunakan bersama dengan inner) melacak alur pesan keseluruhan antara klien dan host.
-
Host mendengarkan permintaan:
window.addEventListener('message-to-host', function (event) {})
Catatan
Semua metode SDK untuk mengirim permintaan dan menerima respons tersedia sebagai referensi pesan server, sementara detail tentang bidang yang berulang dalam permintaan dan respons disediakan sebagai model.
Respons ¶
-
Host mengirimkan respons:
window.dispatchEvent(new MessageEvent('message-from-host', { data }))Setiap respons menyertakan
clientMsgIdasli untuk menghubungkannya dengan permintaan. Respons didasarkan pada struktur ini:payloadType: 2101 clientMsgId: "<same-id-as-request>"Respons real-time atau berganda menghasilkan event baru menggunakan:
payloadType: 2102 clientMsgId: "<same-id-as-request>" -
Klien mendengarkan respons:
window.addEventListener('message-from-host', function (event) {})
Event dan langganan ¶
Plugin WebView dapat berlangganan data real-time seperti kuotasi, pembaruan deal, event pelaksanaan dan lainnya.
-
Berlangganan data kuotasi dengan mengirim permintaan:
{ "payloadType": 2100, // indicates a request "payload": { "payloadType": 601, "symbolId": ["EURUSD_ID"], "clientMsgId": "quote-sub-123" }, "clientMsgId": "asd2-asd2" // outer message ID } -
Langganan memicu host untuk mengirim respons berkala:
{ "payloadType": 2102, // indicates an event "payload": { "payloadType": 3, // mapped to QUOTE_EVENT "payload": { "ask": 85274, "bid": 85271, "depth": [], "high": 85340, "low": 84932, "sessionClose": 85133, "symbolId": 9, "tickbar": [], "timestamp": 1750162811236, "trendbar": [] }, "clientMsgId": "asd1-asd1" // inner message ID }, "clientMsgId": "asd2-asd2" // outer message ID }
Deeplink ¶
Plugin dapat meminta cTrader untuk membuka deeplink (URL internal) dengan mengirim permintaan ini:
payloadType: 2103
clientMsgId: "<client-msg-id>"
Plugin kemudian mendengarkan respons:
payloadType: 2104
clientMsgId: "<same-id-as-request>"
Plugin WebView dapat mengimplementasikan deeplink yang didukung seperti yang ditunjukkan di bawah ini:
// Open EURUSD symbol overview
const openEURUSDInfo = useCallback(() => {
const url = baseUrl ? ${baseUrl}symbols/EURUSD/info : 'symbols/EURUSD/info';
openUrl(url);
}, [baseUrl, openUrl]);
Ringkasan pesan ¶
Tabel di bawah ini merangkum pesan-pesan protokol.
| Tipe | Tipe payload | Inisiasi | Contoh penggunaan |
|---|---|---|---|
| Siklus hidup/jabat tangan | 2000 (event registrasi),2001 (event konfirmasi) | Diperlukan untuk menginisiasi komunikasi plugin. Host mengirim event registrasi, plugin merespons dengan event konfirmasi. | Pengaturan saluran, pemasangan, kesiapan komunikasi. |
| Event (satu arah) | 2102 | Diinisiasi server. Event dikirim tanpa permintaan klien sebelumnya. Host menghasilkan satu clientMsgId; backend cTrader menyertakan satu lagi. | Kuotasi pasar, pembaruan pelaksanaan trading, notifikasi harga. |
| Permintaan navigasi internal | 2103 (OpenInternalUrlReq), 2104 (OpenInternalUrlRes) | Permintaan yang diinisiasi plugin untuk bernavigasi dalam aplikasi cTrader. Host memproses dan mengonfirmasi melalui respons berpasangan. | Membuka ikhtisar suatu simbol, membuka layar order untuk suatu simbol. |
| Permintaan/respons | 2100 (req), 2101 (res) | Diinisiasi oleh plugin. Digunakan untuk operasi respons tunggal. Baik clientMsgId inner maupun outer digunakan kembali dalam respons. | Mendapatkan informasi akun, simbol atau deal. |
| Permintaan/multi-event | 2100 (permintaan), kemudian beberapa 2102 (event) | Satu permintaan memicu aliran event terkait. Event menggunakan kembali clientMsgId asli (inner), dan ID event baru dihasilkan oleh host. | Memasang order, berlangganan pembaruan setelah suatu perintah. |
| Respons galat | 2500 (PublicErrorRes) | Host atau cTrader menggunakannya untuk melaporkan kegagalan memproses suatu permintaan. Menyertakan clientMsgId outer dan inner. | Payload tidak valid, akses tidak sah, permintaan SDK yang salah format. |
Penanganan galat ¶
Peringatan
Alasan umum terjadinya galat antara lain plugin yang tidak dikenal atau tidak terdaftar, format permintaan tidak valid, dan kegagalan validasi sisi server.
Jika terjadi kesalahan, host mengeluarkan respons galat terstruktur:
payloadType: 2500
clientMsgId: <original-id>
{
"payloadType": 2500,
"clientMsgId": "<original-id>",
"error": "InvalidPayload"
}
SDK menangani galat dan menampilkannya kepada pembuat plugin.