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

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

回答

收藏

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

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

本帖最后由 riyad 于 2025-2-22 20:27 编辑
1 W( R9 v; p" ~  M" B$ h
' {3 o6 v# b) V7 R5 m$ l8 `

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

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

isTMA

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

简单

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

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

  1. import { isTMA } from '@telegram-apps/bridge';
    / K6 D! W& h* O; D1 p% X3 _

  2. / w" d( h& T7 B" ^* n* B
  3. if (isTMA('simple')) {' L# _+ W. M& M  z0 C) q
  4.   console.log('It\'s Telegram Mini Apps');+ B8 i6 Y2 [1 F; q' T  _+ v
  5. }
复制代码

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

完整

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

  1. import { isTMA } from '@telegram-apps/bridge';3 z: h9 d6 m0 i  G% I5 A3 v

  2. % d7 I" A- A( [( D* c
  3. if (await isTMA()) {; k) V* P5 d6 \
  4.   console.log('It\'s Telegram Mini Apps');" I6 W: @: n/ v8 ?5 V
  5. }
复制代码
函数等待事件的时间为 100 毫秒,但开发人员可以通过传递带有 timeout: number 属性的对象来更改时间 。
  1. if (await isTMA({ timeout: 50 })) {
    % E4 A2 q: O  ?9 B
  2.   console.log('It\'s Telegram Mini Apps');! R5 b# S& Y% O1 y
  3. }
复制代码
mockTelegramEnv

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

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

  1. mockTelegramEnv({
    6 X# V/ k% S& _& \
  2.   themeParams: {3 V: @4 k0 Q. [& Y& a1 z' F% w
  3.     accentTextColor: '#6ab2f2',' S6 r. `- U# q% B& O
  4.     bgColor: '#17212b',
    ) f) }/ Z9 I3 ]. P0 Y5 n* |7 {5 R
  5.     buttonColor: '#5288c1',3 I* ?; }7 r1 j% m2 _) k# g4 D
  6.     buttonTextColor: '#ffffff',4 U) r6 \' |; T+ t" @% T. [
  7.     destructiveTextColor: '#ec3942',
      Z% E0 t& l5 x
  8.     headerBgColor: '#17212b',
    1 f- \& j( }; v% k: k. j
  9.     hintColor: '#708499',
    6 U0 v: \, Q( p8 N. r
  10.     linkColor: '#6ab3f3',7 @* w; A/ N/ |4 @  c4 D
  11.     secondaryBgColor: '#232e3c',  j1 y/ b( y' ]5 w# a: F* p
  12.     sectionBgColor: '#17212b',0 ^; i5 c& V3 N, [: I5 x
  13.     sectionHeaderTextColor: '#6ab3f3',/ E9 w5 Y$ l5 ?# t( B: h; p
  14.     subtitleTextColor: '#708499',! E8 S( g3 Y) P, h9 [/ R- k- n! F5 C: R
  15.     textColor: '#f5f5f5',
    3 W" ]6 W3 u1 p  T# E2 ]
  16.   },1 s) U4 s  s6 p$ Z/ k4 S8 v
  17.   initData: {
    + }0 s3 n$ s! v
  18.     user: {
    # J0 ]! c# l: K% y' p  ]" @
  19.       id: 99281932,9 r! s$ q6 z, b+ `- @: y
  20.       firstName: 'Andrew',$ k+ _. W. |+ @& p# ?
  21.       lastName: 'Rogue',/ M" _& }4 i0 X8 p" {6 P" s& @% R
  22.       username: 'rogue',
    9 ^' ^4 x" B% x6 U- m% Y7 f
  23.       languageCode: 'en',
    ' b; ~5 _- y! ]. h
  24.       isPremium: true,
    5 u$ `2 s0 x8 l5 H' X. M& P
  25.       allowsWriteToPm: true,
    ! \5 k1 q& X; @1 b  @3 {/ K" H
  26.     },
    7 S- J) s+ ^0 Y; V+ V% B
  27.     hash: '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31',8 _9 G" U( S% a8 d
  28.     authDate: new Date(1716922846000),4 [3 v8 ~! ]' R; J
  29.     startParam: 'debug',
    9 w' Q+ z( r# X! C0 @' i
  30.     chatType: 'sender',' z+ p# `+ R6 ?! g4 d! u# z& I7 \
  31.     chatInstance: '8428209589180549439',- j9 M* i3 O1 H6 S8 s; p
  32.   },9 C. i+ c, k/ E0 E& ^5 [" y+ l8 I
  33.   initDataRaw: new URLSearchParams([# i( `' p6 c% F3 u$ o# O0 i, g
  34.     ['user', JSON.stringify({- H5 t. w" g2 L1 V% }7 b
  35.       id: 99281932,
    2 f/ ]& e  l4 {, Y( r. v
  36.       first_name: 'Andrew',
    ; Y; M+ b1 }2 ]) |7 c# H4 J; f
  37.       last_name: 'Rogue',6 `1 u- ~( n8 M: V- b8 Q3 J
  38.       username: 'rogue',4 L' u- s3 C) G
  39.       language_code: 'en',2 @& J: b- }. v# Y7 g
  40.       is_premium: true,4 j# I2 w: k; f- ]
  41.       allows_write_to_pm: true,) x/ u" ]' Z1 o$ f
  42.     })],; s/ V4 X% v$ W% M+ |
  43.     ['hash', '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31'],
    3 Y0 B1 i# V( x/ h( c; e! f
  44.     ['auth_date', '1716922846'],
    2 m8 U( M/ b. V5 O
  45.     ['start_param', 'debug'],
    9 n# Q( @( z& W2 w/ j. @. O
  46.     ['chat_type', 'sender'],: h* f/ B, ~% L: m! D/ h
  47.     ['chat_instance', '8428209589180549439'],) Z' h* m# l5 J  L0 h/ [
  48.   ]).toString(),
    6 f$ b3 @" x  p4 w+ i2 I
  49.   version: '7.2',
    " V' p% I( [0 V
  50.   platform: 'tdesktop',3 H: C. h2 ^. K! n8 d3 b& L7 P5 o2 A
  51. });
复制代码

WARNING

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


3 e. j4 `6 a8 G
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则