我们看看如何安装 SDK,以便使用 TWA(Telegram Web App)的 API。我在上一章的项目中打开 App.tsx 文件,然后输入命令:
7 [6 \; p" |& B% Q- [6 a- yarn add @twa-dev/sdk
! h: r' Y- T+ r8 I
复制代码很好,我们安装好了。现在,我们要导入网络应用程序并开始与之交互。首先,我们要在界面中向用户显示平台--如果你想根据平台实现不同的功能,这一点非常有用。其次,我们将添加一个按钮来触发一些操作。 让我们从平台开始。我们将文本加粗,并添加 WebApp 平台。我们将在屏幕上显示它。 - return (4 E' p$ e6 c. u5 [
- <div># ^; ?* e% `+ {1 c9 v
- <div>
& H, T9 q" g# i* [ - <TonConnectButton />
* Z3 v3 x h, B! b - </div>; z5 }+ T. R7 a# f
- <div>* y4 d) x& C/ c8 q1 n
- <div className='Card'>/ L3 e0 f) z9 }7 R4 ?! y3 X
- <b>{WebApp. platform}</b>
$ W, {: J2 p4 B% ^- L* X( S - <b>Our contract Address</b>2 y5 @" m2 O% }
- <div className='Hint">{contract_address?.slice(0, 30) + "...")</div>! G( U+ Z) m# V/ I0 v1 _1 \
- <b>Our contract Balance</b>
}- I' P( D0 D7 S; ] - {contract balance && (, I: w e2 L: t6 Q
- <div className= 'Hint'>{fromNano(contract_balance)}</div>7 \4 Y! _3 ~# D2 c
- )}" S! v! n. o- t- H; n. z
- </div>
复制代码第二件事是操作。我们将创建一个函数 showAlert,触发后将显示警报:
1 r. f5 K3 }* W1 s- function App() {
8 \* ~7 ]/ W N$ b) h- ~" \3 k) G - const {9 \, t; X& y0 J( \* j$ a% Q+ o/ A6 I( {
- contract_address,
3 P- x8 v6 j! Q, Y - counter_value,
9 K" h+ J; F0 { - recent_sender,
+ S. M) w/ A8 g8 ` - owner_address,. ]7 @' @ U% [
- contract_balance,+ V( d2 N+ B' ^4 @
- sendIncrement,- W+ S1 X: }3 K3 D3 |1 q" j
- sendDeposit2 _* i# L' b% U1 U P
- sendWithdrawalRequest
. [# X k: E3 C* l) J4 ~2 j - } = useMainContract();2 k3 ^$ H8 \+ G5 g: w) \- K& }6 g
" N( [' x* U: X+ g9 `# D9 d1 W8 U
; V% `$ `& g* o& N, Z ?
$ Z4 Z Z, ]5 [" A8 a0 Y; c, O- const { connected } = useTonConnect();
# \) @7 _) `" V6 F5 Y* Z - ' u! s7 m3 |; _! B" X) M
- const showAlert = () => {% n# L: q$ H# s6 Q
- WebApp.showAlert("Hey there!");6 y) |# ~* s, L' I
- };
复制代码 它不需要身份验证,因此我们只需将其显示在仅向授权用户显示的部分上方即可。因此,我们要在这里更改 showAlert。这就是整个返回部分的样子:
' h+ N! @. a7 Y- return (( Y4 X* s7 d* M. Z: X; a' a9 t% }( m
- <div>3 c2 t) k# s+ Z+ J
- <div>
2 o, t9 f+ ~% v& {, _- X - <TonConnectButton />
4 Q9 `2 {/ e. i6 `( q - </div>
1 Q5 [7 B# m5 Y- ^) V7 T( b* E - <div>3 M& v' l! {( x! C* {& p
- <div className='Card'>
" Z& U$ H0 Q6 }4 {6 q! z6 S9 y5 Q - <b>{WebApp.platform}</b>9 m8 L) ?) a* D
- <b>Our contract Address</b>
% J G5 J' ~5 g' q! r - <div className='Hint'>{contract_address?.slice(0, 30) + "..."}</div>
6 H" N/ W4 [& {9 H8 j - <b>Our contract Balance</b>" d0 y/ P7 ~# p- ?
- {contract_balance && (, D: w: }, h2 z1 |+ w2 O0 o+ T; e- D
- <div className='Hint'>{fromNano(contract_balance)}</div>
5 V P; F$ ]0 v9 Y3 ` - )}
! N/ P$ C) i# C: z1 @ - </div>
0 Y$ R+ p; M. u1 \
' O8 `( I; Y2 _8 G3 V- <div className='Card'>
5 Q4 d3 }% b$ `- V# c6 g& J - <b>Counter Value</b>- Y6 C8 @# A, V# _5 Q+ L) L
- <div>{counter_value ?? "Loading..."}</div>! q3 W% `: o6 {# Z Y, w \, N
- </div>
* @1 [; a* e9 z' J! s; |2 z - : e4 @: \' R U% f5 P9 c9 x
- <a1 e* _& h3 I* ]4 w ~
- onClick={() => {
7 H! d6 T2 m* L1 d5 u2 Q$ Z$ Q& k - showAlert();( y$ M7 r" \& r* F; B! S# S3 ~2 w
- }}
* o3 T6 r- ? F" M3 p0 H - >
7 c6 h0 b6 E# B( g9 X4 [% J9 s3 V - Show Alert
$ N5 G0 {# H5 `/ v$ |1 P- l/ ? - </a>
" h3 }( m' f6 u: ], f$ R- Y - * _1 E$ Y& a. R4 c( z' {9 a6 v9 W
- <br />
7 G B9 i' i6 o( e: [; A& ~
$ k$ R( f" d& Y" a: z( d- {connected && (
0 k5 [/ Z) }( c/ k' l6 |7 D; w - <a4 p4 @8 t$ U) V" f6 r5 e
- onClick={() => {5 f8 g% ]: y# C2 Q
- sendIncrement();
9 c! J7 ~& i: e" a) S$ U9 d3 _ - }}
' o; b% ~ ]7 q! U - >
8 f# Y* g; ]' m+ e" Z - Increment by 5! Z! B1 K) y9 T# F% } |' A9 J
- </a> M+ j+ r+ t) k
- )}
) n! u; C0 d' P" u! @/ a - 8 }& g" Q9 W" O; R8 b9 _( |" x
- <br />
. J) h# X [ _ ~: p - - A6 G. X! ~) b5 c8 d5 x# s% G
- {connected && (2 ~9 o; k4 t4 R# i8 [' w) I
- <a( m7 C* L' I r
- onClick={() => {
; I# P/ u. C) m! N { { - sendDeposit();7 o2 r( r( T7 V3 E- S
- }}1 }- q, \% r0 U) s5 r2 ^
- >
3 Z+ o' K; N0 f" Y0 I! _) t - Request deposit of 1 TON3 D! `/ N4 G i( o5 P! G
- </a>
5 ]; H- \0 t" o, d - )}; Z& u9 o0 y& H5 Z. Q
: D2 @" |4 U. Z- ~( i: D- <br />9 u9 o. i/ b: p4 L$ i/ H
- ( u! G3 V6 v7 I
- {connected && (
+ [+ J1 e3 ]* u% G+ a4 D, C( U - <a2 W! a* `8 T& L7 y: K- i
- onClick={() => {" @+ _& J1 W4 k3 `$ ^
- sendWithdrawalRequest();
1 T( @3 Q4 q9 ^- F3 o* ]3 ? - }}
4 s7 q8 |" p' `. j! m' y4 c2 F - >
1 ]5 c6 f W% F$ e9 k! s1 u - Request 0.7 TON withdrawal, K" h" Z' r' E% D7 K' z; @+ O! |
- </a>
2 p% N1 h% a4 R8 s - )}
; a( |; V& L- I7 h/ Q - </div>. J( q1 M6 l9 G6 g; H
- </div>
" \5 u4 e G: |7 j( d9 r- M - );8 W+ x/ X* C$ y0 e7 a* C' z! F
- }
复制代码就是这么简单。现在,我们提交文件并推送到 GitHub:
6 b7 K2 w! @+ o q c( h* _; u- git status
; Q* v+ ~% w( ?0 ?2 q - git add .
1 V# D# i1 N, F% q( z, C - git commit -m "TWA SDK integrated"; t# [( f2 b4 J2 B! r1 k S5 @
- git push9 U) B% b# |, j) c5 C
- git push origin master
复制代码 利用 GitHub 操作正如你所记得的,我们已经配置了 GitHub 操作,因此我们的应用程序将一路构建并部署到 GitHub 页面。我们可以看到,它已经在进程中了: GitHub 操作功能强大。你可以通过在这里授权来节省大量时间。我们还将在这里运行另一个操作,即从独立分支发布 GitHub 页面。也等它完成吧。 但正如你所看到的,我们无法在这里检测平台,因为网络应用程序对象根本不可用,这是因为我们不在 Telegram 中。因此,这只是我们发布的一个草稿,你需要通过多重检查来了解用户是否在 Telegram 中。现在我们可以进入移动版 Telegram,看看它在社交软件中是如何工作的。 我的平台是 iOS。正如我说过的,这只是一个发布草稿,所以我们以后可以把它做得更好看。如果我点击显示提醒,就会显示弹出窗口: TWA SDK 赋予了您很大的权力。您需要做的就是阅读文档,其中教了您很多可以做的事情,如指定平台、配色方案、一些主题参数、使其扩展、设置视口高度等。 如果我关闭 Telegram 中的网络应用程序,我可以看到它仍然是一个聊天工具。因此,如果您想在整体上为您的应用程序创造最佳的用户体验,就应该使用混合方法:在网络应用程序中保留一些功能,在聊天命令中保留一些功能。您可以与用户保持对话,而网络应用程序只用于人们习惯在图形用户界面中进行的某些操作。 在下一课中,我们将使用相同的功能来实现递增5、计数器以及提款和存款请求。我们还将使用聊天注释来实现同样的功能。这取决于你想在产品中使用什么功能,以及在哪里构建功能。总之,我们将学习这一切是如何运作的。此外,我们还将学习如何将网络应用程序中的信息传递到 telegram 聊天机器人中,并创建一个操作对话部分的聊天机器人。 网络应用程序负责功能。它负责授权钱包、保持会话。而聊天机器人作为一个独立的应用程序,将负责与用户保持对话。必须建立连接,这样网络应用程序才能将信息传递给聊天机器人。因此,无论 web 部件发生什么,你的对话都会跟上。 下节课见。我想再次提醒大家,我为你们能顺利完成本课程的学习而感到骄傲。再见
0 D) o) Q3 L' U4 D* D' Q* T+ a0 {% l) j0 q w% t0 t
! \( U' _3 G$ C P% a/ V! T8 w |