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

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

回答

收藏

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

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

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

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

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

  1. const reqId = 'ABC';. Y7 o2 U$ U! ^; ]  ]6 d% ~

  2.   N* G3 \/ N$ g/ m! f0 I
  3. request('web_app_invoke_custom_method', 'custom_method_invoked', {
    0 s& d3 V7 s+ w; R. A
  4.   params: {1 S1 K# {) B1 |6 e: g
  5.     req_id: reqId,: i7 A( n1 X- l$ U0 W2 t1 W! l
  6.     method: 'deleteStorageValues',
    " i& S% r7 b* {' y
  7.     params: { keys: ['a'] },
      j8 E1 w" L" u5 U; ?
  8.   },' @4 B4 H! W: c+ X& Z/ L" q
  9.   capture(data) {
    7 L& {+ X0 W" K
  10.     return data.req_id === reqId;* ^3 B& v- c3 i- U) V% b+ ^
  11.   }. K& g" L6 y5 E4 s. w, L8 ?: q/ X
  12. });9 k& R+ `, T" o% q
复制代码

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

, h9 m, _! v# o  i1 d
  1. import { invokeCustomMethod } from '@telegram-apps/bridge';
    3 P; J* g: S% ?1 a
  2. & @0 R9 z, M  Y% \; I4 F. ]1 Z/ C
  3. invokeCustomMethod('deleteStorageValues', { keys: ['a'] }, 'ABC');
复制代码

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

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

检查方法支持

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


8 W! Y6 ^; {! S. U4 Q. h- Q

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

  1. import { supports } from '@telegram-apps/bridge';
    ' j* J0 y5 q) h4 z7 F( ^7 }# h

  2. 2 o+ O- A3 }- U$ b$ ?
  3. supports('web_app_trigger_haptic_feedback', '6.0'); // false
    + P) c! Q5 y' G9 K! s2 a: ^
  4. supports('web_app_trigger_haptic_feedback', '6.1'); // true
复制代码

8 M, P5 q' a6 I$ `4 w

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

  1. import { supports } from '@telegram-apps/bridge';
    - f1 W, g8 |1 F  n
  2. : p' z# q( y6 \  ]
  3. supports('web_app_open_link', 'try_instant_view', '6.0'); // false
    : b) a+ R& c6 w
  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';0 x/ g0 ]* O1 x- Z, D: Y

  2. % T4 c/ q' H2 H6 U/ y2 s
  3. const postEvent = createPostEvent('6.5');+ w- L5 o+ Z. O& w

  4. + ^! y6 T1 o( y/ ?6 G: }  p4 V& ?
  5. // Will work fine.6 |+ m3 X$ w5 S8 Y) E& U* s, c
  6. postEvent('web_app_read_text_from_clipboard');
    , R4 D2 t3 m$ q

  7. 1 B9 b: \# Q8 _, h2 n
  8. // Will throw an error, this method is not supported
    9 Z. c/ C: S( M* h  @' [; g' t" T
  9. // in Mini Apps version 6.5.7 R2 z2 d9 s6 E2 p
  10. postEvent('web_app_request_phone');
复制代码
- x) ^# Y& Y) `$ P6 _% {

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

  1. createPostEvent('6.0', (data) => {4 D+ `6 [: K) V5 U
  2.   if ('param' in data) {$ }. e1 J7 a# G( y: X. P3 q
  3.     console.warn(
    ( @5 }- X$ ]& E( E* R' I) s6 Q9 W
  4.       'Oops, the parameter', data.param,2 B& H0 ]4 k4 O4 A& `6 b7 [
  5.       'in method', data.method,9 Z0 [/ ~4 N, b$ \8 E
  6.       'is not supported',
    % |5 t' Z6 B3 n6 x4 W
  7.     );" n) P" z/ D$ V/ A2 I6 S
  8.   } else {7 Q, e+ W# ^) f, z( h4 ]: w
  9.     console.warn('Oops, method', data.method, 'is not supported');
    3 h" [# _0 w5 Y! F8 L+ E) I8 S
  10.   }* ^* v; R1 G' n6 ]; M! ?" Z/ b
  11. });
复制代码

6 `! e  m- ~/ }0 g- m; @

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

  1. createPostEvent('6.0', 'non-strict');
    0 q! @  T8 J5 B/ S+ c3 M, F
复制代码
/ P3 L3 s. O  a8 O1 E' Q

, |# E7 X& _& O
" D. C  e1 Y- i: a$ d! T
8 M$ j9 j0 |: U& Y: j2 j+ ~
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则