我们看看如何安装 SDK,以便使用 TWA(Telegram Web App)的 API。我在上一章的项目中打开 App.tsx 文件,然后输入命令: + G9 H6 u; \" x. {2 S' x5 C- z
- yarn add @twa-dev/sdk8 t* ^' ^6 B6 j4 K* o# _9 m
复制代码很好,我们安装好了。现在,我们要导入网络应用程序并开始与之交互。首先,我们要在界面中向用户显示平台--如果你想根据平台实现不同的功能,这一点非常有用。其次,我们将添加一个按钮来触发一些操作。 让我们从平台开始。我们将文本加粗,并添加 WebApp 平台。我们将在屏幕上显示它。 - return (
2 h" t8 b P1 {! w, u8 M# w - <div>
7 X0 v3 c* D& S9 Q: Y - <div>, v: r! @$ Q6 ~/ P# [# j9 S
- <TonConnectButton />
: q" D& Q! Z _, | - </div>
- R+ ]! D9 \; Z, S - <div>1 t' _" } D5 q# c+ C
- <div className='Card'>% v" K/ M4 f3 Y& N
- <b>{WebApp. platform}</b>2 u, {% d( \. B- U. c2 ?) E( l. ~' Q
- <b>Our contract Address</b>
6 B8 o8 `& w; h. V& m6 ~3 ^" b - <div className='Hint">{contract_address?.slice(0, 30) + "...")</div>
2 a8 d N! u# y4 k! q8 a - <b>Our contract Balance</b>
! ~) @2 P: m5 X* l - {contract balance && (
; _: n! U' c* ^) Y* z! ~- y - <div className= 'Hint'>{fromNano(contract_balance)}</div>
$ X( M( `3 |. `* R3 | - )}% L0 Z( r6 R9 u" h; k% ]
- </div>
复制代码第二件事是操作。我们将创建一个函数 showAlert,触发后将显示警报: / C/ }0 T! C& h5 c
- function App() {- X! j6 `7 G0 n5 V7 S5 Y+ }
- const {
1 V a% M$ J/ J' y; M7 Y; j - contract_address,7 u" ^/ }- P3 W8 f
- counter_value,, I# E- y$ L+ Y9 s1 q. q7 Z
- recent_sender,7 h- _3 R) ]6 l, H
- owner_address,
" l1 e& P5 A' ?1 I R - contract_balance,, T1 j3 L" v# n E g6 E* j2 T
- sendIncrement,
. H" E' L& a: N - sendDeposit
1 l7 @, h. {0 U - sendWithdrawalRequest
U1 |; u/ n& m( y5 z2 c! B - } = useMainContract();1 J/ X8 I3 ? a1 x- U7 [1 ?( O& }3 m
- * @: R# p) u9 R, ]6 Y2 T
- + }# L h, Q6 \( \" b
- ' C7 V# K7 b2 k8 a2 s' t0 l
- const { connected } = useTonConnect();: @, g$ \3 P/ Z: J8 |# r
$ o! R$ R" `) ^& q3 W- const showAlert = () => {
6 }' F! N. @- G5 a8 O/ F# `) a2 S - WebApp.showAlert("Hey there!");
) b' f! \5 J/ m8 M4 W* t/ ~% S, m - };
复制代码 它不需要身份验证,因此我们只需将其显示在仅向授权用户显示的部分上方即可。因此,我们要在这里更改 showAlert。这就是整个返回部分的样子:
5 |2 f1 Z9 B4 P, j8 D- return (
+ z) @2 R4 a8 N4 S/ }0 u1 V - <div>& e7 Y6 i% I p0 {0 F& ~% Z
- <div> \2 ?& g8 d' l0 F+ S4 v
- <TonConnectButton /> q; L; C7 z5 n) y4 s
- </div>
2 z/ _6 E6 I9 @/ c - <div>
3 K0 T: w+ I6 y- Q6 K; r - <div className='Card'>6 p4 X T( r# p& |/ B! \
- <b>{WebApp.platform}</b>
# A( v3 V; J: O - <b>Our contract Address</b>( G, G d3 Z/ D$ @! E
- <div className='Hint'>{contract_address?.slice(0, 30) + "..."}</div>
d' S! s; L, R/ P# i - <b>Our contract Balance</b>
( H! r7 |( w8 G - {contract_balance && (
0 o- ? f" H2 _ Y* V7 ~ - <div className='Hint'>{fromNano(contract_balance)}</div>
! ~ W R }7 {8 L" C* B. o8 W - )}
* {5 }$ d9 Z" B. r( K$ ^2 V - </div>; }; g; b$ { r' I( W$ `2 {
- - x* |, j: o& A
- <div className='Card'>
% c! Y4 a' @6 @, d- C# P+ ?3 n - <b>Counter Value</b>
5 f1 K3 [' |) Z3 ^% I b3 k - <div>{counter_value ?? "Loading..."}</div>
. \# R; c$ |+ L9 q& s - </div>& }2 A* m7 m/ g0 z
6 U% O7 C# z% M3 l4 S. T- B- <a- n, d' o T* U T
- onClick={() => {
}. j4 Z3 f' ~& w; u2 B - showAlert();9 ]5 T& v0 k" O9 r
- }}
6 o. Y6 Z0 C; c0 ~/ k5 U - >$ h' f- [# N- [ A8 o9 u$ ]% ~% s8 q
- Show Alert& b* e- z0 t8 a H# L) [. j
- </a>
) X6 r; {) u) K. {1 P3 {
+ C: ]5 X2 o5 L+ |- Y- <br />
( i' |5 g+ @- G4 u/ A5 Z
. z, ]& x' e5 a+ _$ e8 e1 ], v- {connected && (
7 ~% y- S3 _* A0 d( x8 H! q' U) J - <a2 f6 ?7 I- l6 E( y
- onClick={() => {: u; l0 j; E/ N% I D1 s" n
- sendIncrement();
2 O2 D' g6 G7 P& Q3 p - }}6 q) j4 ^' o0 ^! C+ h; a- ?& U
- >( V+ H, j5 W- {. l
- Increment by 53 t: `: R w$ F+ w
- </a>
- }3 o* M: W. X& m U$ r9 f: ~ - )}
7 b+ u' K* V, l# T - 8 }' r( P) L; h* B g- W( B: {! V
- <br />
" j- L# R7 l' O, V - 4 [% F& K) _2 F. _; n m
- {connected && (
% |8 W& k- {0 Y0 [9 S! ~5 s. A8 @7 j - <a
9 [9 x" Y* [4 s+ _ - onClick={() => { U3 P) X6 X. W" {( }$ B
- sendDeposit();% \' M7 q0 z& u" J. P
- }}! w! o: O+ P" O. K% C
- >
" ~# l5 L$ T3 L4 F" x - Request deposit of 1 TON
9 p5 D1 w+ {. K - </a>8 {9 E9 S. k9 ~) b5 f- a; h
- )}. d. ?% q3 v# T" D$ ^6 [9 ^! J
8 O/ }2 {5 C3 x4 ~0 q; s; |4 A- <br />
7 `* ^( U6 c( x ]' M: a) k
5 G* I% K8 W9 j6 U- {connected && ($ l# u! E; P* P) d. t$ j' d+ s
- <a
& C# G7 }6 q: Y0 h _ - onClick={() => {$ p0 D a5 \8 s6 j9 Y7 F5 v
- sendWithdrawalRequest();
9 g0 P% C8 A" h m0 { - }}' W: G6 F9 I4 ?5 I- ]' \
- > | c& K& i: l/ f, i
- Request 0.7 TON withdrawal
% Q( m: Y! w% X8 ^6 L) n8 ` - </a>' |9 L5 A$ \. E: U& ?4 q/ c: H, U
- )}
6 ` \6 o) a+ I6 v* z4 H- @' ] - </div>
- }0 I; f& z2 x+ V& k0 E$ k. Q - </div>
$ o; v# O+ A E/ ~( U; m& M - );. I. V9 ~& w7 i$ l3 f& R
- }
复制代码就是这么简单。现在,我们提交文件并推送到 GitHub: % e6 R! W3 I# W+ Z- {8 I3 B9 e
- git status
" v K8 B i ^* F& X* c5 x) m3 L; j - git add .
7 a, _ ]5 p; y+ f, d# C, y4 \) D - git commit -m "TWA SDK integrated"
7 m& P( a) Z! j+ P - git push: l4 A$ g' M- V% A
- git push origin master
复制代码 利用 GitHub 操作正如你所记得的,我们已经配置了 GitHub 操作,因此我们的应用程序将一路构建并部署到 GitHub 页面。我们可以看到,它已经在进程中了: GitHub 操作功能强大。你可以通过在这里授权来节省大量时间。我们还将在这里运行另一个操作,即从独立分支发布 GitHub 页面。也等它完成吧。 但正如你所看到的,我们无法在这里检测平台,因为网络应用程序对象根本不可用,这是因为我们不在 Telegram 中。因此,这只是我们发布的一个草稿,你需要通过多重检查来了解用户是否在 Telegram 中。现在我们可以进入移动版 Telegram,看看它在社交软件中是如何工作的。 我的平台是 iOS。正如我说过的,这只是一个发布草稿,所以我们以后可以把它做得更好看。如果我点击显示提醒,就会显示弹出窗口: TWA SDK 赋予了您很大的权力。您需要做的就是阅读文档,其中教了您很多可以做的事情,如指定平台、配色方案、一些主题参数、使其扩展、设置视口高度等。 如果我关闭 Telegram 中的网络应用程序,我可以看到它仍然是一个聊天工具。因此,如果您想在整体上为您的应用程序创造最佳的用户体验,就应该使用混合方法:在网络应用程序中保留一些功能,在聊天命令中保留一些功能。您可以与用户保持对话,而网络应用程序只用于人们习惯在图形用户界面中进行的某些操作。 在下一课中,我们将使用相同的功能来实现递增5、计数器以及提款和存款请求。我们还将使用聊天注释来实现同样的功能。这取决于你想在产品中使用什么功能,以及在哪里构建功能。总之,我们将学习这一切是如何运作的。此外,我们还将学习如何将网络应用程序中的信息传递到 telegram 聊天机器人中,并创建一个操作对话部分的聊天机器人。 网络应用程序负责功能。它负责授权钱包、保持会话。而聊天机器人作为一个独立的应用程序,将负责与用户保持对话。必须建立连接,这样网络应用程序才能将信息传递给聊天机器人。因此,无论 web 部件发生什么,你的对话都会跟上。 下节课见。我想再次提醒大家,我为你们能顺利完成本课程的学习而感到骄傲。再见
: i8 G1 u8 \. y3 x# G! D5 G, `+ k5 T: S( T! a
" K* O6 e6 x3 i- |7 H- A
|