自定义方法是指可与 web_app_invoke_custom_method 迷你应用程序 方法一起使用的方法。 invokeCustomMethod 函数通过重复使用 request 函数,简化了此类方法的使用。 下面是一个不使用该函数的示例: - const reqId = 'ABC';
# J8 F7 s8 h/ W2 ?' W
R6 e0 z" e7 e- request('web_app_invoke_custom_method', 'custom_method_invoked', {
0 w2 L/ \( y# T4 B% u - params: {
, D! X! T" X6 Z( O1 y1 x( F - req_id: reqId,
# D- z+ ]% `% I - method: 'deleteStorageValues',
& R1 J1 h8 ?: T C1 P: u! y - params: { keys: ['a'] },
! Z) v1 s( }. u - },
X- ^4 s9 G" \, H+ S - capture(data) {
/ H T7 ]$ c, M: U- ^ - return data.req_id === reqId;/ l- J! t8 P5 S5 G- n; i+ y: c
- }
& ~0 y! x# q; J4 ^: E& ] - });
9 n! h/ B0 y( j: p
复制代码现在,使用 invokeCustomMethod 函数重新编写:
( G+ J& a; s' H; T0 l* K4 z- import { invokeCustomMethod } from '@telegram-apps/bridge';& N- z3 E% r& K7 K- q4 E- y6 q
- 4 E& ^( a( `, W% Q
- invokeCustomMethod('deleteStorageValues', { keys: ['a'] }, 'ABC');
复制代码在内部,它只是封装了与方法相关的特定逻辑,因此开发人员不应该 。 与request函数不同,invokeCustomMethod函数会解析结果,并检查 是否包含error属性。 如果是,函数会抛出相应的错误;否则,返回 result 属性。 检查方法支持postEvent 函数不会检查当前 Telegram 应用程序是否支持指定的方法。 为此,需要使用 supports 函数。 7 @; ^6 ]/ i% T
它接受 Mini Apps 方法名称和当前平台版本: - import { supports } from '@telegram-apps/bridge';
6 H$ d1 R5 C8 b - / g% ~5 @2 A/ R9 P" t( I' U. u- D
- supports('web_app_trigger_haptic_feedback', '6.0'); // false
: u1 m! M' x4 N# p" Y - supports('web_app_trigger_haptic_feedback', '6.1'); // true
复制代码
N. o9 b0 Y! A5 v2 X8 L% J" }supports 函数还可以检查方法参数中的特定参数是否受 支持: - import { supports } from '@telegram-apps/bridge'; n& _; @2 |2 u/ O+ H
- 5 [6 o' p5 n) L% d$ z5 S3 d
- supports('web_app_open_link', 'try_instant_view', '6.0'); // false( ?7 R3 A9 o) p; t+ _ i
- 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';9 z4 g9 v6 [6 N9 Q1 ?$ r) Z/ g* e
- - D3 C4 a9 @7 y( v! A; N
- const postEvent = createPostEvent('6.5');# W5 M i2 e% g+ O/ d0 k
" ~; n: T5 F- |- // Will work fine.
: _; J) t; X5 u: h - postEvent('web_app_read_text_from_clipboard');
3 H/ i& Z# n+ w: q) z! b - 0 Z5 ^7 f' _# H! M* w+ _5 r% b
- // Will throw an error, this method is not supported 1 b8 H U4 j; s7 Q1 x2 O
- // in Mini Apps version 6.5.- A! G8 l9 L) g6 R. \2 i; C
- postEvent('web_app_request_phone');
复制代码
. l* A1 S/ b6 i& D) W% P& T作为第二个可选参数,函数接受一个回调,如果方法或 参数不支持,则调用该回调。 - createPostEvent('6.0', (data) => {
+ @) m$ F2 b! P+ m9 T - if ('param' in data) {
3 a* S% c6 o2 i7 H. q/ N - console.warn(3 k* X Q V. m0 {
- 'Oops, the parameter', data.param,
3 S& a/ t7 e9 E& Q! f6 L/ x - 'in method', data.method,
! z0 o7 r$ h4 Q0 |" C8 P2 Q - 'is not supported',
& \4 }& j) ?, D& y1 c - );
* s% r' x' M( `4 s$ b, t9 X2 D - } else {
4 T. f1 p" J7 G3 t1 Q - console.warn('Oops, method', data.method, 'is not supported');+ Y+ m/ D o0 `9 C% h7 s
- }& H, a! S2 e# [1 n P/ U
- });
复制代码
% s3 J, M. K" ]. v( b/ |9 ?! {8 }若要记录警告而不是抛出错误,可以传递 'non-strict' 值: - createPostEvent('6.0', 'non-strict');
, N6 q) N3 a7 C' P! z3 `: o2 Y# @; D
复制代码 + B+ p9 i- ?& }& A5 a
- U" l6 ?& S- s9 |( @) ]* x0 q: u6 G8 J s9 @4 r
) [5 }+ ?4 v) D) i' w
|