即使PWAs已经有两年多的时间了,但仍然有一些对他们的误解:<strike>他们只能在Chrome上工作,它们不能像本机应用一样顺畅,没有全屏模式, 他们必须是SPA,建立离线不值得等等。
所有这些都是假的,我希望Medium允许删除线文本,以让我可以强调一点。
Progressive Web Apps是一个充分建立起来的技术,像Twitter和AliBaba这样的大企业已经取得了巨大的成功。
Hardware access includes
此外,Progressive Web Apps实际上比通常想到的还提供了更多的硬件访问。 截至2016年9月,我在Android上的Chrome 52稳定版的whatwebcando.today截图如下:
硬件访问包括
- 地理位置 - 在绝大多数浏览器中都支持
- 相机和麦克风通过getUserMedia/Stream 和即将推出的MediaStream Image Capture API
- 设备振动
- 屏幕方向和加速度计访问 ,包括罗盘和陀螺仪
- 电池状态
即将到来的硬件访问
这些功能正在实施或已经可以在某些浏览器中运行:
这里是Firefox 48:
另一个重要的要点是,Origin Trials框架(在Chrome中实现)使制造商能够公开和测试硬件(或软件)功能,而无需通过标准化过程。 例如,手机制造商可以暴露一个API来读取压力传感器的值,进行细化,然后提交给W3C考虑。
无论如何,访问硬件功能只是一个伟大的应用程序的一部分。 传统上只能由本地应用程序使用的软件功能,现在也可用于网络应用程序。
PWAs也可以使用的传统的本机功能
- 推送通知
- 离线工作
- 在主屏幕上添加一个图标
- 安装到Android中(即在应用程序抽屉和“设置”中)
- 接受意图
- 全屏启动
- 剪贴板访问
- 使用Credentials Manager API持久的自动登录
- 使用CSS3,HTML5 Canvas或WebGL的硬件加速2D / 3D图形 - 检查一些HTML5 Canvas演示,WebGL网站或three.js库。 WebGL中的游戏引擎性能接近本土。
访问文件系统(Chrome和Opera)并在任何浏览器中读取用户选择的文件 - 真正光滑,平滑的UIs与60fps动画
这些功能涵盖了很多用例,现在许多流行的本机应用程序可以重写为PWA。以Slack为例。它的开源替代品Rocket.Chat正在构建一个PWA版本。有关更多的PWA演示,请参见https://pwa.rocks。
虽然PWA的能力正在迅速发展,但仍然有一些你不能做的事情。
PWAs即将可以使用的本机功能
处理意图 - 例如,将页面共享到另一个应用程序,或作为共享目标。例如,一个PWA聊天应用程序,它接收一个图像做为用户头像。
PWAs目前缺乏的原生Android功能
- 联系人,日历和浏览器书签访问(尽管缺乏访问权限可以被隐私意识的用户视为功能)
- 铃声
- 电话功能 - 拦截短信或呼叫,发送短信/彩信,获取用户的电话号码,读取语音邮件,拨打电话而不拨打Dialer对话框
- 低级访问一些硬件功能和传感器:手电筒,大气压力传感器
- 系统访问:任务管理,修改系统设置,日志
- 注册以处理自定义URL方案和协议或文件类型
对于大多数用例,PWA可以做到,也是一个更好的投资 - 您不必为Android,iOS和Web开发和维护三个独立的代码库。 PWAs还具有本机应用程序缺乏的某些功能。
PWA相对于于本机应用程序的优势
低分配的摩擦力 - 如果您的PWA网络应用程序在线,那么Android(和其他移动)用户就可以访问。 65.5%的美国智能手机用户每月不下载任何新的应用程序。 PWAs消除了需要去应用商店,搜索应用程序,点击安装,等待下载,然后打开应用程序(直到Android Instant App启动)。 每个步骤都会损失20%的潜在用户。
- 可搜索性 - 搜索引擎可以轻松找到PWA网络应用程序中的内容。像StackOverflow这样的以内容为中心的本机应用程序,不会在应用商店搜索结果中显示,尽管其提供访问权限的内容,例如“pwa vs. native”。对于像Reddit这样的社区来说,这也是一个问题,它不能将其众多的子社区作为单独的“应用程序”暴露给应用商店。
- 可链接性 - 任何页面/屏幕都可以有直接链接,可以轻松共享
- 书签功能 - 保存该链接以直接访问应用的视图
- 总是新鲜 - 不需要通过应用商店批准来推送更新
- 通用访问 - 不受应用程序商店的限制,有时是任意策略或(意外)地理限制
*大量数据节省,在昂贵或缓慢上网的新兴市场中极为重要。例如,电子商务网站Konga通过迁移到PWA将首次加载的数据使用量减少了92%。
iOS
虽然Opera与Chrome和Firefox大致相同,但在iOS上,我们仍然等待Safari赶上。幸运的是,苹果公司正在关注PWA,并考虑实施Service Worker,这是为PWAs提供支持的核心功能。然而,即使没有Service Worker,除了离线和Safari / iOS推送通知(Mac OS Safari可以推送通知)之外,PWA网络应用程序仍将提供上述所有其他功能。用户仍然可以将应用程序添加到其iOS主屏幕,并以全屏方式启动。
结论
“PWA vs. Native”是一个错误的问题,因为如果你已经有一个产品,你已经有一个应用程序,一个网络存在,或者两者都有,你们应该提高两者。 如果您没有产品,那么如果您有资源来构建本机Android +本地iOS +网络应用程序,并保持它们同步,请继续。 否则,在大多数情况下,选择首先建立PWA是一个没有意义的事情:
- 如果您的目标是下一个十亿用户,PWA就是要走的路。 Android用户占绝大多数,数据价格昂贵。
- 如果你有桌面用户,建立一个PWA。
- 如果您不需要Android特定的原生功能(请参阅上面的比较),只需构建一个PWA(涵盖移动网络和Android),和一个原生的iOS应用程序。 构建一个原生的Android应用程序是不值得的,因为它不会帮助您领先于iOS。
- 也可以在iOS上建立PWA:AliExpress(阿里巴巴的eBay)在构建PWA后,iOS转换率提高了82%。
传统上,你必须建立:
Desktop/mobile web + native Android + native iOS
现在,大多数情况下您可以:
PWA + iOS app
一旦Safari实现了Service Worker,它就只是
PWA
这不是“PWA vs. native”,而是“PWA vs. [web + native + native]”。
而在覆盖面方面,没有本地解决方案能够击败渐进的网络应用程序。