Flutter开发移动DApp对接钱包获取地址遇阻,求可行实现方案
优先选择Flutter原生实现方案,规避webview的各类兼容问题
Webview中转JS库的方案本身就不是移动端钱包连接的最优解,目前已有成熟的Dart原生生态可以直接实现需求:
- 使用官方维护的
walletconnect_flutter_v2包完成WalletConnect v2协议对接,无需依赖任何JS库。生成wc:链接后直接通过url_launcher调起本地已安装的钱包应用,安卓端在AndroidManifest.xml的<queries>节点添加wc scheme声明、iOS端在Info.plist的LSApplicationQueriesSchemes数组添加wc项即可解决链接无法识别的问题,钱包授权后的地址信息可以直接在原生层解析拿到。 - 若需要支持应用内内置钱包能力,搭配
web3dart包可以直接在应用内完成地址生成、交易签名等全流程操作,完全不需要对接外部钱包。
若必须保留webview对接JS库的方案,按以下方法修复现有问题
你遇到的三个问题都有对应的轻量化解决方法,不需要搭建完整的本地HTTPS服务器:
- 针对Metamask不注入provider的问题:移动端webview默认未安装Metamask插件,本来就不会自动注入provider。使用
flutter_inappwebview包,在页面加载前提前注入符合EIP-1193标准的provider模拟脚本即可,不需要自行搭建本地脚本服务。 - 针对Web3Modal要求HTTPS环境的问题:要么在Web3Modal初始化配置中开启本地HTTP调试权限,要么直接通过
flutter_inappwebview的资源拦截能力加载应用asset目录下的静态页面,同时给webview配置允许本地资源访问的安全策略即可。如果确实需要HTTPS环境,用shelf_plus加自签名证书10行以内代码就能快速搭建轻量本地HTTPS服务。 wc:链接无法识别的问题:不要在webview内打开wc:链接,拦截到这类链接后直接交给url_launcher唤起外部钱包应用即可。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

