English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE คนไทย Français русский

回答

收藏

Telegram 小程序 | TypeScript @telegram-apps/bridge | 调用自定义方法

开源社区 开源社区 8587 人阅读 | 0 人回复 | 2025-02-22

自定义方法是指可与 web_app_invoke_custom_method 迷你应用程序 方法一起使用的方法。

invokeCustomMethod 函数通过重复使用 request 函数,简化了此类方法的使用。

下面是一个不使用该函数的示例:

  1. const reqId = 'ABC';6 F. U+ b: Y4 K( z5 ]0 A1 R
  2. " z' X1 {- Q7 p5 m- U6 O
  3. request('web_app_invoke_custom_method', 'custom_method_invoked', {
    2 b6 J( _6 k" e. o
  4.   params: {
    9 @2 o! H  B  s# e% o' @7 x
  5.     req_id: reqId,% Z1 x: g: }4 r5 _" O- V: L. a) Q
  6.     method: 'deleteStorageValues',
    5 g/ u! _2 i! B7 r/ ]+ t0 r' d2 n) |
  7.     params: { keys: ['a'] },
    ' ^, e! c4 A: g5 o8 s# @% _, F3 g  b
  8.   },* ]& W( n& [- g& s) g- V
  9.   capture(data) {: X( u7 h- s. ]$ C7 Y
  10.     return data.req_id === reqId;2 I0 `9 U4 m9 y3 E! F7 [7 p
  11.   }
    % W& e. U# m( h; P
  12. });8 \5 S( M& p1 ]) @9 \+ [- m4 d0 @' ~
复制代码

现在,使用 invokeCustomMethod 函数重新编写:

  A9 A2 s% A9 q4 L
  1. import { invokeCustomMethod } from '@telegram-apps/bridge';7 \* X2 m& y0 {

  2. * I3 g9 Y, s' ?
  3. invokeCustomMethod('deleteStorageValues', { keys: ['a'] }, 'ABC');
复制代码

在内部,它只是封装了与方法相关的特定逻辑,因此开发人员不应该 。

与request函数不同,invokeCustomMethod函数会解析结果,并检查 是否包含error属性。 如果是,函数会抛出相应的错误;否则,返回 result 属性。

检查方法支持

postEvent 函数不会检查当前 Telegram 应用程序是否支持指定的方法。 为此,需要使用 supports 函数。


1 M5 }1 m* J; D* [# i- [3 h$ ]

它接受 Mini Apps 方法名称和当前平台版本:

  1. import { supports } from '@telegram-apps/bridge';+ p; |$ B5 E+ ]7 [- Y  m# H3 N5 Y
  2. 6 \+ c9 S3 N0 k8 {) }
  3. supports('web_app_trigger_haptic_feedback', '6.0'); // false% S7 D5 R/ ]' o) i6 C) V  ], n
  4. supports('web_app_trigger_haptic_feedback', '6.1'); // true
复制代码
/ w% ^, m, q: A3 s

supports 函数还可以检查方法参数中的特定参数是否受 支持:

  1. import { supports } from '@telegram-apps/bridge';
    - e6 Z; ^- ^6 x' h; x
  2. 4 W  N- I' s6 W; E, l  h
  3. supports('web_app_open_link', 'try_instant_view', '6.0'); // false' l  o6 B1 A4 b1 m3 p" g  K
  4. supports('web_app_open_link', 'try_instant_view', '6.7'); // true
复制代码

TIP

建议在调用 Mini Apps 方法之前使用该函数,以防止应用程序 陷入僵局或遇到意外行为。

创建更安全的 postEvent

该软件包包含一个名为 createPostEvent 的函数,它将当前 Mini Apps 版本作为 输入。

它返回 postEvent 函数,该函数内部检查传递的方法和 参数是否受支持。

  1. import { createPostEvent } from '@telegram-apps/bridge';  v: l0 e& @- a5 X  k% L
  2. 5 `8 X8 F' x1 K
  3. const postEvent = createPostEvent('6.5');" S8 X6 N# V  r- ^' l: ]! Q

  4. $ ^3 Z& p9 A9 D( U
  5. // Will work fine.
    5 e% P/ M6 v4 k
  6. postEvent('web_app_read_text_from_clipboard');, z. [- l" q* O+ }. M

  7. + g' h: A$ M# L* f
  8. // Will throw an error, this method is not supported
    : u; n7 b* U! X, v5 M9 B
  9. // in Mini Apps version 6.5.
    ' s0 B6 d) B6 B$ Z, }- o
  10. postEvent('web_app_request_phone');
复制代码

6 E9 j; V3 V: g5 y. \

作为第二个可选参数,函数接受一个回调,如果方法或 参数不支持,则调用该回调。

  1. createPostEvent('6.0', (data) => {+ S8 Y' T3 n+ c1 ]$ v
  2.   if ('param' in data) {
    # n" v" n( X9 I+ y2 l
  3.     console.warn(
    2 e" v5 q1 k7 e1 C, D6 ]7 \
  4.       'Oops, the parameter', data.param,
    5 R) \7 E- g; O6 T6 F) N
  5.       'in method', data.method,
    3 ^5 R3 S' n, v. m: {
  6.       'is not supported',3 F% B% D; T  b; R. E8 m4 }
  7.     );7 K  t0 |5 I5 v. ~- Y. w
  8.   } else {& L# l! \" K) `% k1 y0 E- @
  9.     console.warn('Oops, method', data.method, 'is not supported');& `8 \: h3 Y/ z! M: I0 x6 B8 V
  10.   }8 t- p( @1 @  K0 [6 w
  11. });
复制代码
* q, H9 ]6 ^, Z0 v

若要记录警告而不是抛出错误,可以传递 'non-strict' 值:

  1. createPostEvent('6.0', 'non-strict');
    / W* A% D+ ^4 Y$ M- X# O
复制代码

: \4 Q$ s% f7 k, R  e/ J8 r/ _
! A2 x- Y) r& A* k+ L9 C$ W' C" z& u1 |3 z6 I
& |7 Q$ ], M+ ?; P! A
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则