[关闭]
@liuhui0803 2018-04-02T23:39:11.000000Z 字数 5705 阅读 2027

渐进式Web应用已抵达iOS

Web开发 移动应用开发 渐进式Web应用 iOS


摘要:

本文概括介绍了最新发布的iOS 11.3对PWA的支持情况,以及PWA应用开发者需要注意的问题。

正文:

本文最初发布于Maximiliano Firtman的博客,经原作者授权由InfoQ中文站翻译并分享。阅读英文原文:Progressive Web Apps on iOS are here

Apple在iOS 11.3中悄悄加入了对“渐进式Web应用”(PWA)这一系列新技术的基本支持。是时候看看这些技术是如何生效的,有什么能力,会遇到哪些挑战,以及如果已经发布了PWA,又需要了解哪些事情。

01.png-227.2kB
这是一个在iPad上全屏显示,可以脱机使用的PWA,该应用也像来自App Store的其他原生应用那样,可以显示在iPad的程序坞中。

如果你已经阅读到这里,但依然不知道PWA是什么,那么首先要告诉你的是,PWA目前并没有什么唯一的或绝对准确的定义,其实是指使用Web技术创建的应用,这样的应用无需打包或签名,可以脱机使用,并且可以安装到操作系统中,随后无论看起来或用起来都和其他应用完全一致。

在大部分平台上,PWA的安装都无需“应用商店”介入,不过Edge/Windows 10平台目前依然强制要求通过商店安装PWA。

因此你想得没错,现在你可以无需经历App Store的审批为iOS安装应用了。也许这也是Apple对这个新功能绝口不提的主要原因之一,他们可能不想让用户感到困惑。甚至Safari浏览器的发布说明里都没有提到这个技术。

02.png-175kB
你能看出Google Maps的原生应用和PWA版本有什么区别吗?

Apple到底是不是PWA的发明人?

老实说,虽然Google以及Chrome团队杜撰了PWA这个术语,但这个理念最早是初代iPhone OS发布时出现在Safari浏览器上的。2007年,Steve Jobs在WWDC上公布了“One more thing”:如何为初代iPhone开发应用,并提出了让人吃惊的方法:Web应用!最初的产品路线图中并不包含App Store,设备上市后的第一年内也没有原生SDK。从Apple的角度来看,甚至今天的PWA,实际上也属于“能从主屏直接启动的Web应用”,而应用的图标当时被称之为WebClip。

如果愿意,可以参看我去年的Fluent Conference主题演讲,我在10:50处用了一分钟介绍这种技术。

视频链接:https://youtu.be/EFGltzFSK-c
直接跳转至10:50即可看到2007年Apple对PWA的介绍

11年前,这个理念并未引起太大关注,而Apple自己也忘了更新这个平台,因此十多年来,这个平台充满了Bug和不一致的情况。几年后,其他平台借鉴了这个理念,例如Nokia N9上的MeeGo Browser以及Android上的Chrome。

Chrome进一步完善了这种技术,提供了更好的体验,而他们的改进主要围绕Service Worker和Web App Manifest的规范等方面。从目前(2018年3月30日)的iOS 11.3开始,Apple在这两个规范的支持方面赶上了Chrome、Firefox、Samsung Internet、UC Browser以及Opera(这几家大部分仅面向Android)。已支持Service Worker但尚不支持Web App Manifest的其他桌面端浏览器则是今年的主要完善目标。

03.png-531.3kB
Steve Jobs在WWDC 07上通过初代iPhone介绍PWA(当然名称略有不同)

等等,这么说的话,应用完全无需进行任何应用商店的质量测试,是吗?🤔

是的,没错。然而这样的应用只能在浏览器或Web平台的安全和执行模型中运行。这意味着你可以“发布”未经商店审批的应用,例如为公司员工发布内部应用(当然,也可用来发布成人内容),但这样的应用无法访问纯原生功能,例如iPhone X上的面容ID或增强现实ARKit。或者至少需要等待Web平台开始逐渐支持这些新功能。

PWA可以作为网站或独立应用的模式运行在Safari浏览器内部,具体表现和系统中的其他应用完全相同。也许你会好奇PWA是否使用Web View,对于Safari浏览器或已安装的应用图标来说,无需考虑这种情况;但如果使用其他浏览器,或使用诸如Facebook等应用的内嵌浏览器,就需要考虑了。

iOS平台上PWA的可用能力

借助iOS上的Web平台,你可以访问:

