App Links 并不是用来取代 URL Scheme 的,所以也谈不上「有何本质不同」。它并不是某一种技术,而是一项协议(或者像他们说的,一种「解决方案」)。
我们想像一下这样一个常见的场景:A 在大众点评上看到了一家餐厅并想通过微信把这家餐厅分享给 B——此时问题出现了——B 会如何处理这个链接是未知的。如果 A 和 B 都是同一平台的用户还好,当时直接传一个类似于 dianping://shop/12345 的 URL 对方在微信中点了就能在 app 里打开了(先不考虑微信是否接受这样的 URL)。可是如果大众点评某天升级了把 URL scheme 改成 dianping_v2://shop/12345 呢?如果 A 和 B 是两个不同平台的用户呢?如果 B 的手机上根本就没有装大众点评呢?
这个事情,大众点评即使想做也是有心无力——链接一旦分享出去控制权就不在自己手里了。好吧,我们还是可以做一个网页版的嘛,弄一个
http://m.dianping.com/shop/4551072 这样的链接,不管对方是什么环境,至少可以在微信的 in-app 浏览器里打开嘛。牺牲部分体验来换取最大的可用性——而且还是有活路的,可以在网页加载好后用 JavaScript 做一点 window.location.href = 'dianping://shop/12345' 这样的小动作嘛——直到有一天微信关掉了 URL Scheme 跳转……
于是这个事情就变得很荒唐。明明对方的手机里有装大众点评的 app,大众点评也支持 URL Scheme,可在微信上点开大众点评的链接就是只能看到 web 版。理论上来说作为平台的微信应该出来挑大梁,不过可能微信忙着征服全世界顾不上这点小事——于是另一个闲得没事干的平台 Facebook(好吧,准确地说是 Facebook 去年买进来的 Parse 团队)跳出来解决了问题。
怎么解决?说难也不难,无外乎就是把自己在几个平台下的跳转规则一并告诉对方。对方是什么平台就按什么平台的规则去处理。如果对方没装我们的 app,那我就告诉他一个安装地址。如果他的平台确实没有我们的 app(并没有想黑 WP 的意思……),那么就给他看一个网页版好了。但是这些规则写在哪呢?用 <meta> 标签放在网页里就好了嘛!于是一个实现了 App Links 的网页大致长成这样:
<html>
<head>
<meta property="al:ios:url" content="applinks://docs" />
<meta property="al:ios:app_store_id" content="12345" />
<meta property="al:ios:app_name" content="App Links" />
<meta property="al:android:url" content="applinks://docs" />
<meta property="al:android:app_name" content="App Links" />
<meta property="al:android:package" content="org.applinks" />
<meta property="al:web:url"
content="http://applinks.org/documentation" />
</head>
<body>
Hello, world!
</body>
</html>
大众点评网的程序员们看到之后如获至宝,嗨嗨皮皮(不要质疑我的成语能力!)地把这些 meta tags 都塞进了
http://m.dianping.com/shop/4551072 。Parse 说我都给你们写好各个平台下的 SDK 了,解析跳转一条龙哦你们赶紧用。腾讯(过了一年后)说,App Links 是什么?
App Links 还制定了一些别的标准,比如可以多次指定同一项值来完成 fallback(用于新老版本 URL Scheme 不兼容的情况),比如实现了跳转时的数据传输标准(用 JSON 描述,放在 al_applink_data 参数中),比如提供了跳转后 app 的 UX 建议(导航栏用一层蓝色的可点按区域覆盖,点按后返回原 app)。App Links 不是唯一解,也不一定是最优解,但它确实是解决当下 app 间跳转混乱局面的一个可行解(而且标准本身具有可扩展性,即使 iOS 8 里加入类似 Android 中的 Intent,App Links 也可以通过增加几个 meta tags 来支持)。回到最初的问题上,它解决的问题,其实就是 Ilya Sukhar (Parse CEO) 在 F8 上说的这句话:「There is no unified way to navigate to links across all the platforms.」在技术层面上,App Links 统一了流程、跨了平台,这就很好了。
而剩下的问题其实才是最大的问题——有人用的标准才是好标准。这个用也分两种角色:类似大众点评这样的第三方开发者,他们只需要发布自己的 App Links 就可以了,这个事情很简单,如上面所说无非就是在现成的网页里加几个 meta tags 的事情。而类似微信这样的平台则需要实现这样的协议,理论上也不难,但也许除了优化用户体验之外好处有限,可能还会面临到如何去兼容老版本啦、跳转出去会不会降低用户黏性啦、怎么满足平台的统计需求啦之类的问题(随口一说,也许没那么多问题。)老外比较单纯,想想这对用户来说是件好事我们就做吧,于是至少 Parse 有他的亲爹 Facebook 给他撑腰。至于国内,需要有第一个吃螃蟹的人。
— 完 —
本文作者:
罗晟
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有
2 个回答,查看全部。
延伸阅读:
测试 iOS App 时需要注意什么?
scrum工具大家有什么推荐?