最近接到了一个需求,要求推广落地页或分享页引导已下载用户打开APP,引导未下载用户下载APP。对于这个需求很熟悉也很常见,度娘一下发现有很多的解决方案,但是实际应用中,却发现总是很难做到100%的完美。而且国内的一些浏览器会拦截拦截scheme,完全不知道他们在想些什么- -!,所以只能引导用户去Safari 或者其他浏览器中打开(很是蛋疼)。下面来说一下唤起APP的好几种方法:
iframe
在只有 URL Scheme 的日子里,iframe 是使用最多的了。因为在未安装 app 的情况下,不会去跳转错误页面。但是 iframe 在各个系统以及各个应用中的兼容问题还是挺多的,不能全部使用 URL Scheme。在Android 5+ 的版本下可以使用,ios 9+ 的版本就不要用的,具体的各位同学可以去度娘一下。
<iframe src="URL Scheme://">
a 标签
在这里不得不说一下 Intent 语法:安卓的原生谷歌浏览器自从 chrome25 版本开始对于唤端功能做了一些变化,URL Scheme 无法再启动 Android 应用。 例如,通过 iframe 指向 weixin://,即使用户安装了微信也无法打开。所以,APP需要实现谷歌官方提供的 intent:
语法,或者实现让用户通过自定义手势来打开APP。
<a href="intent://">唤醒APP</a>
具体的 intent 请自行度娘。
window.location.href
URL Scheme 在 ios 9+ 上诸如 safari、UC、QQ浏览器中, iframe 均无法成功唤起 APP,只能通过 window.location 才能成功唤端。当然,如果我们的 app 支持 Universal Link,ios 9+ 就用不到 URL Scheme 了。而 Universal Link 在使用过程中,我发现在 qq 中,无论是 iframe 导航 还是 a 标签打开 又或者 window.location 都无法成功唤端,一开始我以为是 qq 和微信一样禁止了 Universal Link 唤端的功能,其实不然,百般试验下,通过 top.location 唤端成功了。
在这里我个人推荐使用 window.location.href 这种唤醒方法,不管是 <a>标签 还是 iframe 都存在这这些那些的兼容问题,但是对于 window.location.href 来说就轻松很多了。
demo 地址 码云