自定义方法是指可与 web_app_invoke_custom_method 迷你应用程序 方法一起使用的方法。 invokeCustomMethod 函数通过重复使用 request 函数,简化了此类方法的使用。 下面是一个不使用该函数的示例: - const reqId = 'ABC';
: C, | F/ U- n( V9 W) t/ ]
M. \; L1 I- s O7 r& |- request('web_app_invoke_custom_method', 'custom_method_invoked', {& G" _# O! w. C* F
- params: {6 {" `# v3 ?/ n) ~
- req_id: reqId,$ T0 |7 i( `( C( ^" b
- method: 'deleteStorageValues',! [9 _4 Z+ M/ E6 \. u& q7 `
- params: { keys: ['a'] },
1 }) C; g; U$ A+ b$ U- S; i9 T! c - },
. [' c8 E' b1 Z: \ - capture(data) {! X+ ]3 N" w8 M1 S- |3 x
- return data.req_id === reqId;
3 j h- Y. ]& \+ W8 T - }. I; g S% b9 N' S/ p' G/ u7 A
- });# V% A8 y1 ]0 u; R" G
复制代码现在,使用 invokeCustomMethod 函数重新编写:
" O6 v7 j8 O- P9 M; C- import { invokeCustomMethod } from '@telegram-apps/bridge';
2 A; P m3 }, e, p/ Q, N0 @/ G8 m - 2 k# C) M. I* s
- invokeCustomMethod('deleteStorageValues', { keys: ['a'] }, 'ABC');
复制代码在内部,它只是封装了与方法相关的特定逻辑,因此开发人员不应该 。 与request函数不同,invokeCustomMethod函数会解析结果,并检查 是否包含error属性。 如果是,函数会抛出相应的错误;否则,返回 result 属性。 检查方法支持postEvent 函数不会检查当前 Telegram 应用程序是否支持指定的方法。 为此,需要使用 supports 函数。
; g9 |7 p* }$ U. D, }它接受 Mini Apps 方法名称和当前平台版本: - import { supports } from '@telegram-apps/bridge';
+ D' P. B! k/ ^3 t( F
8 j" l, t6 N& c$ X! u- supports('web_app_trigger_haptic_feedback', '6.0'); // false
# v2 n4 U: H! M7 W. |( W( I - supports('web_app_trigger_haptic_feedback', '6.1'); // true
复制代码 8 @( `" g7 e$ h, b& b; {
supports 函数还可以检查方法参数中的特定参数是否受 支持: - import { supports } from '@telegram-apps/bridge';
7 r; T! [5 U' k$ Z D: y0 y' L8 Q7 O
( Q6 g" D; `( O" g- supports('web_app_open_link', 'try_instant_view', '6.0'); // false7 |# ~5 | Z% ?$ k4 m+ I+ F
- supports('web_app_open_link', 'try_instant_view', '6.7'); // true
复制代码TIP 建议在调用 Mini Apps 方法之前使用该函数,以防止应用程序 陷入僵局或遇到意外行为。 创建更安全的 postEvent该软件包包含一个名为 createPostEvent 的函数,它将当前 Mini Apps 版本作为 输入。 它返回 postEvent 函数,该函数内部检查传递的方法和 参数是否受支持。 - import { createPostEvent } from '@telegram-apps/bridge';' E. L. W; O; @9 Q& i9 m$ H5 I
- 9 u# V! Z' X0 I# z' G5 v
- const postEvent = createPostEvent('6.5');
2 w& t% ^ ^! p* r
5 ^6 M8 `1 U7 u% G5 }- // Will work fine.
`. S$ g/ X( l# p2 m5 } - postEvent('web_app_read_text_from_clipboard');3 T' i6 C1 ^, w2 C& X- }
' p5 o4 n) c+ j! H2 }- // Will throw an error, this method is not supported 1 t0 z9 i0 W4 a8 M; }
- // in Mini Apps version 6.5.
4 ?( m9 w% \0 m$ z$ e; n/ L - postEvent('web_app_request_phone');
复制代码 ) ~% i8 i( C R& m7 p
作为第二个可选参数,函数接受一个回调,如果方法或 参数不支持,则调用该回调。 - createPostEvent('6.0', (data) => {
, L, ^( {) w5 g1 N2 e! N - if ('param' in data) {1 u3 w# G5 y& G% z
- console.warn(
% V8 l @9 z6 A) o0 O' S - 'Oops, the parameter', data.param,
4 ^8 N# |2 N+ A. `; V4 D9 j+ _) M$ o - 'in method', data.method,
( k1 s/ J9 Y) g+ M, F* R ]$ s9 V - 'is not supported',9 M) n' r+ ^4 f I" w% c6 ~
- );
1 T u$ h: m' f/ b2 `) T - } else {: t' |6 ^6 ]4 m) ~/ \! X/ W3 H
- console.warn('Oops, method', data.method, 'is not supported');
% C6 C6 O; b5 @% K6 ^6 J - }
/ m( t3 @. `2 Y9 G - });
复制代码
0 v7 Q2 }4 V1 N: x# f0 f若要记录警告而不是抛出错误,可以传递 'non-strict' 值: - createPostEvent('6.0', 'non-strict');' e) O. O7 j! |' M# b8 ]. y
复制代码 6 c& K; ~& }0 s# ~- r; \
$ l' T4 Q% O3 w1 ]* j/ q( C2 Y; b( O
! U5 c) H$ z4 b5 ^0 @ |