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

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

目录

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属性定义好的:

例如:

那么提供的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授权的主机部分,除非给过滤器也指定了元素的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

即预期是

实际写的却是

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/992499.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存