Alan Hou的个人博客

H5唤起APP研究小结和踩过的一些坑

最近公司要开发H5端唤醒 APP的功能,这本应该是一个相当标准化的功能,也有一些第三方,但实际上发现还是有一些坑存在,总结了一下主要的方案有:

说了那么多,究竟推荐什么方案呢,有一个开源代码其实做了一个较好的示例:H5跳转APP开源项目web-launch-app。总的来说需要针对不同环境进行判断,在使用 Scheme 的场景中由于无法判断 APP 是否安装,一般会通过使用 Scheme 进行唤醒,设置一个超时时间进行跳转应用商店或下载中转页面的操作。

注:前述不论 Scheme 还是 App Links在浏览器中打开的方式都不是指在网址栏中直接输入,而是通过 a 标签点击进入或location.assign()自动唤醒。其中在 iOS 环境下Safari 中访问中转页面时如已安装应用,下拉会出现系统自带的打开应用按钮。比如下图是知乎中转页面https://oia.zhihu.com/下拉后的效果:

注:location.assign()的方式调取 Scheme 形式的链接需要使用 https 协议的链接进行访问,否则可能会受到来自浏览器的限制

H5跳转 iOS相关配置

iOS 的 scheme 配置在Info.plist > URL types > item x(如 item 0) > URL Schemes 下配置

借助于 Universal Links(或称通用链接),H5跳转到 iOS 应用确实简单化了不少,关于 Universal Links如何配置网上已经非常多了,

Nginx 参考配置:

一些注意的点:

相关链接:

Universal Links 验证链接

H5跳转安卓相关配置

安卓中不论是 Scheme还是 App Links 都在AndroidManifest.xml中进行配置,参照配置如下:

服务器端配置文件:

我们前面提到过,不论是App Links 还是 Scheme 在微信内都无法唤起安卓应用,那么如何突破这一限制呢?据说有入驻应用宝并达到某级别的应用可直接进行跳转,这显然不在我们的讨论范围内。微信自己提供了一套解决方案,称之为 Open Tag,也就是使用wx-open-launch-app标签,这一方案不仅适用于安卓,也适用于 iOS,但前面说了 Universal Links 已经解决了我们的烦恼,所以这里就以安卓为例。

使用这一方案需要满足一些条件:

完成以上申请后即可使用 Open Tag 了,但实际开发也不会那么顺畅,首先参照官方文档的步骤进行鉴权获取签名等信息再调用wx-open-launch-app标签,传入开放平台中应用的 AppID。

Vue 内可能存在template 标签的兼容性问题,此时应修改为:

此外如使用weixin-js-sdk的 npm 包进行微信开发,请注意升级至1.6.0或之后的版本,否则会发现 Open Tag 会卡在“即将离开微信,打开xxx”这一步无法使用。这一方案还需要安卓端进行配合,参见安卓接入微信开放平台官方文档,添加依赖、配置AndroidManifest.xml及添加好入口 Activity后即可使用。

此外目前测试下来这一方案存在一个问题,就是仅在启动本地安卓应用后才能进行跳转,还有待进一步测试,但如果是这样的话又有一点鸡肋了。

 

以上就是最近几天研究测下来的结果,完成这些配置后 H5端与安卓、iOS 端进行参数约定即可实现跳转指定页面的功能了。

相关链接汇总

退出移动版