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

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

回答

收藏

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

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

本帖最后由 riyad 于 2025-2-22 20:27 编辑 % d9 y$ l" }& L+ E: ~% ^/ F9 {0 L5 \

2 z8 D, r% A& r# S( s$ ^% z1 Y

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

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

isTMA

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

简单

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

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

  1. import { isTMA } from '@telegram-apps/bridge';% F/ L6 t5 |/ f( {9 ?
  2. 1 N- f% B+ y3 k  U
  3. if (isTMA('simple')) {+ J/ G  l2 D$ y) l9 E7 ^
  4.   console.log('It\'s Telegram Mini Apps');' c3 i8 s9 o$ n6 T0 H4 z" K
  5. }
复制代码

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

完整

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

  1. import { isTMA } from '@telegram-apps/bridge';( f4 e( p6 ~( N- H" u! K
  2. ' I4 }" b. a0 K1 w- y
  3. if (await isTMA()) {
    / [& T4 L4 \7 T" ~  C- u8 M
  4.   console.log('It\'s Telegram Mini Apps');7 v9 @+ G9 X- ]0 ?; w; P
  5. }
复制代码
函数等待事件的时间为 100 毫秒,但开发人员可以通过传递带有 timeout: number 属性的对象来更改时间 。
  1. if (await isTMA({ timeout: 50 })) {
    6 u) ]  w- O0 Y
  2.   console.log('It\'s Telegram Mini Apps');
    ; a3 ]' C2 `9 X
  3. }
复制代码
mockTelegramEnv

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

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

  1. mockTelegramEnv({
    ) G' O$ ~) K! n1 b* D( D* e
  2.   themeParams: {* j* L( @7 h" }/ D+ E
  3.     accentTextColor: '#6ab2f2',. X& C+ t2 \$ m. I$ I( g$ b% q
  4.     bgColor: '#17212b',) c1 Y1 R# p& F: H/ ]0 j7 |; d# q/ H
  5.     buttonColor: '#5288c1',
    ( C8 }9 Q7 Q! }) d
  6.     buttonTextColor: '#ffffff',8 C+ L2 d* C  \# h4 `) q
  7.     destructiveTextColor: '#ec3942',1 P$ @6 d& V" P& Z  f/ x+ W
  8.     headerBgColor: '#17212b',
    # q" U% B2 m$ W' ]4 m$ N( N& E! j
  9.     hintColor: '#708499',
    ! Z) H' \, m; i
  10.     linkColor: '#6ab3f3',
    5 F# f9 v) E: L. \/ h3 J  i
  11.     secondaryBgColor: '#232e3c',& A7 Y( }- M' v
  12.     sectionBgColor: '#17212b',
    2 m. w3 [! W* l% B8 i
  13.     sectionHeaderTextColor: '#6ab3f3',/ h0 T" s) F1 W7 H! f
  14.     subtitleTextColor: '#708499',
    , u0 Z' g' x7 s+ O5 L
  15.     textColor: '#f5f5f5',; n" y7 V6 u/ {
  16.   },
    4 F- H) O. k5 E* M- f$ ^
  17.   initData: {8 A( o, R! a+ V$ v+ q
  18.     user: {, g8 Y2 E5 f& h2 c
  19.       id: 99281932,9 i  t# `4 o  [& h
  20.       firstName: 'Andrew',. f7 f% B& B. c9 E( l4 I2 u8 T
  21.       lastName: 'Rogue',
    3 e+ [! }0 Y! S5 S* [- x
  22.       username: 'rogue',4 S: j# D' c0 V; `6 j' O
  23.       languageCode: 'en',( _4 Y/ H; \) Y6 V, {
  24.       isPremium: true,
    . L4 V, Y" L  {% B# |8 N
  25.       allowsWriteToPm: true,- z: p" h6 C# M9 d. P1 q( Q
  26.     },2 ]" r# Y% A6 y4 ?5 j% {0 a
  27.     hash: '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31',
    ( v5 A0 m7 o8 L
  28.     authDate: new Date(1716922846000),5 B  Y+ a6 g3 F7 }* g, \: h
  29.     startParam: 'debug',
    ) }9 u) {+ L& Q
  30.     chatType: 'sender',
    . ]) w% t3 v$ w: o( I3 i1 Y- k! K( n
  31.     chatInstance: '8428209589180549439',
    . w% Y+ T8 O+ ^
  32.   },0 M9 n5 {4 O- W* L7 K" a4 a5 w; v
  33.   initDataRaw: new URLSearchParams([
    7 ~: N; |+ K4 n& A7 @
  34.     ['user', JSON.stringify({
    . ^% y6 Z6 e1 g# l" d! U
  35.       id: 99281932,' h, ]/ K2 Z, E/ I- d( k2 ^
  36.       first_name: 'Andrew',
    1 k8 k  R" N; [) W& B& T
  37.       last_name: 'Rogue',
    # L, a: D# x0 N8 G, v$ J
  38.       username: 'rogue',, T( h" y+ i+ e/ Y$ O
  39.       language_code: 'en',
    - E& l2 U5 u; L3 p3 [
  40.       is_premium: true,
    & n6 R8 d% g9 ~. Z
  41.       allows_write_to_pm: true,
    ' K" u1 r5 `& w5 G
  42.     })],, B# s; H( k$ r
  43.     ['hash', '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31'],3 O3 `3 Z. q2 B$ I/ k1 }- J
  44.     ['auth_date', '1716922846'],. G- t( X/ w" X4 k2 p% i
  45.     ['start_param', 'debug'],* }; Y$ W* Y3 d8 s" k
  46.     ['chat_type', 'sender'],
    # g3 a: L$ S$ w8 S; \) r+ z
  47.     ['chat_instance', '8428209589180549439'],
    ) c1 |: {8 x8 E6 x7 _$ ?$ S
  48.   ]).toString(),: a' }3 |* [' {( E7 m+ B
  49.   version: '7.2',2 s0 C$ r- p" J- Z
  50.   platform: 'tdesktop',
      H) {2 W& X7 }7 J. u7 a( u$ o+ h
  51. });
复制代码

WARNING

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

2 K4 o/ ]8 ?! i& _1 P
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则