WebView加载H5页面,H5页面使用URL Scheme唤起APP失败

1. 前言

最近遇到了一个问题,H5页面使用URL Scheme唤起第三方APP,在手机浏览器已经测试通过了,但是在APP里面,却失败了。

本篇文章不介绍如何使用URL Scheme唤起APP,如果想知道的朋友,可以查看下列文章:

回归正题,我们以“爱奇艺在线视频网站(https://m.iqiyi.com)”为例,使用WebView来加载,显示如下:

点击“打开看看”,正常情况是打开爱奇艺APP(如果手机没安装,会弹出下载APP安装包的提示窗口),但实际上却报错了,报错信息的大概意思是:未知的URL Scheme,如下图所示:

2. 解决方案

经过查找相关资料,并调试相关代码,定位到了问题所在。

mWebView.setWebViewClient(new WebViewClient());

原来是因为WebView设置WebViewClient,导致所有URL都默认使用WebView进行加载了,但是像“iqiyi://mobile/register_business/qyclient?pluginParams=%25”(这是唤起爱奇艺APP的URL的一部分)这种自定义URL,WebView是无法加载成功的。

如果已经了解过URL Scheme的朋友,应该是知道Android可以这样来唤起第三方APP。

// url是符合第三方APP所规定的Scheme的URL,可以用来唤起第三方APP
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));

所以,我们可以通过拦截URL的方式来解决这个问题,具体代码如下:

mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // WebView可以加载Http、Https和file这三种URL,所以除了这三种URL外,其他都要另外处理
        if (!url.startsWith("http") && !url.startsWith("file")) {
            try {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
            } catch (Exception e) {
                // 如果找不到合适的APP来加载URL,则会抛出异常
                e.printStackTrace();
            }
            return true;
        }
        return super.shouldOverrideUrlLoading(view, url);
    }
});

完整的demo可以查看 AndroidWebView

发布了43 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Fantasy_Lin_/article/details/103635504