Я исследовал интернет и нашел следующее решение: <br/> <br/> <pre><code class="typescript">import { initMiniApp, mockTelegramEnv, parseInitData } from '@telegram-apps/sdk';
const initializeTelegramSDK = async () => {
try {
// Попытка инициализации реальной среды Telegram
console.log("Инициализация среды Telegram");
const [miniApp] = initMiniApp();
await miniApp.ready();
} catch (error) {
// В случае ошибки инициализируем имитационную среду
console.error('Ошибка инициализации Telegram:', error);
const initDataRaw = new URLSearchParams([
['user', JSON.stringify({
id: 99281932,
first_name: 'Andrew',
last_name: 'Rogue',
username: 'rogue',
language_code: 'en',
is_premium: true,
allows_write_to_pm: true,
})],
['hash', '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31'],
['auth_date', '1716922846'],
['start_param', 'debug'],
['chat_type', 'sender'],
['chat_instance', '8428209589180549439'],
]).toString();
mockTelegramEnv({
themeParams: {
accentTextColor: '#6ab2f2',
bgColor: '#17212b',
buttonColor: '#5288c1',
buttonTextColor: '#ffffff',
destructiveTextColor: '#ec3942',
headerBgColor: '#fcb69f',
hintColor: '#708499',
linkColor: '#6ab3f3',
secondaryBgColor: '#232e3c',
sectionBgColor: '#17212b',
sectionHeaderTextColor: '#6ab3f3',
subtitleTextColor: '#708499',
textColor: '#f5f5f5',
},
initData: parseInitData(initDataRaw),
initDataRaw,
version: '7.2',
platform: 'tdesktop',
});
cons
Использование `initData` (или `startParams`) в Telegram мини-приложении позволяет получить данные, с которыми было запущено ваше приложение. В вашем примере вы используете библиотеку `@telegram-apps/sdk`, что является правильным подходом.
Давайте разберем шаги, как можно получить `initData` в React-приложении:
1. **Установка необходимых пакетов**: Если вы еще не установили библиотеку `@telegram-apps/sdk`, выполните команду:
```bash
npm install @telegram-apps/sdk
```
2. **Инициализация SDK**: В вашем коде вы правильно инициализируете SDK, как в основном коде, так и в эмуляции.
3. **Получение initData**: Вы можете получить `initData` из инициализации SDK. Ваша функция `initializeTelegramSDK` уже содержит необходимый код. Вам нужно её просто вызвать в компоненте.
4. **Создание компонента**: Вот пример компонента, который использует ваш код для инициализации:
```javascript
import React, { useEffect } from 'react';
import { initMiniApp, mockTelegramEnv, parseInitData } from '@telegram-apps/sdk';
const TelegramApp = () => {
useEffect(() => {
const initializeTelegramSDK = async () => {
try {
console.log("Инициализация среды Telegram");
const [miniApp] = initMiniApp();
await miniApp.ready();
// Получение initData здесь
const initData = miniApp.initData;
console.log('initData:', initData);
} catch (error) {
console.error('Ошибка инициализации Telegram:', error);
const initDataRaw = new URLSearchParams([
['user', JSON.stringify({
id: 99281932,
first_name: 'Andrew',
last_name: 'Rogue',
username: 'rogue',
language_code: 'en',
is_premium: true,
allows_write_to_pm: true,
})],
['hash', '89d6079ad6762351f38c6dbbc41bb53048019256a9443988af7a48bcad16ba31'],
['auth_date', '1716922846'],
['start_param', 'debug'],
['chat_type', 'sender'],
['chat_instance', '8428209589180549439'],
]).toString();
mockTelegramEnv({
themeParams: {
accentTextColor: '#6ab2f2',
bgColor: '#17212b',
buttonColor: '#5288c1',
buttonTextColor: '#ffffff',
destructiveTextColor: '#ec3942',
headerBgColor: '#fcb69f',
hintColor: '#708499',
linkColor: '#6ab3f3',
secondaryBgColor: '#232e3c',
sectionBgColor: '#17212b',
sectionHeaderTextColor: '#6ab3f3',
subtitleTextColor: '#708499',
textColor: '#f5f5f5',
},
initData: parseInitData(initDataRaw),
initDataRaw,
version: '7.2',
platform: 'tdesktop',
});
const initData = parseInitData(initDataRaw); // Получение initData из raw строк
console.log('Mock initData:', initData);
}
};
initializeTelegramSDK();
}, []);
return (
<div>
<h1>ТЕЛЕГРАМ МИНИ-ПРИЛОЖЕНИЕ</h1>
<p>Проверка консолей для получения initData.</p>
</div>
);
}
export default TelegramApp;
```
5. **Проверка данных**: Убедитесь, что вы открыли инструменты разработчика в вашей среде и проверили, что данные `initData` вывелись в консоль.
Этот код показывает, как выполнять инициализацию SDK и получать данные о пользователе, которые передаются через `initData`. Надеюсь, это поможет вам правильно интегрировать Telegram мини-приложение с React.
▎Шаги для получения initData
1. Подключите Telegram Web App SDK:
Убедитесь, что вы подключили скрипт SDK в вашем HTML-файле:
<script src="https://telegram.org/js/telegram-web-app.js"></script>
2. Инициализация в вашем React приложении:
В вашем компоненте React вы можете инициализировать Telegram SDK и получить данные следующим образом:
import React, { useEffect, useState } from 'react'; const MyTelegramApp = () => { const [userData, setUserData] = useState(null); useEffect(() => { // Проверяем, доступен ли объект Telegram Web App if (window.Telegram && window.Telegram.WebApp) { // Инициализируем Telegram Web App window.Telegram.WebApp.ready(); // Получаем initData const initData = window.Telegram.WebApp.initData; // Парсим данные пользователя const user = parseInitData(initData); setUserData(user); } else { console.error('Telegram Web App is not available'); } }, []); const parseInitData = (initData) => { const params = new URLSearchParams(initData); return { user: JSON.parse(params.get('user')), hash: params.get('hash'), auth_date: params.get('auth_date'), start_param: params.get('start_param'), chat_type: params.get('chat_type'), chat_instance: params.get('chat_instance'), }; }; return ( <div> <h1>My Telegram Mini App</h1> {userData ? ( <div> <h2>User Info:</h2> <pre>{JSON.stringify(userData, null, 2)}</pre> </div> ) : ( <p>Loading user data...</p> )} </div> ); }; export default MyTelegramApp;
3. Обработка ошибок:
Убедитесь, что ваше приложение действительно запускается внутри Telegram. Если вы тестируете его в обычном браузере, объект window.Telegram не будет доступен, и вам нужно будет проверить это условие.
▎Замечания
• Проверка окружения: Убедитесь, что вы тестируете приложение в самом Telegram, так как window.Telegram не будет доступен в обычном веб-браузере