我们看看如何安装 SDK,以便使用 TWA(Telegram Web App)的 API。我在上一章的项目中打开 App.tsx 文件,然后输入命令: + v( ]" o/ [ \! z5 o
- yarn add @twa-dev/sdk3 E8 o" T L+ I. m9 w3 P$ v: x
复制代码很好,我们安装好了。现在,我们要导入网络应用程序并开始与之交互。首先,我们要在界面中向用户显示平台--如果你想根据平台实现不同的功能,这一点非常有用。其次,我们将添加一个按钮来触发一些操作。 让我们从平台开始。我们将文本加粗,并添加 WebApp 平台。我们将在屏幕上显示它。 - return (6 N/ `/ b+ M3 j$ C* t8 M/ O
- <div>
' W8 f2 s# ?. t7 ?- ~" l - <div>
7 u! b7 Q t5 g: E6 m- c% v - <TonConnectButton />5 N- v$ |6 `1 r& A) r1 i
- </div>
" _1 `, h2 W" Q4 k8 z+ ~ - <div>0 F& P( x* S: i9 q: g' ~4 g
- <div className='Card'>
8 y B+ z1 G; r0 {3 ~6 f - <b>{WebApp. platform}</b>
5 t0 U) G9 V5 L7 j7 U4 V/ w - <b>Our contract Address</b>
8 I( D9 P0 p2 @6 @* t - <div className='Hint">{contract_address?.slice(0, 30) + "...")</div>: i8 [, `1 A8 k( V: ?* s8 f
- <b>Our contract Balance</b>
5 V% `2 p! V+ e, p. O% H# v - {contract balance && (
+ [* c9 S, i2 y' C& } - <div className= 'Hint'>{fromNano(contract_balance)}</div> X9 j/ g- z6 t2 `* V8 E! t' t
- )}) Q* B: s/ R6 Z( W' ~: J
- </div>
复制代码第二件事是操作。我们将创建一个函数 showAlert,触发后将显示警报:
! ?- F' q2 D8 `8 e, E- function App() {) m7 m1 P% a% T8 D
- const {/ G! R: x- Y7 R, i
- contract_address,
0 \6 @% l/ f) n! V1 Q% X. P - counter_value,
8 V2 T D' y/ o* ~7 B - recent_sender,
4 ^8 d6 f x8 w+ r, B, f - owner_address,
0 G: E$ [5 |2 P- f0 Q1 W( j - contract_balance,+ H; V# N K2 C7 b
- sendIncrement,/ c& j. y' Z/ x) u( Z
- sendDeposit- v2 F; g Z# E+ S- V3 c
- sendWithdrawalRequest8 Q$ f3 C; n2 M7 |* R
- } = useMainContract();, R1 a7 K) E2 {! n7 @! W. z( W, Y
- ; J* M2 B. [: Y9 ?/ C4 x' X
0 p3 h9 U+ I$ J- ( G d( q! ]0 ]
- const { connected } = useTonConnect();/ o: [. T6 k* k8 ]
- 1 Z4 P7 W) A" x( ?9 `
- const showAlert = () => {
4 M" W! G* X! N4 ^) r- h8 z" H7 X" G - WebApp.showAlert("Hey there!");
) j- C6 K U& K - };
复制代码 它不需要身份验证,因此我们只需将其显示在仅向授权用户显示的部分上方即可。因此,我们要在这里更改 showAlert。这就是整个返回部分的样子:+ n! B: Y0 y$ j, D7 E
- return (
) J9 |$ K1 g% Y& ?/ A$ Q - <div>
2 w$ A7 _2 u6 n/ a" J7 G - <div>
# I) X7 P9 F3 g5 u; j* [ - <TonConnectButton /> o5 `" f# h4 Y0 E% W; I- [/ @
- </div>* b" m. ~9 \$ j0 d9 y6 @
- <div>1 w, p. Z1 S @# [8 g0 b
- <div className='Card'>
" P8 A8 a0 _" R) L/ R/ K# b2 f, J% T - <b>{WebApp.platform}</b>7 q) f, m; r, q; M$ J3 ~# C' L* F, g4 O6 g; r
- <b>Our contract Address</b>: T3 O: A) V l& h, l' D1 q4 d2 k
- <div className='Hint'>{contract_address?.slice(0, 30) + "..."}</div>; d" |; S8 q- j+ `3 U
- <b>Our contract Balance</b>8 O+ ~" k# ]( E! a5 u) j/ U+ l& ~
- {contract_balance && (
3 l; U8 W+ W! `2 v- n, u2 X' Q. s8 K - <div className='Hint'>{fromNano(contract_balance)}</div>4 o/ g$ N% O( J
- )}9 o! k1 Q! Q) e# l. I, \, G0 X
- </div>
" w; I! m7 b1 I2 [ {0 U - 5 m. e; l( Y9 _9 d7 \% L A
- <div className='Card'>
) h) F( ^$ ]0 g# o1 f# O - <b>Counter Value</b>; `) j7 V6 c3 Y- C5 I
- <div>{counter_value ?? "Loading..."}</div>0 M! I: o. S& M5 z8 F$ X0 f
- </div>* O+ O; t- `# a" P# I
& v. N) K& ?$ U2 Y- <a( D! m, r3 d) I; i) J# ^
- onClick={() => {4 h3 F- o$ G6 a5 m$ L
- showAlert();3 u0 r/ N6 b1 W
- }}
6 z$ F" y$ u4 c4 n# r+ w - >
5 J6 a. K1 v, }# N3 D - Show Alert
! O1 K- A7 @7 M - </a>" a2 d. _9 o R+ ]1 i% A9 v
; s% K! k( x) D- <br /># c8 y1 D3 H2 ~9 E S5 |
- * I) v( ~/ S j' C1 L
- {connected && (% k R% e' A3 M Z/ f
- <a5 Q9 N! \3 t6 _/ {( I) }( i
- onClick={() => {3 K6 K/ {" q# K% A
- sendIncrement();8 V; p+ S5 ]0 n2 n' S4 E( ^
- }}* D) q8 e. }: M
- >; s" R; ^/ z8 } W5 t9 e
- Increment by 5
+ h5 a: a. t( J3 R& }8 A - </a>1 C! R( A: I b
- )}! v7 i: z- V# V
1 A( S4 f% B' N+ p9 R; d8 D: A- <br />7 k5 Z% ?6 C) X: C
" H. c" i3 }4 r# a! l( ?* {% N- {connected && (
+ L2 U: u" q0 r6 M5 ^) H7 q/ K - <a1 i4 ?% I' @- E( g" g
- onClick={() => {
% f* e) X) F& u4 ` - sendDeposit();
3 s3 S7 @, u9 X% ` - }}& e$ U2 e& d6 E @: H+ ~
- >, r) y }. V1 [9 F. U$ v
- Request deposit of 1 TON+ ]0 ]: G. \; V& k
- </a>
' p2 |4 {6 _6 Q - )}4 c+ A, m% S1 Q8 _
3 K8 f# A& Y2 E1 y4 E- <br />
3 X6 M ]# c' } - ) E e1 ~3 f- [; I v, N" d
- {connected && (
2 `7 K: B2 s" @5 B B/ S - <a
, s5 d; B: G- L, N - onClick={() => {
9 B) l; V- o* |/ ^ o' B' s5 f - sendWithdrawalRequest();
5 i% Q4 n" b, I0 y2 q - }}" ?& [, [! }; f
- >- ]4 i K. A9 t# x
- Request 0.7 TON withdrawal& S: Z) l* g" X8 m6 z7 X6 p( f
- </a>
: `% U8 u+ V7 j - )}% h4 Y1 _* `2 s( [% T. J
- </div>, \+ Q! T8 b+ ^0 J4 L, j+ ^) N
- </div>
% u3 d7 r; W/ V9 G; a: X - ); j. Z3 B7 I; w: I5 M4 a
- }
复制代码就是这么简单。现在,我们提交文件并推送到 GitHub:
2 P% ]# m `- N! Z% S- git status
0 S- e+ Y6 x. R/ }4 x3 I - git add .9 e+ V2 V# g, ]
- git commit -m "TWA SDK integrated"& e9 Q+ }5 u+ L& ]& w$ B. @
- git push
, y& u5 n! {+ b8 q' L$ U - git push origin master
复制代码 利用 GitHub 操作正如你所记得的,我们已经配置了 GitHub 操作,因此我们的应用程序将一路构建并部署到 GitHub 页面。我们可以看到,它已经在进程中了: GitHub 操作功能强大。你可以通过在这里授权来节省大量时间。我们还将在这里运行另一个操作,即从独立分支发布 GitHub 页面。也等它完成吧。 但正如你所看到的,我们无法在这里检测平台,因为网络应用程序对象根本不可用,这是因为我们不在 Telegram 中。因此,这只是我们发布的一个草稿,你需要通过多重检查来了解用户是否在 Telegram 中。现在我们可以进入移动版 Telegram,看看它在社交软件中是如何工作的。 我的平台是 iOS。正如我说过的,这只是一个发布草稿,所以我们以后可以把它做得更好看。如果我点击显示提醒,就会显示弹出窗口: TWA SDK 赋予了您很大的权力。您需要做的就是阅读文档,其中教了您很多可以做的事情,如指定平台、配色方案、一些主题参数、使其扩展、设置视口高度等。 如果我关闭 Telegram 中的网络应用程序,我可以看到它仍然是一个聊天工具。因此,如果您想在整体上为您的应用程序创造最佳的用户体验,就应该使用混合方法:在网络应用程序中保留一些功能,在聊天命令中保留一些功能。您可以与用户保持对话,而网络应用程序只用于人们习惯在图形用户界面中进行的某些操作。 在下一课中,我们将使用相同的功能来实现递增5、计数器以及提款和存款请求。我们还将使用聊天注释来实现同样的功能。这取决于你想在产品中使用什么功能,以及在哪里构建功能。总之,我们将学习这一切是如何运作的。此外,我们还将学习如何将网络应用程序中的信息传递到 telegram 聊天机器人中,并创建一个操作对话部分的聊天机器人。 网络应用程序负责功能。它负责授权钱包、保持会话。而聊天机器人作为一个独立的应用程序,将负责与用户保持对话。必须建立连接,这样网络应用程序才能将信息传递给聊天机器人。因此,无论 web 部件发生什么,你的对话都会跟上。 下节课见。我想再次提醒大家,我为你们能顺利完成本课程的学习而感到骄傲。再见
, l6 ~9 j% e4 X: k0 Q1 a# _1 F3 x
' o5 m" G6 v3 l% h) H$ ? |