跳到主要内容

唤端方案

唤端

唤端就是在某些场景下通过一定的手段打开目标APP并且加载出希望展示给用户的内容。唤端技术我们也称之为deep link技术。

通常是指在手机上从一个 app 跳转到另一个 app,也就是 app 间的跳转。常见应用场景为投放到媒体的广告、用户分享、线下扫码等,比如从抖音的引流电商卡片点击直接跳转淘宝的商详页,亦或是点击一个淘宝链接直接打开淘宝app直达对应页面。

常用的方案为

  • URL Scheme(双端通用)
  • Universal Link (iOS)
  • App Link、Chrome Intents(android)

URL Scheme

  • url是统一资源定位符,通俗的说就是网址,有时候也会叫链接、地址
  • scheme是标识资源的访问方式,比如http、ftp、https都属于一种scheme

原理(scheme注册)

想让自己的 app 能通过 Scheme 的方式唤起,需要在 app 里事先向系统注册自己的 Scheme。安卓可以在manifest 里通过 intent-filter 配置,iOS 则可以在 info.plist 文件中添加 URL types 来注册一个 Scheme。系统只负责根据 Scheme 唤起对应的 app,至于打开 app 之后做什么,就需要  app 自己去实现解析 URL 参数,并作出相应处理的逻辑。

唤起方式

  • 通过window.location.href 直接跳转链接,IOS中大多用该方案
  • a标签点击跳转
  • 通过iframe跳转链接,安卓中大多使用该方案
  • 通过特定js bridge打开APP
    // 1
    window.location.href = 'weixin://'

// 2

打开淘宝

// 3 iframe = document . createElement ( ' iframe ' ) ; iframe.id =']_redirectNativeFrame'; iframe.style.display='none'; iframe.src='weixin://'; document . body . appendChild ( if rame ) ;

// 4

window.AlipayJSBridge.call('openInBrowser',{url:'weixin://'});


需要注意的是安卓的原生谷歌浏览器自从 chrome25 版本开始对于唤端功能做了一些变化,URL Scheme 无法再启动Android应用。 例如,通过 iframe 指向 weixin://,即使用户安装了微信也无法打开。所以,APP需要实现谷歌官方提供的 intent: 语法,或者实现让用户通过自定义手势来打开APP,当然这就是题外话了。

```tsx
<a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;S.browser_fallback_url=http%3A%2F%2Fzxing.org;end"> Take a QR code </a>

优缺点

优点:

  • URL Scheme 这种方式兼容性好,无论安卓或者 iOS 都能支持 缺点:
  • 无法准确判断是否唤起成功
  • 很多浏览器和 webview 中会有一个弹窗提示你是否打开对应 APP,可能会导致用户流失
  • 有 URL Scheme 劫持风险,比如某不知名 app 也向系统注册了 taobao:// 这个 scheme ,唤起流量可能就会被劫持到这个 app 里;

Universal Links 是 iOS 9 中引入的功能,使用它可以直接通过 https 协议的链接来打开APP,如果没有安装则打开对应 H5 页面。

原理

当用户打开 universal links 时,iOS 会检查目标域名是否注册了任何已安装的设备。如果有,对应App 将立即启动,而不会再加载网页。如果无,则将在浏览器中继续加载对应的 Web 页面,这样保证了比较好的用户体验。universal links 需要客户端配合在系统中注册域名,所以此方案的前提是当前版本的客户端已完成域名注册。

  • 在 APP 中注册自己要支持的域名;
  • 在自己域名的根目录下配置一个 apple-app-site-associatio 文件即可。

开发文档:Listing 6-1Creating an apple-app-site-association file

{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}

优缺点

优点:

  • 体验好:universal links 有一个较大优点是它唤端时没有弹窗提示,可减少一部分流失
  • 通用:app和网站都能解析,对于没有安装应用的用户,点击链接就会直接打开对应的web页面, 从整体的体验上说,universal links 要优于 URL Scheme
  • 安全:Universal links是从服务器上查询是哪个app需要被打开,因此不存在Custom URL scheme那样名字被抢占、冲突的情况 缺点:
  • 只能在 iOS 上用;
  • 只能由用户主动触发,比如用浏览器扫码打开页面,就没有办法由页面直接唤起APP,而需要用户手动点击页面按钮才能唤起;

App Link、Chrome Intents(Android)

在2015年的Google I/O大会上,Android M宣布了一个新特性:App Links让用户在点击一个普通web链接的时候可以打开指定APP的指定页面,前提是这个APP已经安装并且经过了验证,否则会显示一个打开确认选项的弹出框,只支持Android M以上系统。 App Links的最大的作用,就是可以避免从页面唤醒App时出现的选择浏览器选项框; 前提是必须注册相应的Scheme,就可以实现直接打开关联的App。

  • App links在国内的支持还不够,部分安卓浏览器并不支持跳转至App,而是直接在浏览器上打开对应页面。
  • 系统询问是否打开对应App时,假如用户选择“取消”并且选中了“记住此操作”,那么用户以后就无法再跳转App。

Chrome Intents

  • Chrome Intent 是 Android 设备上 Chrome 浏览器中 URI 方案的深层链接替代品。
  • 如果 APP 已安装,则通过配置的 URI SCHEME 打开 APP。
  • 如果 APP 未安装,配置了 fallback url 的跳转 fallback url,没有配置的则跳转应用市场。

唤端方案兼容性