唤起方式
web 唤起 app 的方式有下面三种:
- url 唤起:
- ios:universal link
- android:indent
- schema 唤起、也叫 deep link 唤起
- 第三方唤起
url 唤起
web 可以通过某个 url 唤起目标 app,这需要 ios、android、web 三端都进行相关配置。
配置完成后的效果:web 可以通过一个 url 直接跳转到 app,app 那边也可以收到完整的跳转并进行后续操作。这个地址是一个 uri,http 协议。
类似:
<a href="https://www.your_app_url.com/param=..." >你的 app url 链接,点了就能跳</a>
坑点:
- 很多浏览器根本不屌,直接当做网页访问
相关链接:
schema 唤起、也叫 deeplink 唤起
ios 和 android 注册相关的配置,为应用生成 schema 链接。这个地址格式是 uri,但不是 http 协议。
类似:
<a href="yourappschema://path/?param=123" >你的 app schema uri 链接,点了就能跳</a>
重要提醒:schema 链接必须用户行为才可以跳转,比如用户点击链接,或者用户点击按钮,在事件中使用 location.href
进行重定向均可。非用户行为跳转 schema 链接会被禁止,例如初始化脚本就跳转,什么方式都不行,比如模拟 a 链接点击,iframe 加载,均不行。
坑点:
- 不能自动唤起。也对,总不能自动唤起微信支付直接让你付钱吧。本来自动唤起就流氓。
相关链接:
- https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app
- https://developer.android.com/training/app-links/deep-linking?hl=zh-cn
第三方服务唤起
app 内置页面是可以控制浏览器跳转的,所以部分 app 不允许跳转,这些不用考虑。但是也有一部分 app 的内置页面支持向外跳转,不过需要接入 sdk。
比如微信内置页面跳转到其他 App,就需要接入微信 sdk,四端都要接:ios、android、server、web。开发量大概每个端 2 人力,联调还需要更多人力,因为边界情况总是很多。
比如下面就是一个微信内页面跳转其他 app 的用例:
<wx-open-launch-weapp
id="launch-btn"
appid="在微信注册的 app id"
path="pages/home/index?user=123&action=abc"
>
<script type="text/wxtag-template">
<style>.btn { padding: 12px }</style>
<button class="btn">打开应用</button>
</script>
</wx-open-launch-weapp>
坑点:
- 无数,根本理不完,之前接微信跳转一堆问题,地址不能有花括号,ts 不支持,样式加载失败,反正一路踩坑
相关参考:
小结
换端实际上很坑,要想做到完美的换端几乎不可能。