WalletConnect V2连接数分钟后停止接收请求问题求助
WalletConnect V2 React-Native 钱包5分钟后出现"Error: Not initialized. subscription"错误
问题详情
我用React-Native开发钱包应用,已配置好WalletConnect V2,能和dApp配对并响应请求,但约5分钟后会弹出以下错误:
Error: Not initialized. subscription
之后所有请求都无法发送到钱包。我已给web3wallet添加文档提及的所有监听器,推测可能是dApp尝试发送某些内容,但应用未配置对应接收逻辑,求指导。
当前实现代码
const core = new Core({ projectId: CONNECT_WALLET_PROJECT_ID }); const metadata = { name: 'Wallet', description: 'A Wallet Application', url: "#", icons: [] }; const web3wallet = await Web3Wallet.init({ core, metadata: metadata }); web3wallet.on("session_delete", (proposal) => { Alert.alert("session deleted"); console.log('wc delete: ', proposal); }); web3wallet.on("session_request", (event) => { console.log('session request: ', event); console.log('create wallet method worked'); // const { id, method, params } = event.request; setGlobalVariableValue({ key: 'walletConnectEventData', value: {'event': 'session_request', 'data': event} }); navigation.navigate('WalletConnectModal'); }); web3wallet.on("session_update", (proposal) => { console.log('session update! ', proposal) }); web3wallet.on("push_request", (proposal) => { console.log("push_request") console.log("push_request", proposal) }); web3wallet.on("push_message", (proposal) => { console.log("push_message") console.log("push_message: ", proposal) }); web3wallet.on("push_delete", (proposal) => { console.log("push_delete"); console.log("push_delete: ", proposal) }); web3wallet.on("session_ping", (proposal) => { console.log("session_ping"); console.log("session_ping: ", proposal) }); web3wallet.on("session_event", (proposal) => { console.log("session_event"); console.log("session_event: ", proposal) }); web3wallet.on("pairing_ping", (proposal) => { console.log("pairing ping"); console.log('pairing ping: ', proposal); }); web3wallet.on("pairing_delete", (proposal) => { console.log("pairing delete"); console.log("pairing delete: ", proposal) }); web3wallet.on("auth_request", (proposal) => { console.log("auth_request") console.log("auth request: ", proposal); });
解决思路与方案
固定实例生命周期:这个错误大概率是
core或web3wallet实例被意外销毁/回收导致的。React-Native中如果实例在组件内部创建,组件卸载或重渲染时会丢失。把实例提升到全局作用域(比如React Context、全局变量),确保应用生命周期内实例稳定,只初始化一次。监听配对过期:WalletConnect V2配对默认有超时机制,5分钟窗口符合过期时间范围,添加监听器处理重连:
web3wallet.on("pairing_expire", (pairing) => { console.log("配对已过期:", pairing); // 提示用户重新配对或自动发起重连 });正确响应ping请求:dApp会定期发ping保持会话活跃,仅监听不够,必须响应:
web3wallet.on("session_ping", async (event) => { console.log("session_ping:", event); await web3wallet.respondSessionPing({ topic: event.topic }); });处理后台事件:React-Native后台时事件监听可能暂停,用AppState API监听前后台状态,回到前台时刷新实例订阅;同时确保Core的WebSocket连接允许后台联网。
规范初始化流程:把
Web3Wallet.init放在App组件的useEffect中,仅执行一次,避免异步阻塞:useEffect(() => { const initWalletConnect = async () => { const core = new Core({ projectId: CONNECT_WALLET_PROJECT_ID }); const metadata = { name: 'Wallet', description: 'A Wallet Application', url: "#", icons: [] }; const web3wallet = await Web3Wallet.init({ core, metadata }); // 存入全局状态 setGlobalWeb3Wallet(web3wallet); // 添加所有监听器 }; initWalletConnect(); }, []);
内容的提问来源于stack exchange,提问作者Jake Mulhern
相关产品推荐
相关产品推荐

