Android 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

 

如果想进一步交流和学习的同学,可以加一下QQ群哦!

使用uniapp开发H5页面并通过webview嵌入时,如果你想唤起腾讯地图的原生应用来提供更丰富的地图服务和功能,你可以通过使用URL Scheme的方式来实现这一功能。URL Scheme是一种协议,它允许应用之间进行通信。对于腾讯地图,你可以在webview中通过一个特定格式的URL来触发打开腾讯地图应用的操作。 具体实现步骤如下: 1. 构造一个符合腾讯地图URL Scheme格式的链接,该链接包含了需要打开的地图详情或者地理位置信息。 2. 在uniappwebview中检测是否安装了腾讯地图应用,如果已安装,则通过程序打开应用;如果未安装,则可以引导用户去应用商店下载安装。 3. 使用JavaScript中的`window.location.href`或者页面上的链接来加载这个URL Scheme链接。 以下是一个简单的示例代码,展示了如何在页面上添加一个链接,并在点击时尝试唤起腾讯地图应用: ```html <template> <view> <button @click="openTencentMap">打开腾讯地图</button> </view> </template> <script> export default { methods: { openTencentMap() { // 检测腾讯地图应用是否已经安装 const mapScheme = 'tencentmap://'; // 这里是腾讯地图的Scheme const isInstalled = wx.canIUse('openBusinessView') || wx.canIUse('openBusinessView:appID'); if (isInstalled) { // 已安装,尝试打开腾讯地图应用 wx.openBusinessView({ businessId: '1217260805', // 腾讯地图的appID,这个ID可能需要根据实际情况获取最新值 url: mapScheme + 'map?arti=北京故宫博物院', // 构造打开地图的URL Scheme,这里添加了要查看的地点 success(res) { console.log('唤起腾讯地图成功', res); }, fail(err) { console.log('唤起腾讯地图失败', err); // 如果失败则提示用户打开应用或者下载 wx.showToast({ title: '请安装腾讯地图并打开', icon: 'none', duration: 2000, }); } }); } else { // 未安装,提示用户下载 wx.showToast({ title: '请安装腾讯地图', icon: 'none', duration: 2000, }); } } } } </script> ``` 需要注意的是,上述代码中`businessId`值是一个示例,实际使用时需要替换成正确的腾讯地图appID,并且需要确保用户的设备上已经安装了腾讯地图应用才能成功唤起
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值