Gunakan SDK plugin WV¶
Untuk menyokong pengambilan data pengguna, pelaksanaan dagangan, pengendalian acara dan banyak lagi, plugin WebView (klien) mesti menjalinkan komunikasi yang boleh dipercayai dengan aplikasi cTrader (hos). SDK plugin WebView memudahkan interaksi ini dengan cTrader, dan panduan ini menerangkan saluran komunikasi antara klien dan hos.
Pemasangan SDK ¶
SDK plugin WebView tersedia sebagai pakej npm. Untuk memasang SDK, navigasi ke direktori projek anda dalam tetingkap terminal dan kemudian jalankan arahan ini:
npm install @spotware-web-team/sdk
Penyegerakan klien-hos ¶
Nota
Protokol yang berkaitan tersedia sebagai rujukan mesej.
Sebelum sebarang pertukaran mesej boleh dilakukan, saluran komunikasi mesti diwujudkan terlebih dahulu. Operasi yang lazim termasuk:
-
Pada permulaan komunikasi, pertukaran acara aktif berlaku apabila klien dan hos menghantar acara masing-masing.
-
Hos menghantar acara pendaftaran (
payloadType = 2000). Contoh:window.dispatchEvent(new MessageEvent('message-from-host', { data: {"clientMsgId": "152cf2d4-bfb6-4426-a303-9243b6a0daf4", "payload": {}, "payloadType": 2000} })) -
Plugin WebView menghantar acara pengesahan (
payloadType = 2001). Contoh:window.dispatchEvent(new MessageEvent('message-to-host', { data: {"clientMsgId": "152cf2d4-bfb6-4426-a303-9243b6a0daf4", "payload": {}, "payloadType": 2001} })) -
Bagi setiap acara pengesahan baharu, acara pendaftaran baharu dihantar untuk memastikan penyegerakan, walaupun plugin ditetapkan pada keadaan asal.
Nota
Jika mana-mana pihak gagal menerima acara aktif yang sepadan, plugin tidak akan dipasang. Bagi mengelakkan berlakunya gelung, plugin mesti menghantar acara pengesahan hanya sekali dan menjejaki aliran mesej.
Amaran
Menghantar berbilang acara pengesahan akan mencetuskan acara pendaftaran berulang, yang berpotensi mengakibatkan gelung yang tidak disengajakan.
Permintaan ¶
Setelah penyegerakan selesai, plugin boleh berinteraksi dengan perkhidmatan cTrader dengan memanggil kaedah SDK yang berkomunikasi secara dalaman dengan hos.
-
Plugin memanggil kaedah SDK. Sebagai contoh, plugin boleh meminta maklumat akaun pengguna.
-
Plugin WebView menghantar permintaan. Contoh:
{ "payloadType": 2100, "payload": { "payloadType": 175, "clientMsgId": "asd1-asd1" }, "clientMsgId": "asd2-asd2" }Secara dalaman, plugin menetapkan dua medan
clientMsgId(dalam dan luar):- Medan yang dalam mengenal pasti permintaan khusus dalam muat beban dan digunakan oleh cTrader untuk memadankan permintaan tersebut dengan respons yang sepadan dan sebarang acara berkaitan.
- Medan yang luar (apabila digunakan bersama medan yang dalam) menjejaki aliran mesej keseluruhan antara klien dan hos.
-
Hos mendengar permintaan:
window.addEventListener('message-to-host', function (event) {})
Nota
Semua kaedah SDK untuk menghantar permintaan dan menerima respons tersedia sebagai rujukan mesej pelayan, manakala butiran tentang medan berulang dalam permintaan dan respons disediakan sebagai model.
Respons ¶
-
Hos menghantar respons:
window.dispatchEvent(new MessageEvent('message-from-host', { data }))Setiap respons termasuk
clientMsgIdasal untuk menghubungkan respons dengan permintaan. Respons adalah berdasarkan struktur ini:payloadType: 2101 clientMsgId: "<same-id-as-request>"Respons masa nyata atau berbilang menjana acara baharu menggunakan:
payloadType: 2102 clientMsgId: "<same-id-as-request>" -
Klien mendengar respons:
window.addEventListener('message-from-host', function (event) {})
Acara dan langganan ¶
Plugin WebView boleh melanggan data masa nyata seperti sebut harga, kemas kini dagangan, acara pelaksanaan dan banyak lagi.
-
Langgan data sebut harga dengan menghantar permintaan:
{ "payloadType": 2100, // indicates a request "payload": { "payloadType": 601, "symbolId": ["EURUSD_ID"], "clientMsgId": "quote-sub-123" }, "clientMsgId": "asd2-asd2" // outer message ID } -
Langganan mencetuskan hos untuk menghantar 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 }
Pautan khusus ¶
Plugin boleh meminta cTrader untuk membuka pautan khusus (URL dalaman) dengan menghantar permintaan ini:
payloadType: 2103
clientMsgId: "<client-msg-id>"
Plugin kemudian mendengar respons:
payloadType: 2104
clientMsgId: "<same-id-as-request>"
Plugin WebView boleh melaksanakan pautan khusus yang disokong seperti yang ditunjukkan di bawah:
// Open EURUSD symbol overview
const openEURUSDInfo = useCallback(() => {
const url = baseUrl ? ${baseUrl}symbols/EURUSD/info : 'symbols/EURUSD/info';
openUrl(url);
}, [baseUrl, openUrl]);
Ringkasan mesej ¶
Jadual di bawah meringkaskan mesej protokol.
| Jenis | Jenis muat beban | Permulaan | Kes penggunaan |
|---|---|---|---|
| Kitaran hayat/berjabat tangan | 2000 (acara pendaftaran),2001 (acara pengesahan) | Diperlukan untuk memulakan komunikasi plugin. Hos menghantar acara pendaftaran, plugin bertindak balas dengan acara pengesahan. | Persediaan saluran, pemasangan, kesediaan komunikasi. |
| Acara (sehala) | 2102 | Dimulakan oleh pelayan. Acara yang dihantar tanpa permintaan terlebih dahulu daripada pelanggan. Hos menjana satu clientMsgId; sistem bahagian belakang cTrader memasukkan satu lagi. | Sebut harga pasaran, kemas kini pelaksanaan dagangan, pemakluman harga. |
| Permintaan navigasi dalaman | 2103 (OpenInternalUrlReq), 2104 (OpenInternalUrlRes) | Permintaan yang dimulakan oleh plugin untuk menavigasi dalam aplikasi cTrader. Hos memproses dan mengesahkan melalui respons berpasangan. | Membuka gambaran keseluruhan simbol, membuka skrin pesanan untuk simbol. |
| Permintaan/respons | 2100 (req), 2101 (res) | Dimulakan oleh plugin. Digunakan untuk operasi respons tunggal. Kedua-dua clientMsgId dalam dan luar digunakan semula dalam respons. | Mendapatkan maklumat akaun, simbol atau dagangan. |
| Permintaan/berbilang acara | 2100 (permintaan), kemudian berbilang 2102 (acara) | Satu permintaan mencetuskan strim acara berkaitan. Acara menggunakan semula clientMsgId asal (bahagian dalam), dan ID acara baharu dijana oleh hos. | Membuat pesanan, melanggan kemas kini selepas arahan. |
| Respons ralat | 2500 (PublicErrorRes) | Hos atau cTrader menggunakan ini untuk melaporkan sebarang kegagalan memproses permintaan. Termasuk clientMsgId luar dan dalam. | Muat beban tidak sah, akses tanpa kebenaran, permintaan SDK yang salah format. |
Pengendalian ralat ¶
Amaran
Sebab umum untuk ralat termasuk plugin yang tidak dikenali atau tidak berdaftar, format permintaan tidak sah dan kegagalan pengesahan di bahagian pelayan.
Jika sesuatu yang tidak kena berlaku, hos mengeluarkan respons ralat berstruktur:
payloadType: 2500
clientMsgId: <original-id>
{
"payloadType": 2500,
"clientMsgId": "<original-id>",
"error": "InvalidPayload"
}
SDK mengendalikan ralat dan mengemukakan ralat tersebut kepada pencipta plugin.