在使用WalletConnectSwiftV2 连接钱包App进行授权签名时,发现在对接一些钱包上没问题的代码,在对接metamask钱包时候有modal 出授权弹窗,有显示正确的Dapp信息,但是点击授权发行没有反应。然而这套代码在对接其他钱包App 都是正常的。
这个问题困扰了我许久,直到我尝试了补充完Sign.instance.connect
方法的所有参数后,发现在Metamask App上终于能回调成功了, 下面是示例代码。
// 在metamask上生效的调用方式
try await Sign.instance.connect(
requiredNamespaces: namespaces,
optionalNamespaces: [:],
sessionProperties: sessionProperties,
topic: uri.topic
)
//在metamask 上不生效的调用方式
try await Sign.instance.connect(
requiredNamespaces: namespaces,
topic: uri.topic
)
实际上按照SDK的设计Sign.instance.connect
的optionalNamespaces
、sessionProperties
参数是非必需的,这不传值时在其他钱包也是正常得完成流程,怀疑是metamask接入WalletConnectSwiftV2时间太短,未处理好协议的数据结构处理方式。