使用浏览器的技术,运行那些并不依赖浏览器外壳的网络应用,并获得接近本地应用的体验,长久以来便是一个备受关注的需求。因为浏览器的WebView封装了大部分和本地操作系统的交互,网络应用对本地资源的占用远远小于本地应用,意味着同等资源下可运行的网络应用数量远大于本地应用,这在寸土寸金的移动开发中尤为重要。
因应这一趋势,Opera支持的WAC标准,Mozilla为了开发Firefox OS而公布的WebAPI规范等,展开了激烈角逐。经过一番龙争虎斗,最终胜出的是Google的PWA。
PWA的全称是Progressive Web App,即渐进式网络应用,不难看出Google把它当成了本地应用向网络应用过渡的一种中间形态。PWA的开发,与普通网络应用并无二致,只是需要在HTML头中增加一个<link>标签,声明自己是PWA。一些浏览器在读到这一标签后,会询问用户是否需要在本地操作系统的桌面增加一个图标(这被称为PWA的安装),但对于大部分浏览器,<link>标签既非充分也非必要。iOS的Safari可以将任何网站添加到桌面,而macOS的Safari则完全不允许这样做。
不同浏览器的版本所支持的manifest各不相同,在https://developer.mozilla.org/zh-CN/docs/Web/Manifest可以看到各家的支持情况。以Opera桌面版为例可以看到标准的执行多么混乱。
57版开始支持serviceworker,一种可以指定应用使用本地资源的机制。
75版开始支持按照开发者设定的优先模式显示,包括fullscreen、standalone、minimal-ui和browser。
76版开始支持作为系统的分享目标。
82版开始支持将内页作为定向跳转目标。
83版开始支持通过指定协议和链接打开。
88版开始支持通过指定文件后缀名打开。
96版开始支持打开时传入指定参数。
这种混乱的源头在于,由于移动端操作系统在这时已经形成了两分天下的大势,苹果通过App Store,Google通过Google Play攫取了大量的利润,本质上他们并不允许一个超脱于现有应用发行渠道的安装方式独立存在。妥协的结果是,PWA锁定于浏览器,只能通过安装它的浏览器打开,自然也只能使用母浏览器的权限。这便意味着,尽管PWA是一个理论上很优秀的标准,但它的生效需要操作系统、浏览器和网站三方同时支持。而历史经验告诉我们,在三家参与者都是自由市场竞争情况下,这足以组装出成千上万的不兼容情形,从而消耗掉用户的使用热情。
在中国,由于Google的解决方案不太好用,由华米OV等9家设备厂商所建立的快应用联盟也在做类似的事情,实际的结果是,快应用形成了9种标准和9个发行渠道。
只有一种情况,可以催生PWA的成功,那就是一个超级系统或一个超级应用的存在,它可以强势要求另外两方遵循自己的标准。前者是Chrome OS和KaiOS所循的方向。而后者,还真的被微信做成了。
微信于2017年推出的小程序,尽管从未把自己叫作操作系统,但它在中国市场已经成为顶流的开发平台,与Android、iOS早已鼎足而三甚至有跃然其上的态势,新兴网络应用通常首先开发小程序版本以试水温。尽管支付宝、抖音等也在尝试相同赛道,但在中国,如果只说小程序三个字的话,默认值得就是微信小程序。微信小程序的成功,得益于几点:
微信是中国的国民应用,在几乎不依赖预装的情况下,渗透率维持在85%以上,遥遥领先于追赶者;
在2014年的扫码大战中,微信已经胜出,成为在街上见到二维码默认拿出的扫描器;
微信浏览器是中国流量最大的Web浏览器(尽管抖音的在网时长可能超过,但抖音的内容多属于围墙花园),各大网站已经习惯去兼容、适配和运营;
微信拥有中国最庞大且广受承认的实名账号系统,绝大部分主流网站都支持使用微信登录,并愿意通过微信获得用户的手机号授权;
微信自身对于权限的控制也非常审慎,在用户隐私和易用性之间寻求微弱的平衡。
尽管冠以浏览器级操作系统的名号,碍于浏览器界的开放竞争生态,典型浏览器难以兑现天赋,反而成就了那些望之不似浏览器的超级应用。典型浏览器往往只能在一两个底层操作系统称王称霸,而超级应用一定程度上获得了左右底层操作系统竞争格局的能力。
尝试在超级应用方向有所建树的,除了微信,还有中国的支付宝和抖音,美国的X等。
而作为前浪的iOS 1及其Safari浏览器,则被拍死在了沙滩上。随着App Store的诞生,苹果对PWA已是可有可无的态度,在数字市场法案的要求下,iOS 17.4版本甚至一度打算从欧盟废弃PWA,由于用户的呼声暂时保留了下来,但也仅限于既有的WebKit内核,而未对第三方引擎开放。