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

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

回答

收藏

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

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

本帖最后由 riyad 于 2025-2-22 20:27 编辑
0 y1 v0 ]% C$ L  _4 {$ Z# r1 d6 W! x0 T

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

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

isTMA

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

简单

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

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

  1. import { isTMA } from '@telegram-apps/bridge';
    - Q' f3 k# _0 J- Z9 K; s
  2. 5 N2 W# g- ~; Z
  3. if (isTMA('simple')) {( \$ `+ M3 e4 j2 I
  4.   console.log('It\'s Telegram Mini Apps');! U: {; f! ?. }9 I
  5. }
复制代码

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

完整

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

  1. import { isTMA } from '@telegram-apps/bridge';8 b) e; V2 S) ^+ K$ F5 d7 e

  2. 9 z7 \9 c1 Y4 A* L* i
  3. if (await isTMA()) {+ ?7 |% P1 `$ l$ R# H* C8 X- ]
  4.   console.log('It\'s Telegram Mini Apps');
    ) `+ d# W, k7 A# W2 d; Y9 ]
  5. }
复制代码
函数等待事件的时间为 100 毫秒,但开发人员可以通过传递带有 timeout: number 属性的对象来更改时间 。
  1. if (await isTMA({ timeout: 50 })) {
    ) B* o$ f2 r& X- }' c6 q: m; h
  2.   console.log('It\'s Telegram Mini Apps');4 ]# a" i8 A* |& j7 f
  3. }
复制代码
mockTelegramEnv

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

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

  1. mockTelegramEnv({
    % u) `  R2 R% C9 c4 @
  2.   themeParams: {
    & |8 f& N  [# v7 [$ P5 Y- P% M
  3.     accentTextColor: '#6ab2f2',
    + U1 d7 [0 H  [( ]% Q: W
  4.     bgColor: '#17212b',
    ; D# D0 e2 L% Q
  5.     buttonColor: '#5288c1',
    6 t' ~( h& M! h8 K
  6.     buttonTextColor: '#ffffff',
    , }! P3 Z$ V' N( A
  7.     destructiveTextColor: '#ec3942',2 }8 @% f, O) k6 G& t) h
  8.     headerBgColor: '#17212b',4 d( R3 W& J. B+ ^% k6 i3 V5 n; Q
  9.     hintColor: '#708499',
    9 h! b1 B/ c+ t( c7 _
  10.     linkColor: '#6ab3f3',% }9 Z1 R2 Q. D3 [
  11.     secondaryBgColor: '#232e3c',+ U3 x/ I' s1 G; ?  r
  12.     sectionBgColor: '#17212b',
    ) @) Y* U- M' q0 y$ f: p
  13.     sectionHeaderTextColor: '#6ab3f3',4 `2 N1 e% L: G* \* I! m7 d" A. I' K# f
  14.     subtitleTextColor: '#708499',) s" O- U! s$ k$ B, U# g, r
  15.     textColor: '#f5f5f5',
    2 ^8 Y& M, o" d% K
  16.   },$ _' ]/ p7 U- ]% @+ r3 ^' B- H+ T
  17.   initData: {8 S& B& X, r. \& N/ {+ _
  18.     user: {
    8 A8 T7 F5 r- A5 a
  19.       id: 99281932,
    9 h' `9 K& \* q, T! e7 U5 u
  20.       firstName: 'Andrew',
    % R3 M& z" p: X4 ]/ r
  21.       lastName: 'Rogue',
    ( Q" Y4 [; R2 O- j  b6 d$ }
  22.       username: 'rogue',1 n& ]& S% r* J8 S% Z$ K# o+ ^
  23.       languageCode: 'en',
    : [0 z/ O* _0 l4 ?+ g
  24.       isPremium: true,; V8 U9 _+ ^: q  w* e; q0 k- p. K7 U+ `
  25.       allowsWriteToPm: true,
    - `7 j$ A6 u# |
  26.     },, G$ i( b: G( o% k0 j, H
  27.     hash: '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31'," I% f/ O9 @& y
  28.     authDate: new Date(1716922846000),
    ; v1 A+ w& t, t0 D& @
  29.     startParam: 'debug',6 o5 Y( u. ^* u/ m5 u" G
  30.     chatType: 'sender',
    8 p/ `& [6 Y# Z; i) g6 j) y
  31.     chatInstance: '8428209589180549439',
    1 x: }. @" a4 G% u1 |9 l
  32.   },  S3 E( F* @* K. t  M6 E
  33.   initDataRaw: new URLSearchParams([# S2 X- i4 u' q" c. l# |
  34.     ['user', JSON.stringify({3 H  [4 l4 j4 G4 u5 d3 B- r
  35.       id: 99281932,
    , b7 V( @7 N0 i2 @  o- ~
  36.       first_name: 'Andrew',0 T  e( e$ a2 D4 Y1 L: q1 O
  37.       last_name: 'Rogue',
    2 ]) O$ d$ q2 r2 Y4 W
  38.       username: 'rogue',6 {$ I+ \3 v% m1 X4 |% M' H
  39.       language_code: 'en',
    5 k- Q# p  s% Q9 C6 Q
  40.       is_premium: true,( [- J8 y* b# {& |' R
  41.       allows_write_to_pm: true,
    6 ^9 E$ x: ?& Y7 G3 X+ G
  42.     })],
    $ @  h6 X6 K$ M$ G- S6 ^
  43.     ['hash', '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31'],
    & c4 f5 E: j, d0 D
  44.     ['auth_date', '1716922846'],& k% U( X4 X) q1 T0 e
  45.     ['start_param', 'debug'],
    ; O* D3 X- {6 ^1 c
  46.     ['chat_type', 'sender'],
    8 a7 Z3 l: T  J! y
  47.     ['chat_instance', '8428209589180549439'],# _9 O& j9 A2 m! {
  48.   ]).toString(),
    9 ~& B  E, J3 N% m4 D
  49.   version: '7.2',
    " r# f8 B7 M( D' M( k+ N
  50.   platform: 'tdesktop',
    / y% q6 }4 Z7 C9 @! q7 y2 a
  51. });
复制代码

WARNING

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


, p4 Y9 ]0 S; y2 C4 r# _9 R
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则