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

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

回答

收藏

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

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

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

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

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

  1. const reqId = 'ABC';
    ) W6 S! p5 L% U; P8 Z
  2. 3 _2 \! W' Q/ e
  3. request('web_app_invoke_custom_method', 'custom_method_invoked', {
    9 \0 a/ V5 g% U! y/ D+ d
  4.   params: {1 ]+ @+ G& m9 \* J% V) y
  5.     req_id: reqId,/ z+ R: g0 f) W
  6.     method: 'deleteStorageValues',
    0 H$ a# X0 X: b! W3 h# s# g% l
  7.     params: { keys: ['a'] },9 k" k/ s( b  {! x* z
  8.   },
    & z7 E, I0 f2 J/ F8 J# \2 B
  9.   capture(data) {) \4 _+ U) k, _% Z) ?
  10.     return data.req_id === reqId;
    5 ~- {( I. p% J
  11.   }# i3 n& \8 A4 X' g
  12. });# n4 S. |; b- s
复制代码

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

( M$ E6 q( z4 t. N0 Z
  1. import { invokeCustomMethod } from '@telegram-apps/bridge';
    8 i  c1 M) e$ U8 o$ T2 J7 g

  2. ( O- h4 F  n* v' c/ r
  3. invokeCustomMethod('deleteStorageValues', { keys: ['a'] }, 'ABC');
复制代码

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

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

检查方法支持

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


/ j+ Q+ r0 V- R: c* t8 I1 `( ^2 n  D

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

  1. import { supports } from '@telegram-apps/bridge';/ v7 ?) V- ?/ I7 L

  2. ; b; {7 B4 c9 i$ u0 v1 Z. Y( b
  3. supports('web_app_trigger_haptic_feedback', '6.0'); // false, y; s9 n) T( v) o7 j8 H+ o
  4. supports('web_app_trigger_haptic_feedback', '6.1'); // true
复制代码

5 V0 Z, B' D) \# i

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

  1. import { supports } from '@telegram-apps/bridge';' \+ A) o3 c8 E7 g9 \$ S
  2. 1 M& q9 \- u  g' `3 [# ^( E2 X: J3 M
  3. supports('web_app_open_link', 'try_instant_view', '6.0'); // false! i6 I5 O: K$ L* w6 y
  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';
    ' g  M5 y) a7 V+ A0 B1 q( G6 o1 Y
  2. 9 B8 X% J! `2 Z  [; ^$ B! y
  3. const postEvent = createPostEvent('6.5');
    1 b) e& W. s6 h- e; S$ F
  4. , o/ q. Y  _' v8 m2 m
  5. // Will work fine.' }* `7 @1 h4 i; y5 m9 ?# Y
  6. postEvent('web_app_read_text_from_clipboard');5 V# A! F/ j, p% H7 y
  7. + y0 f0 b' s. C! P5 ~: D
  8. // Will throw an error, this method is not supported - X) B# V) Z! u. R
  9. // in Mini Apps version 6.5.1 }' @/ ~7 O( J* P! _
  10. postEvent('web_app_request_phone');
复制代码

( c: U+ U# O8 ]& a  R3 f

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

  1. createPostEvent('6.0', (data) => {) r) i) Y0 e0 b& ^. E
  2.   if ('param' in data) {; s0 J- o, A4 h6 m4 n( {
  3.     console.warn(7 {, c7 u" n% |' l7 n
  4.       'Oops, the parameter', data.param,- b0 B; ^9 Z6 D; H2 }& |7 `
  5.       'in method', data.method,
    9 v  q8 G' |( ^; D* }; k3 L
  6.       'is not supported',
    % f; H- h4 P& \  w5 c# W& w
  7.     );8 i1 D# u1 C- C# w/ _3 K8 j& v
  8.   } else {% s, u7 Z& K3 v! n% _6 b
  9.     console.warn('Oops, method', data.method, 'is not supported');
    5 Q# v& c6 k1 z0 g, k5 x9 E
  10.   }- R3 Z: Q% d, _
  11. });
复制代码

8 y3 _0 w5 G1 {3 F) S' c

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

  1. createPostEvent('6.0', 'non-strict');
    8 X7 F0 a. a+ ^% _6 X5 {
复制代码

5 P) N3 L3 A  E$ J, O
3 D( S  D3 K6 R& H- x2 _! \
/ a3 |9 }& r+ O9 Y. W+ X2 }! L0 s1 n% {3 }8 g0 t  t; G
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则