Bitget Wallet OmniConnect SDK
本节旨在指导您如何使用OmniConnect
使已集成WalletConnect
的DApps
在 Telegram Mini App 内与Bitget Wallet
和Bitget Wallet Lite
建立连接。按照下面提供的内容将帮助您快速实现此功能。
如果您还不熟悉如何开发
Telegram Mini App
或使用WalletConnect
连接钱包,建议首先仔细阅读以下文档:
预期结果示例
由于Telegram
上的平台限制,WalletConnect
目前无法在Telegram Mini App
内正常运行。如果您在Telegram Mini App
内开发DApp
,您可能会遇到类似问题:无论您是尝试连接钱包还是提示签名,WalletConnect
都无法成功启动Bitget Wallet
或Bitget Wallet Lite
,要么卡在启动界面,要么完全没有响应。
通过根据本文档配置您的项目,您可以快速解决这些问题,使您的DApp
能够在Telegram Mini App
内正确使用WalletConnect
,实现以下功能:
- 通过点击
连接
,弹出窗口将显示Bitget Wallet
入口,允许用户连接其Bitget Wallet
或Bitget Wallet Lite
。

- 点击
Bitget Wallet
或Bitget Wallet Lite
后,用户将成功重定向到Bitget Wallet
进行连接和签名。


