本文涵盖与 apps communication 方法相关的主题。
, g/ p9 ~$ [0 [- E2 i
$ V6 R# ]6 m9 ], W" X4 ^8 V" G9 B7 U( O' o4 O
调用方法要调用 Telegram 迷你应用程序的方法,开发人员应使用 postEvent 函数: - import { postEvent } from '@telegram-apps/bridge';
+ [$ L& T$ b. @0 c! {) ? - 8 v! `9 R: W) |% T G+ M8 I
- postEvent('web_app_setup_back_button', { is_visible: true });
复制代码该功能会根据当前 环境自动确定发送事件的正确方式。 它能识别 Telegram 应用程序类型并选择合适的流程。 request当开发人员需要调用 Telegram 小应用程序方法和 接收特定事件时,应使用 request 函数。 例如,调用web_app_request_viewport 方法并捕捉 viewport_changed 事件以获取实际视口数据: - import { request } from '@telegram-apps/bridge';
9 q6 c. w- [+ Y0 F - 4 n2 d. H+ O+ \- _, q, F
- const viewport = await request(
1 d: f" `& }# T% D0 ]; f - 'web_app_request_viewport',0 [/ g/ I- a9 O t1 x. |
- 'viewport_changed',
4 s3 m/ y( I# N - );1 X; M5 \3 J: _+ T3 M% w0 K' b# `; g
- H V( _8 I0 ^- console.log(viewport);
$ u$ D- V- _8 n" X( f8 j, C( m - // Output:
) J R6 F" d2 v( y& m+ x% j - // {
3 F1 j4 P; H Q0 m9 I - // is_state_stable: true,
( D5 A; T' F& I( O& r - // is_expanded: false,
& v# E; m$ V: Q! B - // height: 320# p6 ^6 g/ i( Y+ t( _: t
- // };
复制代码 , O$ n9 T b2 [
如果 Telegram 小应用程序方法接受参数,则应在第三个参数的 params 属性 中传递这些参数: - const buttonId = await request('web_app_open_popup', 'popup_closed', {1 {5 @! A# p; n7 `
- params: {
: b8 s8 s3 ]- g% y: p+ l- z" ~ - title: 'Caution',0 a* n% \0 t5 v6 Y% w* r
- message: 'Should we delete your account?',' D& P- x$ `, I! c3 h |
- buttons: [7 E: {% s$ a ^8 [, V! h. @
- { id: 'yes', type: 'ok' },
* K, i( E( I, K: _ - { id: 'no', type: 'cancel' },
$ e6 v/ e( G0 @; {' P$ @0 [ - ]," E% r( k# \/ X" z5 g. n! ?2 h
- },
; W m5 H* i7 Z* U) y; b - });
复制代码 7 {# P8 h$ @2 n7 }/ m
它还可以同时跟踪多个事件: - const result = await request(. o* t0 K- z" i& v7 V$ E
- 'web_app_open_scan_qr_popup',
3 M4 |) Z- g/ I% I& z j+ G4 p7 s1 F - ['qr_text_received', 'scan_qr_popup_closed'],! t4 {* A) e& X: B. s+ J9 O( O
- );
) f8 V Q; j1 l# | - 9 z. U( a& ^2 U# J" g& ~* ^
- // The result will either be the qr_text_received & q: _1 s; Z2 c0 Z' v( i+ Y$ y! B/ n# E
- // or scan_qr_popup_closed event payload.
复制代码该函数允许传递其他选项,如 postEvent、abortSignal、timeout、 和 capture。
: t/ V D) Q) ]7 g* x' PpostEventpostEvent 选项允许开发人员覆盖用于调用 Telegram 迷你应用程序 方法的方法。 - request('web_app_request_viewport', 'viewport_changed', {+ K) `# j# U) f% W0 r) ~
- postEvent() {9 P1 E1 v" C2 t; M @0 x
- console.log('Hey, I am not going to do anything');
N: R- L1 Q) F' G0 b& O* n) | - },8 H9 _: Q3 P3 X. _- o. i+ f- u+ \
- });
复制代码 abortSignal要从外部终止返回的承诺,需要使用 abortSignal 选项。 - const controller = new AbortController();
3 s! V7 w1 R, r7 J4 u - - C9 a' u/ ]+ a0 s; M
- request('web_app_request_viewport', 'viewport_changed', {
4 X& R7 w P- ? - abortSignal: controller.signal,, |3 ]" V+ @, f9 g0 M* D
- });! X' j! ^/ X) R b9 l* P: [
- : Y# x6 a. v6 Y) K
- setTimeout(() => {$ y2 U, \& v, u2 m; I) n4 O
- controller.abort(new Error('Not going to wait anymore'));# K; C# U& [+ a+ \& l
- }, 500);
复制代码 timeouttimeout 选项为请求指定一个超时时间。 - import { request } from '@telegram-apps/bridge';
* Q! H& w# L7 p' U! g - + \$ L' k! c* }) }6 J$ j
- try {
- ~9 ] a- p+ w, k - await request(/ r* s; N l/ X8 t$ U
- 'web_app_invoke_custom_method',
* {" c. V) h# d - 'custom_method_invoked',
. z$ P2 G% k; [) b N4 C - {
1 ]2 W5 D/ {2 `" |( F5 Z$ @- @ - timeout: 5000,
: J* U* m( J+ K {% ` - params: {
4 J" l. G) B7 E0 s) I- u; m$ L2 l - req_id: '1',
1 f) S q! H v5 J) K+ W: r* ^ - method: 'deleteStorageValues',+ s) g x0 S4 _0 }5 ?2 n
- params: { keys: ['a'] },9 r$ C. ^, x- X) n1 Y
- },4 `+ s. q, N' o, @
- },+ D! F1 q& D7 ^* [7 D
- );. U, @6 x8 o. P" l( b. N; s! {$ r
- } catch (e) {* X( A( s& e1 {8 c+ p
- console.error(e); // TypedError with e.type === 'ERR_TIMED_OUT'
. d% g, o! v; f2 W- z - }
复制代码 capturecapture 属性是一个允许开发人员确定是否应捕获 Mini Apps 事件并从 request 函数返回的函数: - const slug = 'jjKSJnm1k23lodd';8 v' W* i, C* U: L# g
- $ J% b: {+ A- z5 }
- request('web_app_open_invoice', 'invoice_closed', {" n/ I8 v! E1 e* J: m
- params: { slug },
, p; D x S- v# o. o: U - capture(data) {" A _6 r2 `4 B0 e' g
- return slug === data.slug;& _. K! B% b, o! X% D" v
- },
) Q8 o. \0 q$ t2 Q% V! j - });
复制代码默认情况下,request 函数会捕获具有所需名称的第一个事件。 在这种情况下,只有当事件具有预期的标签时,该函数才会捕获事件,特定于 [color=var(--vp-c-brand-1)]invoice_closed 事件。 当传递一个事件数组时,capture 函数将收到一个对象,其中包含 event: EventName 和 payload?: EventPayload 属性的对象。 & @( X. A( ^* Y1 z
|