本文涵盖与 apps communication 方法相关的主题。1 `& D1 Q0 E0 D0 @
1 G! w! D7 X2 o X! G* u8 R" U# J4 q- }2 U; q n9 P/ h0 y
调用方法要调用 Telegram 迷你应用程序的方法,开发人员应使用 postEvent 函数: - import { postEvent } from '@telegram-apps/bridge';6 M; l6 V2 q+ X% r% q9 }8 ^
- 9 Z+ y* h6 T, |8 o
- 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';, b6 M; |" n1 W8 @, {
5 d: u1 T8 f; S6 s- const viewport = await request(
8 s' W. [! w: M# k4 E) p$ h' e - 'web_app_request_viewport',1 y; n" N" D% ~! a6 d
- 'viewport_changed',. K1 x# a' l" Y( _
- );
1 f. X3 c5 R/ h- `5 D
4 t" I/ W* J6 W p' z- console.log(viewport);& L0 u4 |2 Z% I u& q
- // Output:
0 ?$ P& t6 {" H v - // {
# T4 V0 b2 J w - // is_state_stable: true,; U9 V5 N+ z5 w; `
- // is_expanded: false,
6 p) G# M7 g4 g- x - // height: 320
2 e) ^+ c* J! c. C2 [ - // };
复制代码
" a. e! o3 l: Z& N O如果 Telegram 小应用程序方法接受参数,则应在第三个参数的 params 属性 中传递这些参数: - const buttonId = await request('web_app_open_popup', 'popup_closed', {: i9 @* Z) k0 F/ z
- params: {6 P1 x9 S _, K) q; d# h- M
- title: 'Caution',
. X5 s7 [6 Q( ~6 b3 ~4 e. o - message: 'Should we delete your account?',6 q% b4 }" h; }) `$ `
- buttons: [
/ s# q0 P( U9 x - { id: 'yes', type: 'ok' },
% c9 U/ P9 q. W5 Z+ s/ { - { id: 'no', type: 'cancel' },' z( @: D9 P5 w+ b4 z
- ],
+ K2 U7 s( d% Q1 ^( _2 Y - },
7 H5 H1 w9 E! V6 c - });
复制代码 ) s9 u& j3 p( O% v' W- @" e
它还可以同时跟踪多个事件: - const result = await request(: i! R. _ k3 l6 d( P" l- X
- 'web_app_open_scan_qr_popup',# q. l3 g) N- P9 z$ `& d
- ['qr_text_received', 'scan_qr_popup_closed'],
. h v0 S/ F* }, ]2 ? - );$ ~( T6 }' z' O6 ]3 Y2 m
- 0 R! `9 E) Y% @- k* c; ]/ ]3 h
- // The result will either be the qr_text_received
* F; L4 H) u1 _ - // or scan_qr_popup_closed event payload.
复制代码该函数允许传递其他选项,如 postEvent、abortSignal、timeout、 和 capture。
2 c: z8 m* m0 i9 n' G$ mpostEventpostEvent 选项允许开发人员覆盖用于调用 Telegram 迷你应用程序 方法的方法。 - request('web_app_request_viewport', 'viewport_changed', {
( P0 [; h# p3 K# Y! \3 w3 L - postEvent() {& Y, t) E7 z [6 W% S5 D! j
- console.log('Hey, I am not going to do anything');/ Z2 Y, z$ `; i3 S6 u
- },8 T4 f8 l: {- _8 W
- });
复制代码 abortSignal要从外部终止返回的承诺,需要使用 abortSignal 选项。 - const controller = new AbortController();4 B% _( E1 C) F6 G+ n" x
( @/ n: D/ W3 i7 `. T- request('web_app_request_viewport', 'viewport_changed', {( G! @" l6 v3 y" [& j
- abortSignal: controller.signal,
7 p( P! k" i/ x3 t - });
3 l Z- |. q/ \ M0 ~6 w
/ S4 l2 r+ p: V" B' w& E6 Q- setTimeout(() => {5 t# f8 n& B/ | B7 B- ]& G
- controller.abort(new Error('Not going to wait anymore'));# q9 J# f7 T1 Q; O# N5 ]
- }, 500);
复制代码 timeouttimeout 选项为请求指定一个超时时间。 - import { request } from '@telegram-apps/bridge';
$ d' m2 j$ v. Q% t5 [
7 ?: v7 v, R+ j- try {
+ Q N: n3 a. F) J2 A. }% Z - await request(
; w: k, ]+ Y5 D. Q - 'web_app_invoke_custom_method',4 `: L8 ` {$ U( k; g. V$ ?7 v" F' e
- 'custom_method_invoked',
& N% W* ]+ ^/ e$ y% g% A: V - {3 g% c! S M3 `' U0 L& S
- timeout: 5000,
# ?; O7 V5 K1 u* O - params: {2 T* s7 k; C: K/ x
- req_id: '1',) Y7 y" @6 t0 \1 W+ \! `2 }
- method: 'deleteStorageValues',. y4 X, B# N3 }& I
- params: { keys: ['a'] },
/ \3 I/ f9 X6 j% J5 Y+ | - },( @4 x7 H Y$ k, }( \0 C2 K1 Z; k1 z
- },# V' y' [0 W6 Q: B( w, V0 d
- );
! b1 P' T' ]' ]8 @& z7 ~ - } catch (e) {/ B! J1 p! m$ I7 ~( _
- console.error(e); // TypedError with e.type === 'ERR_TIMED_OUT'
, K9 e Q8 ]+ Q6 a6 \; x# M - }
复制代码 capturecapture 属性是一个允许开发人员确定是否应捕获 Mini Apps 事件并从 request 函数返回的函数: - const slug = 'jjKSJnm1k23lodd'; m5 v y+ j( v, r8 w; e
: I$ y1 Y9 Y- `# T# R) ~! A- request('web_app_open_invoice', 'invoice_closed', {' f, t$ b& I# q. q/ R0 z
- params: { slug },9 g0 x/ ]% E; t2 j" ?$ ?
- capture(data) {
8 L S! d2 s; c0 S5 R7 S: e - return slug === data.slug;
+ `! m; {: h, R2 [( u6 \ - },
( ^5 }5 A9 G3 V3 t+ `8 I - });
复制代码默认情况下,request 函数会捕获具有所需名称的第一个事件。 在这种情况下,只有当事件具有预期的标签时,该函数才会捕获事件,特定于 [color=var(--vp-c-brand-1)]invoice_closed 事件。 当传递一个事件数组时,capture 函数将收到一个对象,其中包含 event: EventName 和 payload?: EventPayload 属性的对象。 7 S5 o( ]+ N0 E/ F) z$ R
|