开发流程
接下来,我们将使用WalletConnect
官方演示代码来演示如何通过几个简单配置实现上述结果。
1. 安装项目依赖
npm i @bitget-wallet/omni-connect @reown/appkit-adapter-wagmi @tanstack/react-query @wagmi/core @web3modal/wagmi networks react react-dom viem wagmi
2. DApp 初始化 WalletConnect 逻辑
此步骤的关键是将featuredWalletIds
传递到createWeb3Modal
方法中。通过此配置,Bitget Wallet
和Bitget Wallet Lite
将显示在WalletConnect
的钱包选择弹窗中。
featuredWalletIds: [
"38f5d18bd8522c244bdd70cb4a68e0e718865155811c043f052fb9f1c51de662", // Bitget Wallet项目ID
"21c3a371f72f0057186082edb2ddd43566f7e908508ac3e85373c6d1966ed614", // Bitget Wallet Lite项目ID
],
// 0. 设置queryClient
const queryClient = new QueryClient();
// 1. 从https://cloud.walletconnect.com获取projectId
const projectId = import.meta.env.VITE_PROJECT_ID;
if (!projectId) throw new Error("项目ID未定义");
// 2. 创建wagmiConfig
const metadata = {
name: "Web3Modal",
description: "Web3Modal示例",
url: "https://web3modal.com",
icons: ["https://avatars.githubusercontent.com/u/37784886"],
};
// 定义链
const chains = [mainnet, arbitrum] as const;
// 创建连接器
const connectors: CreateConnectorFn[] = [];
connectors.push(walletConnect({ projectId, metadata, showQrModal: false }));
connectors.push(injected({ shimDisconnect: true }));
connectors.push(
authConnector({
options: { projectId },
socials: ["google", "x", "github", "discord", "apple"], // 这将创建一个非托管钱包(有关更多信息,请参见https://secure.walletconnect.com/dashboard)
showWallets: true,
email: true,
walletFeatures: false,
})
);
const wagmiConfig = createConfig({
chains, // 在此使用定义的链
transports: {
[mainnet.id]: http(),
[arbitrum.id]: http(),
},
connectors: connectors,
});
// 3. 创建模态框
createWeb3Modal({
wagmiConfig,
projectId,
featuredWalletIds: ["38f5d18bd8522c244bdd70cb4a68e0e718865155811c043f052fb9f1c51de662", // Bitget Wallet项目ID
"21c3a371f72f0057186082edb2ddd43566f7e908508ac3e85373c6d1966ed614", // Bitget Wallet Lite项目ID
],
});
3. DApp 初始化逻辑和@bitget-wallet/omni-connect
在此步骤中,关键是在DApp
页面初始化期间执行overrideWindowOpen()
方法。这将解决WalletConnect
在Telegram Mini App
内无法正确启动Bitget Wallet
或Bitget Wallet Lite
的问题。
注意:overrideWindowOpen()
方法依赖于Telegram Mini App
提供的 API,因此只能在Telegram Mini App
内执行。确保此方法不会在其他环境中执行。
useEffect(() => {
const initOverrideWindowOpen = async () => {
// 检查是否为Telegram Mini App环境
const isTMA = await isTelegramEnvironment()
if (!isTMA) {
return
}
// 执行@bitget-wallet/omni-connect初始化
overrideWindowOpen()
}
initOverrideWindowOpen()
}, [])
此时,您已完成在Telegram Mini App
内使用WalletConnect
连接到Bitget Wallet
或Bitget Wallet Lite
的配置。总结一下,两个关键配置是:
Wallet Connect
初始化期间在featuredWalletIds
内配置 Bitget Wallet ID。
2. 在初始化过程中调用
@bitget-wallet/omni-connect
的overrideWindowOpen()
方法。
完整示例
import React, { useEffect, useState } from "react";
import ReactDOM from "react-dom/client";
import { createWeb3Modal } from "@web3modal/wagmi/react";
import { http, createConfig, WagmiProvider } from "wagmi";
import { mainnet, arbitrum } from "viem/chains";
import { walletConnect, injected } from "wagmi/connectors";
import type { CreateConnectorFn } from "@wagmi/core";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { authConnector } from "@web3modal/wagmi";
import { isTelegramEnvironment, overrideWindowOpen } from "@bitget-wallet/omni-connect";
import "./styles.css";
// 0. 设置queryClient
const queryClient = new QueryClient();
// 1. 在https://cloud.walletconnect.com获取projectId
const projectId = import.meta.env.VITE_PROJECT_ID;
if (!projectId) throw new Error("项目ID未定义");
// 2. 创建wagmiConfig
const metadata = {
name: "Web3Modal",
description: "Web3Modal示例",
url: "https://web3modal.com",
icons: ["https://avatars.githubusercontent.com/u/37784886"],
};
// 定义链
const chains = [mainnet, arbitrum] as const;
// 创建连接器
const connectors: CreateConnectorFn[] = [];
connectors.push(walletConnect({ projectId, metadata, showQrModal: false }));
connectors.push(injected({ shimDisconnect: true }));
connectors.push(
authConnector({
options: { projectId },
socials: ["google", "x", "github", "discord", "apple"], // 这将创建一个非托管钱包(请查看https://secure.walletconnect.com/dashboard获取更多信息)
showWallets: true,
email: true,
walletFeatures: false,
})
);
const wagmiConfig = createConfig({
chains, // 在此使用定义的链
transports: {
[mainnet.id]: http(),
[arbitrum.id]: http(),
},
connectors: connectors,
});
// 3. 创建模态框
createWeb3Modal({
wagmiConfig,
projectId,
featuredWalletIds: [
"38f5d18bd8522c244bdd70cb4a68e0e718865155811c043f052fb9f1c51de662", // Bitget Wallet项目ID
"21c3a371f72f0057186082edb2ddd43566f7e908508ac3e85373c6d1966ed614", // Bitget Wallet Lite项目ID
],
});
const App = () => {
useEffect(() => {
const initOverrideWindowOpen = async () => {
// 检查环境是否为Telegram Mini App
const isTMA = await isTelegramEnvironment();
if (!isTMA) {
return;
}
// 执行@bitget-wallet/omni-connect的初始化方法
overrideWindowOpen();
};
initOverrideWindowOpen();
}, []);
return (
<React.StrictMode>
<WagmiProvider config={wagmiConfig}>
<QueryClientProvider client={queryClient}>
<div className="centered-div">
<w3m-button />
</div>
</QueryClientProvider>
</WagmiProvider>
</React.StrictMode>
);
};
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<App />
);