唤端技术浅析
本文主要浅析唤起 APP的基本方式以及相关方案,兼容性部分暂不作深入探讨,有待补充。唤起 APP用唤端代述。
前言
- 在 H5 页面的日常开发中,往往需要通过唤端改善用户体验。比如一个常见的场景:用户通过链接分享或其他途径,在端外访问 H5 活动页面,与页面发生交互后,需要实现以下功能:
- 功能 A:对于已安装 APP,唤起 APP,并跳转到对应的活动页。
- 功能 B:对于未安装 APP,唤起的应用商店(APP 主页)。
- 功能 C:基于功能 B,在下载安装完成,打开 APP 后,跳转到对应的活动页。
其中能实现 用户直接转到应用中的特定内容 的链接称为 Deeplink,比如功能 A 或 B。在前者基础上实现延迟跳转的链接称为Deferred Deeplink,比如功能 C。(概念来自 Appsflyer)
- Deeplink:一般 deeplink 的调起方式有三种:用户点击 a 标签;脚本中进行页面重定向;设置 iframe 的 src;下面就不进行调起形式的讨论了。
URL Scheme
:
- 原生 App 开发时注册 Scheme 即可,兼容性良好,但由于跳转前有选择对话框,所以体验相对一般。
- 兼容性:Android、IOS
- 行为:
- i.如果 APP 已安装,则打开 APP。
- ii.如果 APP 未安装,发生跳转错误(非 iframe 方式打开)。
- URL 示例:
myapp://somepage?paramA=1
Chrome Intent
:
- Chrome Intent 是 Android 设备上 Chrome 浏览器中 URI 方案的深层链接替代品。
- 兼容性:Chrome >= 25
- 行为:
- 如果 APP 已安装,则通过配置的 URI SCHEME 打开 APP。
- 如果 APP 未安装,配置了 fallback url 的跳转 fallback url,没有配置的则跳转应用市场。
- URL 示例:
intent://path#Intent;scheme=URI Scheme;package=package name;S.browser_fallback_url=fallback url
Universal Link
:
- Universal Link 是 Apple 在 iOS 9 推出的一种能够方便的通过传统 HTTPS 链接来启动 APP 的功能。可以无缝重定向到对应的 APP,且不需要通过 Safari 浏览器。如果你的应用不支持的话,则会在 Safari 中打开该链接。有一定的使用门槛,需要完成前置的集成步骤和一个 支持 HTTPS 的域名。
- 兼容性:>= iOS 9
- 行为:
- 如果 APP 已安装,则打开配置 URL 关联的 APP。
- 如果 APP 未安装,则打开配置 URL 的 WEB 页面。
- URL 示例:
https://myapp.com/somepath.html
APP Links
:
- 安卓版的 Universal link。同样需要前置的集成配置。通常 APP Links 配置的地址与 Universal link 配置的一样。
- 兼容性:>= Android 6
- 行为:
- 如果 APP 已安装,则打开配置 URL 关联的 APP。
- 如果 APP 未安装,则打开配置 URL 的 WEB 页面。
- URL 示例:
https://myapp.com/somepath.html
- 微信唤端
- 在部分 APP 内部去唤起第三方 APP,第一方 APP 出于防止流量流失、安全性等考虑,对上述Deeplink进行了限制,无法直接使用。因此往往是通过第一方 APP 提供的 API 进行唤端,比如微信的 launchApplication、wx-open-launch-app等。其它 APP 的 API 形式唤端亦是如此,这里一笔带过。
Deferred Deeplink
市面上实现Deferred Deeplink的方案不多,这里只介绍基本原理:
另外一种 hack 方案,但不属于Deferred Deeplink范畴。
集成方案
- 实际的运行环境往往不是理想的,会有诸多因素影响,因此只通过一种Deeplink去实现唤端是比较局限的,主流的实现方案都是多种方式结合。
- 转转前端的方案
- Appsflyer - Onelink
- 其他方案
和上述两种方案大同小异
- 手动造轮子
- 其他深度链接平台 branch.io、友盟等
限制 & 兼容性
- Deeplink 兼容性表现
- 集成方案兼容性表现:
- onelink
参考