這個一個困擾了我這邊許久的一個問題,在社區(qū)也沒有人去解答這個問題哆料。 下面說一下這個問題出現(xiàn)的情形和我的結局方案。
問題描述
- 首先不論在使用 WalletConnectSwiftV2 或者是 WalletConnectSwiftV1 ,我們需要在向中繼層發(fā)完消息后都需要自動去跳轉
Wallet App
芬探,然后Wallet App
在前臺狀態(tài)處理完Dapp
的消息后就會主動跳回到Dapp
- 跳轉
Wallet App
方式一般是通過 DeepLink 或者是 Universal Link - 跳回是
Wallet App
控制的 - 建立連接 的跳轉時需要攜帶 WCUrl 參數(shù)捏肢,例如是 使用DeepLink 與 MetaMask 建立連接時會用類似下面的鏈接奈籽,metamask://wc?uri=wc%3Aff2f0fc993764a90f3ac47028d344cdd5dedb8257c680%402%3Frelay-protocol%3Dirn%26symKey%3Dbdb0d378c9727a1a8d50099fc1bd3e7dcd
- 在v1 我們向錢包發(fā)送Sign請求后,可以通過不攜帶參數(shù)的 DeepLink 或者是 Universal Link 跳轉到MetaMask 鸵赫,例如這樣:metamask://衣屏, 然后在MetaMask 確定交易后會自動跳回Dapp。
- 在v2 我們同樣的跳轉行為辩棒,MetaMask 只會跳回一次狼忱。然而其他 WalletApp 沒有同樣的問題膨疏。
解決方案
- 我發(fā)現(xiàn)在iOS瀏覽器使用Web端的 WalletConnectModal 在v2下跳轉到MetaMask是沒有這個問題
- 因為跳轉方法在iOS都是使用 DeepLink 或者是 Universal Link是沒區(qū)別的,所以我通過在App中使用 WebView 加載 Web端 WalletConnectSDK钻弄,然后在WebView 的加載URL 的 Delegate 中發(fā)現(xiàn)了其中的一些不同佃却,Web端 WalletConnectSDK在調(diào)用完Sign請求向MetaMask發(fā)起跳轉行為時,使用的鏈接是類似這樣的:metamask://wc?requestId=undefined&sessionTopic=0f0a8661f4636ee5f060358dbf74e6db69a91f299fa4
- 可以看到使用的是DeepLink 模式的跳轉窘俺,但是攜帶了關鍵的 sessionTopic 參數(shù)饲帅,這個參數(shù)是啥,相信使用過WalletConnectSwiftV2都很清楚瘤泪,就不多解釋洒闸。后面我通過帶上sessionTopic這個參數(shù)也解決了這個問題。
- 其中還有requestId這個參數(shù)均芽,但是看到是undefined的丘逸,所以說明這個參數(shù)暫時不重要,可傳可不傳掀宋。
總結
- WalletConnectSwiftV2的SDK 落后Web版本太多了深纲,實際上Web端WalletConnectModal 把上面說的細節(jié)都處理,但是WalletConnectSwiftV2現(xiàn)在還是未提供類似WalletConnectModal這樣的實現(xiàn)劲妙,所以需要開發(fā)者自行處理很多細節(jié)湃鹊,例如上面的跳轉
WalletApp
,還有 chainId 镣奋、account 的切換等等 - 如果發(fā)現(xiàn)有Web端SDK能實現(xiàn)币呵,WalletConnectSwiftV2 未提供的實現(xiàn),不妨研究下Wed端SDK的源碼侨颈。因為在WalletConnect 這方面 Web端的用戶會更多余赢,所以Web端SDK也是對開發(fā)者最友好的,最方便的哈垢。