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

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

回答

收藏

Telegram 小程序 | TypeScript @telegram-apps/bridge | 环境

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

本帖最后由 riyad 于 2025-2-22 20:27 编辑 9 }+ y' q- E" Y
4 o. S0 \. d( k/ n, ]

此软件包只能在 Telegram 应用程序中使用。 由于非 Telegram 环境缺乏 Telegram 特有的特性,调用 retrieveLaunchParams 或 [postEvent 等方法将导致 错误。

不过,该软件包提供的实用工具可以帮助开发人员在 Telegram 之外开发应用程序 ,或者确定当前环境是否根本不是 Telegram 迷你应用程序。

isTMA

要检查当前环境是否为 Telegram 迷你应用程序,开发人员可以使用 isTMA 函数。 它有两种工作模式:简单 和 完整。

简单

在这种模式下,函数会尝试从环境中获取启动参数。

如果提取成功,该环境将被视为 Telegram 迷你应用程序。 简单模式是同步模式,返回一个布尔值。

  1. import { isTMA } from '@telegram-apps/bridge';$ u0 w  P& N3 M3 k" F0 m% u
  2. $ p' A( ?7 C0 }# o- N3 U0 X4 B5 c% g
  3. if (isTMA('simple')) {2 n' i" \) r. ]
  4.   console.log('It\'s Telegram Mini Apps');4 v: n7 H% f9 k7 D( Q- d$ M
  5. }
复制代码

这种模式略显肤浅,但仍可满足大多数应用的需要。 要进行更 可靠的检查,请使用 [color=var(--vp-c-brand-1)]complete 模式。

完整

在这种模式下,函数会调用 Telegram Mini Apps 特有的方法,并等待 方法特有的事件发生。

  1. import { isTMA } from '@telegram-apps/bridge';
    9 b% g# u% S! b5 T4 q  R/ _% h
  2. ' L2 F+ p; B' L$ m4 _
  3. if (await isTMA()) {+ M$ U& x$ N4 E" S9 ?7 D' m) Q1 P, o# [
  4.   console.log('It\'s Telegram Mini Apps');
    # N, _( V( c6 M! d6 k2 O/ w
  5. }
复制代码
函数等待事件的时间为 100 毫秒,但开发人员可以通过传递带有 timeout: number 属性的对象来更改时间 。
  1. if (await isTMA({ timeout: 50 })) {
    % O  v2 ]. k0 i. C- q: X6 j: V6 X
  2.   console.log('It\'s Telegram Mini Apps');
    ) e7 G1 y  g* `6 x
  3. }
复制代码
mockTelegramEnv

该软件包提供了 mockTelegramEnv 函数,可模仿 Telegram 提供的环境。 它可以帮助开发人员在 [color=var(--vp-c-brand-1)]BotFather 中创建小应用程序记录,甚至无需创建记录即可开始构建应用程序。

该函数接受原始或解析格式的发射参数。 下面就是一个例子:

  1. mockTelegramEnv({
    + [* r* a  q7 W9 I0 x
  2.   themeParams: {
    4 n* O# ^3 e2 ^, V
  3.     accentTextColor: '#6ab2f2',* y4 A9 ]/ p" h& }" z: _- G$ D
  4.     bgColor: '#17212b',* A2 B5 A3 u7 ]  b6 P
  5.     buttonColor: '#5288c1',7 Z6 F5 ]  m% D4 k; e
  6.     buttonTextColor: '#ffffff',
    : O" v# _' n9 z; N* u3 S4 C; a
  7.     destructiveTextColor: '#ec3942',
    7 N0 X- A& p* o. i
  8.     headerBgColor: '#17212b',5 Z4 ~# N+ f7 W/ ]4 Q  Y% b
  9.     hintColor: '#708499',: H2 ]& X; }4 ]- Z
  10.     linkColor: '#6ab3f3',
    2 D0 m! M; A4 A9 H0 P
  11.     secondaryBgColor: '#232e3c',4 g5 ^5 S3 N, x. w& b5 h6 h
  12.     sectionBgColor: '#17212b',
    + C2 T1 M$ n( O$ T+ e4 ^2 \8 ?- _
  13.     sectionHeaderTextColor: '#6ab3f3',* v) E+ A$ L) [& B/ Z, G+ S
  14.     subtitleTextColor: '#708499',- m3 L! }8 k+ j) c7 ?! N2 C, @4 c
  15.     textColor: '#f5f5f5',! D" i6 o  B. @7 k+ j; |' l
  16.   },
    3 }, i2 j. y! M0 u" `1 ]. m0 V
  17.   initData: {1 m) g+ V% z: n# m3 E% Q
  18.     user: {
    2 M7 S  ?6 G) d
  19.       id: 99281932,) S4 F4 u0 m1 M! I1 g9 v% Q" @; O7 W
  20.       firstName: 'Andrew',6 M4 d2 O  g4 e+ J, H
  21.       lastName: 'Rogue',
    " Q8 Q2 d: p# x3 P) t
  22.       username: 'rogue',
    0 b& B/ G9 E$ g$ ^
  23.       languageCode: 'en',
    # V* n* k. \% s" X
  24.       isPremium: true,- Q& R, T7 M4 Z' m# M
  25.       allowsWriteToPm: true,- @3 Z3 ]" D( S% _. `& P& v4 r& I" h
  26.     },
    4 w$ o5 G* v0 Y. P
  27.     hash: '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31',
    & t0 _' |" A' {' N
  28.     authDate: new Date(1716922846000),$ E0 u4 B  b$ C: W( h
  29.     startParam: 'debug',
    # G) z' I3 p/ [( D( e% w
  30.     chatType: 'sender',* ]- k+ ]. U1 Y9 W
  31.     chatInstance: '8428209589180549439',
    3 ~: }/ [" w2 p  y
  32.   },' T8 ?5 H) P; O
  33.   initDataRaw: new URLSearchParams([5 ~4 C1 g$ |0 }  |1 |. Z
  34.     ['user', JSON.stringify({5 k8 }& c$ E/ k/ Q3 T% Y
  35.       id: 99281932,
    ) j2 N0 s4 R1 J
  36.       first_name: 'Andrew',
    8 Z& j4 f' k. d( K$ H
  37.       last_name: 'Rogue',3 e& N2 x. z. F9 w: @# f* I' \" |$ \
  38.       username: 'rogue',
    & J- E9 j% S+ ^- D: B: n
  39.       language_code: 'en',. ]7 }! ^# S1 V2 w. S3 ^* R
  40.       is_premium: true,
    7 |: N: W1 q; {, U" w
  41.       allows_write_to_pm: true,9 F  U2 T( x6 F- I4 d
  42.     })],1 {* M/ V, X- P  @9 Z+ m1 g, D+ f
  43.     ['hash', '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31'],2 B2 d# {4 W; B# l
  44.     ['auth_date', '1716922846'],/ ]- b+ m& C8 [
  45.     ['start_param', 'debug'],* N. @; a7 Z; i* v' R: u
  46.     ['chat_type', 'sender'],
    ! H, b9 X5 O: z" ?
  47.     ['chat_instance', '8428209589180549439'],
    . y: J$ N4 F) T* I6 {- V& ]8 ~
  48.   ]).toString(),
    3 V9 X; P4 C9 t9 n1 m  t! R
  49.   version: '7.2',6 P3 F/ {' a* x  \
  50.   platform: 'tdesktop',
    0 z) `' x% V( _8 w* i* ^/ m- W
  51. });
复制代码

WARNING

该函数仅模仿 Telegram 环境行为。 它不会发送任何真正的 请求,也不会执行只能在 Telegram 应用程序中看到的操作。


, Q, T2 Q! ~: ?. M" X1 B
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则