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

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

回答

收藏

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

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

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

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

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

  1. const reqId = 'ABC';
    : C, |  F/ U- n( V9 W) t/ ]

  2.   M. \; L1 I- s  O7 r& |
  3. request('web_app_invoke_custom_method', 'custom_method_invoked', {& G" _# O! w. C* F
  4.   params: {6 {" `# v3 ?/ n) ~
  5.     req_id: reqId,$ T0 |7 i( `( C( ^" b
  6.     method: 'deleteStorageValues',! [9 _4 Z+ M/ E6 \. u& q7 `
  7.     params: { keys: ['a'] },
    1 }) C; g; U$ A+ b$ U- S; i9 T! c
  8.   },
    . [' c8 E' b1 Z: \
  9.   capture(data) {! X+ ]3 N" w8 M1 S- |3 x
  10.     return data.req_id === reqId;
    3 j  h- Y. ]& \+ W8 T
  11.   }. I; g  S% b9 N' S/ p' G/ u7 A
  12. });# V% A8 y1 ]0 u; R" G
复制代码

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


" O6 v7 j8 O- P9 M; C
  1. import { invokeCustomMethod } from '@telegram-apps/bridge';
    2 A; P  m3 }, e, p/ Q, N0 @/ G8 m
  2. 2 k# C) M. I* s
  3. invokeCustomMethod('deleteStorageValues', { keys: ['a'] }, 'ABC');
复制代码

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

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

检查方法支持

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


; g9 |7 p* }$ U. D, }

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

  1. import { supports } from '@telegram-apps/bridge';
    + D' P. B! k/ ^3 t( F

  2. 8 j" l, t6 N& c$ X! u
  3. supports('web_app_trigger_haptic_feedback', '6.0'); // false
    # v2 n4 U: H! M7 W. |( W( I
  4. supports('web_app_trigger_haptic_feedback', '6.1'); // true
复制代码
8 @( `" g7 e$ h, b& b; {

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

  1. import { supports } from '@telegram-apps/bridge';
    7 r; T! [5 U' k$ Z  D: y0 y' L8 Q7 O

  2. ( Q6 g" D; `( O" g
  3. supports('web_app_open_link', 'try_instant_view', '6.0'); // false7 |# ~5 |  Z% ?$ k4 m+ I+ F
  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';' E. L. W; O; @9 Q& i9 m$ H5 I
  2. 9 u# V! Z' X0 I# z' G5 v
  3. const postEvent = createPostEvent('6.5');
    2 w& t% ^  ^! p* r

  4. 5 ^6 M8 `1 U7 u% G5 }
  5. // Will work fine.
      `. S$ g/ X( l# p2 m5 }
  6. postEvent('web_app_read_text_from_clipboard');3 T' i6 C1 ^, w2 C& X- }

  7. ' p5 o4 n) c+ j! H2 }
  8. // Will throw an error, this method is not supported 1 t0 z9 i0 W4 a8 M; }
  9. // in Mini Apps version 6.5.
    4 ?( m9 w% \0 m$ z$ e; n/ L
  10. postEvent('web_app_request_phone');
复制代码
) ~% i8 i( C  R& m7 p

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

  1. createPostEvent('6.0', (data) => {
    , L, ^( {) w5 g1 N2 e! N
  2.   if ('param' in data) {1 u3 w# G5 y& G% z
  3.     console.warn(
    % V8 l  @9 z6 A) o0 O' S
  4.       'Oops, the parameter', data.param,
    4 ^8 N# |2 N+ A. `; V4 D9 j+ _) M$ o
  5.       'in method', data.method,
    ( k1 s/ J9 Y) g+ M, F* R  ]$ s9 V
  6.       'is not supported',9 M) n' r+ ^4 f  I" w% c6 ~
  7.     );
    1 T  u$ h: m' f/ b2 `) T
  8.   } else {: t' |6 ^6 ]4 m) ~/ \! X/ W3 H
  9.     console.warn('Oops, method', data.method, 'is not supported');
    % C6 C6 O; b5 @% K6 ^6 J
  10.   }
    / m( t3 @. `2 Y9 G
  11. });
复制代码

0 v7 Q2 }4 V1 N: x# f0 f

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

  1. 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 @
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则