美文网首页
使用WalletConnectSwiftV2 调用 MetaMa

使用WalletConnectSwiftV2 调用 MetaMa

作者: lqbk | 来源:发表于2023-08-25 18:31 被阅读0次

这个一个困扰了我这边许久的一个问题,在社区也没有人去解答这个问题。 下面说一下这个问题出现的情形和我的结局方案。

问题描述

  • 首先不论在使用 WalletConnectSwiftV2 或者是 WalletConnectSwiftV1 ,我们需要在向中继层发完消息后都需要自动去跳转Wallet App,然后Wallet App在前台状态处理完Dapp的消息后就会主动跳回到Dapp
  • 跳转Wallet App 方式一般是通过 DeepLink 或者是 Universal Link
  • 跳回是Wallet App控制的
  • 建立连接 的跳转时需要携带 WCUrl 参数,例如是 使用DeepLinkMetaMask 建立连接时会用类似下面的链接,metamask://wc?uri=wc%3Aff2f0fc993764a90f3ac47028d344cdd5dedb8257c680%402%3Frelay-protocol%3Dirn%26symKey%3Dbdb0d378c9727a1a8d50099fc1bd3e7dcd
  • 在v1 我们向钱包发送Sign请求后,可以通过不携带参数的 DeepLink 或者是 Universal Link 跳转到MetaMask ,例如这样:metamask://, 然后在MetaMask 确定交易后会自动跳回Dapp。
  • 在v2 我们同样的跳转行为,MetaMask 只会跳回一次。然而其他 WalletApp 没有同样的问题。

解决方案

  • 我发现在iOS浏览器使用Web端的 WalletConnectModal 在v2下跳转到MetaMask是没有这个问题
  • 因为跳转方法在iOS都是使用 DeepLink 或者是 Universal Link是没区别的,所以我通过在App中使用 WebView 加载 Web端 WalletConnectSDK,然后在WebView 的加载URL 的 Delegate 中发现了其中的一些不同,Web端 WalletConnectSDK在调用完Sign请求向MetaMask发起跳转行为时,使用的链接是类似这样的:metamask://wc?requestId=undefined&sessionTopic=0f0a8661f4636ee5f060358dbf74e6db69a91f299fa4
  • 可以看到使用的是DeepLink 模式的跳转,但是携带了关键的 sessionTopic 参数,这个参数是啥,相信使用过WalletConnectSwiftV2都很清楚,就不多解释。后面我通过带上sessionTopic这个参数也解决了这个问题。
  • 其中还有requestId这个参数,但是看到是undefined的,所以说明这个参数暂时不重要,可传可不传。

总结

  • WalletConnectSwiftV2的SDK 落后Web版本太多了,实际上Web端WalletConnectModal 把上面说的细节都处理,但是WalletConnectSwiftV2现在还是未提供类似WalletConnectModal这样的实现,所以需要开发者自行处理很多细节,例如上面的跳转WalletApp,还有 chainId 、account 的切换等等
  • 如果发现有Web端SDK能实现,WalletConnectSwiftV2 未提供的实现,不妨研究下Wed端SDK的源码。因为在WalletConnect 这方面 Web端的用户会更多,所以Web端SDK也是对开发者最友好的,最方便的。

相关文章

网友评论

      本文标题:使用WalletConnectSwiftV2 调用 MetaMa

      本文链接:https://www.haomeiwen.com/subject/xdcbmdtx.html