You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebView中WalletConnect Deeplink失效:需替换为wc://协议

Android WebView中WalletConnect深度链接崩溃问题

问题描述

在Android应用内嵌的WebView中,调用外部钱包(如WalletConnect的wc:3cc...格式深度链接)时无法正常工作,应用会因ERR_UNKNOWN_URL_SCHEME错误崩溃。

复现步骤

通过Telegram迷你应用(Android App内的WebView实例加载网页应用)可复现ConnectKit的问题:

  • 按照快速入门指南创建演示网页应用;
  • 托管该网页应用的HTTPS实例(可使用Next.js搭配Vercel);
  • 在Telegram上创建迷你应用并填入网页应用的HTTPS地址;
  • 启动迷你应用并点击“连接钱包”;
  • 选择Metamask,此时应用崩溃。

预期行为

Android平台下应触发wc://3cc...格式链接而非wc:3cc...;网页端、iOS及桌面端的钱包连接不受影响,可正常运行。

环境信息

所有版本的Android WebView均存在此问题

解决方案

要解决这个问题,可通过WebView的链接拦截回调做协议适配:

  1. 拦截WebView的所有URL请求,判断是否为wc:开头的WalletConnect链接;
  2. 若符合规则,将链接中的wc:替换为wc://;
  3. 通过系统Intent唤起外部钱包应用处理修改后的链接;
  4. 返回标识告知WebView已自行处理该请求,避免触发未知协议错误。

示例代码(Kotlin):

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
        val url = request?.url?.toString() ?: return super.shouldOverrideUrlLoading(view, request)
        if (url.startsWith("wc:")) {
            val modifiedUrl = url.replaceFirst("wc:", "wc://")
            val intent = Intent(Intent.ACTION_VIEW, Uri.parse(modifiedUrl))
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            try {
                context.startActivity(intent)
            } catch (e: ActivityNotFoundException) {
                // 处理钱包未安装的场景,可提示用户下载对应钱包应用
            }
            return true
        }
        return super.shouldOverrideUrlLoading(view, request)
    }
}

也可在前端层面针对Android WebView做适配:通过环境检测判断当前运行在Android WebView中时,自动将WalletConnect链接的wc:替换为wc://。但这种方式依赖环境检测的准确性,原生WebView拦截处理的可靠性更高。

内容的提问来源于stack exchange,提问作者skhetcho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:30:58