本帖最后由 riyad 于 2025-2-21 19:28 编辑 % o0 w7 Z- I% J$ ?: L+ G6 @/ l
- Y0 R+ v/ D8 g1 Y简而言之,所有迷你应用程序都是典型的网络应用,每个应用程序都需要独立的 URL 来获取和展示内容。Telegram 不为开发者的应用提供存储空间,因此开发者需要为自己的应用创建存储空间并获取 URL。 9 s1 j6 N# U8 y/ N. T
Telegram 只接受具有有效 SSL 证书并使用 HTTPS 协议的链接。与生产环境不同,测试环境允许直接使用 IP 地址。
6 r) B* p( Y% t* S
尽管我们可以使用测试环境来开发应用程序,但环境 往往无法显示出良好的性能。 如果在 测试环境中遇到低性能问题,请考虑切换到生产环境。
4 g: k, q7 u, y& K# g
导言
3 W' `2 U- O7 p/ M7 J: B+ [在深入了解本指南之前,首先需要了解为什么我们需要一些链接。通常情况下,我们需要应用链接来实现以下目的之一: 用于开发:这些链接是临时的,仅用于通过开发服务器展示应用程序。它们还可以用来与其他用户分享,展示当前的进度。1 Y: g3 t! t" R
用于生产:这些链接用于在生产环境中访问应用程序,通常是供普通用户使用的。 本指南将涵盖这两种情况。在 React.js 的模板中,您可以找到实际的链接生成和使用方法。 接下来的章节将使用 Vite作为应用程序的基本打包工具。 - W8 s9 z6 L- a- @/ T: ~! a9 w# E
关于开发
! Y0 ?7 y) L) T4 }$ c& Y5 x! o3 e应用程序的开发过程被认为是一个持续不断的过程。长期运行的应用程序总是需要维护,为此,应该通过降低准入门槛和减少由此产生的认知负荷来优化这一过程。 开发链接用于查看应用程序当前的开发状态。这些链接可以分为两类:本地链接和远程链接。让我们来仔细看看。
, c8 ^9 W! P: G
WARNING 开发链接不应在生产中使用。 生产链接不应是动态的 ,必须引用提供迷你应用程序内容的服务器。 在本地环境* t6 k! ^& p) }3 S6 a- B, J7 p2 G
用于开发的本地链接是指仅对当前设备可用的链接。 流行的打包工具(如 Vite)提供了运行本地服务器的功能,用于开发。因此,您将获得一个可以在 BotFather 中使用或直接在浏览器中打开的 IP 地址。 I5 W) z0 W7 z6 l
以下是运行开发服务器并返回开发链接的基本 Vite 配置。 $ V8 w9 m: o* A. c4 D( y
- import { defineConfig } from 'vite';
) C+ u9 [3 b5 a: S' ] - 3 K T0 p" N+ i6 e) b
- export default defineConfig();</font>
复制代码
3 {6 p5 j/ |7 @) z3 w7 |你会在控制台中看到一条信息: - VITE ready in 112 ms8 K: ^2 @1 r; x+ ^7 Q, q6 g8 \
( T: R; H/ G8 X/ s7 C d- ➜ Local: http://localhost:51730 o3 h0 `% X5 L. r# f
- ➜ press h + enter to show help</font>
复制代码您可能已经注意到,该链接不符合 BotFather 的要求,因为它必须使用 HTTPS 协议。接下来,我们来获取 HTTPS 链接。
) v: L3 Q* n- ]% O- v! ]' B$ X Vite 插件[color=var(--vp-c-brand-1)]Vite 的生态系统提供了 @vitejs/plugin-basic-ssl 插件。 允许在指定域上使用自签名 SSL 证书启动应用程序。 下面是一个基本例子: - import { defineConfig } from 'vite';
% y* t4 [2 M; O8 O - import basicSsl from '@vitejs/plugin-basic-ssl';/ K+ C3 _+ e* M4 E: o, U8 m) M8 |
- - i# B" m; E9 x- y/ Z7 g @
- export default defineConfig({; `- D7 Q9 {. C( \) k b
- plugins: [
{+ E# V0 I0 w- K4 T7 u - basicSsl(),
; n% l" _* _5 [) D3 c - ],
0 [/ _/ G$ f) T' l/ U - });</font>
复制代码您可能会发现还有一些其他有用的选项。 要了解更多相关信息,请访问 插件的 文档 。 启动开发服务器后,您会看到类似的信息: - VITE ready in 275 ms
* L) Y" t9 W+ w2 W9 q
) S/ p7 A( v+ f9 _9 a9 ^6 U- ➜ Local: https://localhost:51732 r I, i0 M' `1 g' Q8 D( z3 k
- ➜ press h + enter to show help</font>
复制代码本地链接 (https://localhost:5173) 指向本地开发服务器。在浏览器、Telegram for macOS、Telegram Desktop 或 Telegram Web A/K 中打开此链接时,会出现一条与不信任证书相关的警告消息。 只需将此作为例外,然后继续申请。 mkcert
* [. ?. Y# u# x! J4 y' l5 Xmkcert 是一个允许开发人员生成 SSL 证书及相关私钥的工具。它还会创建一个证书颁发机构,使本地设备信任生成的证书。以下是安装指南。 比方说,您想创建一个只有您的设备知道的自定义域,仅用于开发目的。 让它类似于 tma.internal。 为了让当前设备 知道哪个 IP 与该域相关联,我们应该修改 hosts文件,并将 tma.internal 映射到 127.0.0.1。 然后,运行指定该域的 mkcert 工具,就会收到两个文件:SSL 证书和私钥。 这两个文件都应在 Vite 配置中指定。 下面是使用 mkcert 生成的实体配置 Vite 开发服务器的示例: - import { defineConfig } from 'vite';- L0 f0 t$ Y8 K
- import { resolve } from 'node:path';
' }5 f7 ~. s& `6 \6 Q - import { readFileSync } from 'node:fs';+ v% g2 r" Z* I, [
- ( }& B D; R2 \( ^
- export default defineConfig({% Q% j( X% {3 W/ @% i, F- l+ g" q2 c
- server: {. Z3 T: O+ @2 I4 U9 I
- host: 'tma.internal',
# o* ~: O2 o3 b% B6 R! b! I - https: {
' N1 D+ l* x- M$ A. y - cert: readFileSync(resolve('tma.internal.pem')), o5 ~' r- s+ r g
- key: readFileSync(resolve('tma.internal-key.pem')),- w0 {( K' b- h/ ? l& H6 m) F4 l
- },
U5 X2 K$ ?9 A5 Q/ F& ^ g - },3 G7 q c0 M# `+ j t& g
- });</font>
复制代码网络 有时,开发人员需要在不同设备上打开应用程序。我们可以通过在 Vite 中使用 host 选项来实现这一功能。 - import { defineConfig } from 'vite';
* S& K, ~% d1 C/ A5 z% E - 6 e9 a( E! z1 z T: @9 F
- export default defineConfig({3 _7 x2 H0 u9 f
- server: {- i, V; s( Y9 q" j, `
- host: true,
! F% R: s7 Q7 ]: O( R; P - }," ~! u- ]6 d3 e5 ?7 i
- });</font>
复制代码或者,我们可以使用以下命令:vite --host. 启动开发服务器后,您会在控制台中看到类似的信息: - VITE v5.2.12 ready in 15 ms
% ~' z" h6 f, m. t7 r6 q
* [: p" a# S4 W* q$ U- ➜ Local: http://localhost:5173
! q# K1 f) |2 f& } - ➜ Network: http://172.20.10.8:5173% H# _7 f) Y, e9 P
- ➜ press h + enter to show help</font>
复制代码现在,你可以在同一网络的设备上访问 "网络 "链接 (http://172.20.10.8:5173)。 要获取 HTTPS 链接,请参阅本指南的前几节。 3 D8 C. z! L1 w7 o$ c
9 ?0 F9 {% U4 o6 A' p! m用于生产获得生产链接也并非难事。 为此,您可以使用流行的免费 静态服务:
$ J. M8 o% t( c2 i( ]
, _+ L% i" I3 s" j2 g; X$ ?) M: ^- G9 p
3 O; U9 U; u( a( U9 R
8 C+ f4 e( J4 ~' }
|