客户端之H5拉起第三方app并跳转到指定页面

本文介绍了移动应用中URLscheme和universallink的使用,用于启动App的两种方式。URLscheme是Android和iOS9以下的链接方式,universallink是iOS9及更高版本的功能,允许通过HTTP链接启动App。在实践中,配置URLscheme时需要注意AndroidManifest.xml中的data属性,错误地写死host可能导致匹配失败,从而影响应用跳转。文章还给出了Android和iOS的跳转代码示例,并分析了一个跳转失败的bug,强调了正确配置scheme的重要性。

目录

1 解决方案

2 关于URL scheme

3 实践中出现过的bug


1 解决方案

一共有两种方式,安卓和ios9以下用第一种方式,ios9以上可以使用第二种方式

a)URL scheme是在app内配置的链接,比如:weixin://,superclass://
URL scheme的格式是[scheme]://[host]/[path]?[query]。

b)universal link是ios9之后出的功能。它是通过传统HTTP链接来启动App。它其实就是一个https开头的链接,还要满足一些特定的规则才能被识别为universal link,才能直接唤起app。

2 关于URL scheme

scheme的名称是在AndroidManifest.xml中data属性定义好的:

例如:

<data android:scheme="something" android:host="project.example.com" />

那么提供的uri应该是Uri uri = Uri.parse(“something://project.example.com”); 才可以匹配

引申:

data属性的作用 —— 只要Intent符合data属性,即可启动该Activity 

android:scheme

这个属性用于设定URI的scheme部分。它是给指定URI设置的最基本的属性,至少要给过滤器设置一个scheme属性,否则,其他的URI属性就没有意义了。

scheme属性值没有”:”符号结尾(如,http,而不是http: )

android:host

这个属性用户定义URI授权的主机部分,除非给过滤器也指定了<data>元素的scheme属性,否则这个属性没有意义。

具体跳转app的代码如下:

if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {

   var loadDateTime = new Date();

   window.location = "...";//scheme链接或者universal link

   window.setTimeout(function() { //如果没有安装app,便会执行setTimeout跳转下载页

        var timeOutDateTime = new Date();

        if (timeOutDateTime - loadDateTime < 5000) {

            window.location = "..."; //ios下载地址 

        } else {

            window.close();

        }

    }, 500);

} else if (navigator.userAgent.match(/android/i)) {

   var state = null;

   try {

        window.location = '...'; //schema链接或者universal link

        window.setTimeout(function() {

           window.location = "..."; //android下载地址 

        }, 500);

   } catch (e) {}

}

3 实践中出现过的bug

a和b分别跳转同一个app的不同页面,a可以跳转,b不可以跳转

根本原因:AndroidManifest.xml中data属性写死了,导致不匹配产生的问题,应该只需要写scheme,不需要写host

即预期是<data android:scheme="abc.abc">

实际写的却是<data android:scheme="abc.abc" android:host="XXXX" />

由于a和b用到的scheme是一致的,而host不一致,如果在manifest中写死了,就会导致uri不匹配,使得无法启动activity

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值