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

被折叠的 条评论
为什么被折叠?



