解决Android app webview 无法通过静态网站 H5 跳小程序的问题
发布于 1 年前 作者 yang94 2540 次浏览 来自 分享

使用了官方的云开发中的静态网站,实现了点击链接跳转到微信小程序的功能,在微信浏览器以及常见的浏览器(小米自带浏览器、chrome、百度)都可以跳转到小程序,但是用Android webview时却报错了,报 位于 weixin://dl/business/?t=xxxxxxxx 的网页无法加载,因为:net::ERR_UNKNOWN_URL_SCHEME,这是因为Android webview无法识别自定义的weixin协议(url以weixin:// 开头的),只能识别http和https协议,所以需要自己扩展webview,处理这些自定义的协议。

需要给WebView设置WebViewClient,并重写WebViewClient中的shouldOverrideUrlLoading方法。kotlin代码如下:

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(wv: WebView, url: String?): Boolean {
        if (url == null) return false
        try {
            if (url.startsWith("weixin://") //微信
                || url.startsWith("alipays://") //支付宝
                || url.startsWith("mailto://") //邮件
                || url.startsWith("tel://") //电话
                || url.startsWith("dianping://") //大众点评
            //其他自定义的scheme
            ) {
                val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
                startActivity(intent)
                return true
            }
        } catch (e: Exception) { //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)
            return true //没有安装该app时,返回true,表示拦截自定义链接,但不跳转,避免弹出上面的错误页面
        }

        //处理http和https开头的url
        wv.loadUrl(url)
        return true
    }
}
回到顶部