WalletConnect Deeplink在fly.io生产环境连接失败,本地正常
你遇到的问题是:本地开发时WalletConnect能正常连接MetaMask、Trust Wallet,但部署到fly.io后,生成的deeplink能打开钱包却无法建立连接,仅Trust Wallet提示“Failed to Connect”。以下是几个排查和解决方向:
检查CORS配置
fly.io部署的服务可能未正确配置跨域规则,导致WalletConnect与桥接服务器的请求被拦截。需要在NodeJS服务中配置CORS,允许来自https://bridge.walletconnect.org的请求,同时放行必要的请求头部。以Express框架为例:const cors = require('cors'); app.use(cors({ origin: ['https://bridge.walletconnect.org', 'https://你的fly.io应用域名'], credentials: true, allowedHeaders: ['Content-Type', 'Authorization'] }));验证fly.io服务器的网络连通性
可能fly.io服务器无法访问WalletConnect的桥接服务器。登录到fly.io应用虚拟机执行测试命令:fly ssh console -a 你的应用名称 curl -v https://bridge.walletconnect.org如果返回连接失败或超时,需调整fly.io的网络配置,确保出站流量能访问该桥接地址。
确认回调域名和元数据配置
本地开发用的是localhost,部署后必须将WalletConnect元数据里的url替换为fly.io的正式域名,否则钱包无法识别合法回调地址。修改connector初始化代码:import WalletConnect from "@walletconnect/client"; const connector = new WalletConnect({ bridge: "https://bridge.walletconnect.org", metadata: { name: "你的应用名称", description: "应用描述", url: "https://你的fly.io应用域名", icons: ["https://你的应用图标地址"] } }); if (!connector.connected) { connector.createSession(); }检查WebSocket连接权限
WalletConnect依赖WebSocket与桥接服务器通信,fly.io的防火墙或安全组可能阻止了wss协议的出站连接。在fly.io控制台检查应用网络策略,确保允许出站到wss://bridge.walletconnect.org的流量。锁定依赖版本
确认本地和部署环境的@walletconnect/client版本一致,避免版本差异导致兼容性问题。确保部署时使用package-lock.json或yarn.lock锁定依赖版本。
内容的提问来源于stack exchange,提问作者elcharitas