04.png-326.9kB
你能看出来吗?所有这几个图标都是iPhone上的PWA

相比原生iOS应用存在的局限

05.png-196.2kB
就算安装了PWA,显示有图标并且名为Tinder,Siri依然找不到它

Android上的PWA能做哪些iOS上无法实现的事

iOS上的PWA能做哪些Android上无法实现的事

06.png-36kB
配置文件可以包含WebClip,即PWA图标

可如果没有App Store,又该如何安装PWA?⚠️

这也是iOS中最重大的改变之一,因为Safari浏览器不会显示任何提示或邀请(即Android上的Web App Banner)。因此用户需要通过Safari浏览器访问PWA URL,然后手工点按分享图标,并选择“添加到主屏”。但用户无法从视觉上区分所访问的网站是否是PWA。

07.png-210.3kB
访问Tinder.com时可以忽略页面顶部显示的原生应用横幅,点击共享,添加到主屏。如果要为用户提供安装指示,请注意按钮位置会依据系统语言的不同有所差异

此外App Store中还有很多第三方浏览器,例如Chrome、Firefox、Brave或Edge,它们都无法安装PWA或使用Service Worker。

安装之后,这样的应用和主屏上的其他应用几乎没什么两样,不过PWA无法使用3D触控。此外如果再次安装同一个PWA,会出现指向同一个PWA的新图标(好在安装后的文件是共用的)。

很多Web应用还提供了从App Store安装原生应用的链接,而就算在PWA内部,也会显示这样的链接,例如Tinder:

08.png-230.9kB
我已经装了这个应用了,对吧?

我已经有一个PWA,能直接兼容iOS吗?

只要用户更新至iOS 11.3,就可以直接安装你的PWA。你不需要针对iOS进行任何改动,每个PWA都可以直接安装。但这并不意味着一切都将按照预期工作

09.png-506.7kB
Uber的PWA看起来很漂亮,但如果点击“登录”或“继续”,随后需要在Safari浏览器中进行身份验证,等于跳出了独立版PWA……因此,这个PWA没啥实际用处。

对于阅读本文的你,也许已经读过之前该功能处于Beta阶段时我的上一篇博客文章:库比蒂诺,我们遇到问题啦(译注:库比蒂诺位于美国旧金山,为Apple全球总公司所在地)。不幸的是,我在Beta阶段发现的大部分Bug和问题在正式版中依然存在😒

10.png-505kB
如果不进行任何适配,你的PWA可能显示一个“黑上加黑”的状态栏,导致用户看不到时间、电池状态以及任何通知😣

目前不支持的特性

11.png-50.8kB
星巴克的PWA未能在“注册”页面提供返回按钮,因此无法取消该操作,只能重新加载PWA

12.png-183.2kB
Google Keep的PWA需要依赖Web App Manifest的图标,因此在iOS上只能显示为屏幕截图。此时必须通过Apple的非标准Link tag提供iOS版本

需要注意哪些问题

13.png-202.1kB
所有不活跃的PWA,无论什么内容,都会显示为白屏。一定要注意,此时这些应用并未运行,如果重新打开,将从新开始运行

14.png-218.2kB
iPad上也会遇到相同的白屏问题

15.png-544.5kB
Nasa试图为PWA使用屏幕上的豁口区域,导致界面上出现了一些小问题

16.png-286.6kB
莫非是星巴克旗下的Google Maps?并不是,实际上是你连续使用多个PWA后,iOS自己出了问题,以往也出现过类似的奇怪现象,例如某个应用加载了错误的URL

17.png-75kB
我们可以使用Safari浏览器的技术预览版,以Safari和“Web”(主屏上的PWA)模式调试客户端和Service Worker(猜猜哪个是哪个)。另外,“通过网络连接”是个很方便的功能!

18.png-141.1kB
Service Worker的Inspector依然是实验性的,例如无法支持查看Cache Storage内容

19.png-181.8kB

20.png-268kB
这个空白的应用到底是什么?

作者简介

Maximiliano Firtman,移动+Web开发者,培训师,讲师,作家。他曾出版过很多图书,包括O’Reilly Media出版的High Performance Mobile Web他经常在各种国际性会议上担任发言嘉宾,并在移动Web社区广受认可。他还负责为全球顶尖公司提供有关移动、HTML5、PWA和性能的培训,并为很多公司提供了大量有关渐进式Web应用的研讨会与培训,同时发表过多种在线教程,例如Linked Learning/Lynda以及Safari for O’Reilly的教程。Twitter:@firt

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注