唤端技术浅析

本文主要浅析唤起 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的方案不多,这里只介绍基本原理:

ios 唤端 唤端是什么意思_前端

另外一种 hack 方案,但不属于Deferred Deeplink范畴。

集成方案

  • 实际的运行环境往往不是理想的,会有诸多因素影响,因此只通过一种Deeplink去实现唤端是比较局限的,主流的实现方案都是多种方式结合。
  • 转转前端的方案
  • Appsflyer - Onelink
  • 其他方案

和上述两种方案大同小异

  • 手动造轮子
  • 其他深度链接平台 branch.io、友盟等

限制 & 兼容性

  • Deeplink 兼容性表现

ios 唤端 唤端是什么意思_Chrome_02

  • 集成方案兼容性表现:
  • onelink

ios 唤端 唤端是什么意思_ios 唤端_03

参考