写点什么

苹果扼杀 PWA ?iOS 上的 PWA 体验难达标,原生应用才是王道

  • 2024-02-23
    北京
  • 本文字数:1804 字

    阅读完需:约 6 分钟

大小:874.06K时长:04:58
苹果扼杀 PWA ?iOS 上的 PWA 体验难达标,原生应用才是王道

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

上个月,在大批 Campsite 用户向我们提出想要一个移动应用后,我们为 Campsite 提供了 PWA 支持。现在 Campsite 可以安装在手机主屏幕上,也能接收到推送通知了,于是我们立刻意识到这项工作物有所值,我们的用户也很高兴。

我们确实想要给 Campsite 做一个原生应用,但考虑到我们只是一个小团队,还在市场中寻找自己的立足点,所以增加更多的平台开销会拖累我们的发展速度。

 

与此同时,我们发现在 iOS 上支持 PWA 需要大量时间——无论我们如何努力,都会有太多的错误和缺失的特性,让我们感觉很难满足自己设定的工艺和质量标准。

网络推送:好处

苹果在 iOS 16.4 中向 PWA 添加了 Safari Web Push。这个 API 非常易用——你甚至不需要开发者帐户。

 

Campsite 是一个带有 NextJS 前端的 Rails API。为了让网络推送正常工作,我们需要做的就是:

 

  1. 通过 window.matchMedia('(display-mode:standalone)') 检测我们是否运行在 PWA 环境中,并提示用户启用推送。

  2. 我们请求推送权限并注册一个服务 worker。Pushpad 的服务 worker 帮我们搞定了这块。这个 worker 将注册的推送端点以及 p256dh 和身份验证令牌发送到我们的 API。

  3. 发生一个可推送事件时,我们在队列里添加一个 Sidekiq 作业,以使用 Pushpad 的分叉 web-push gem 发送一个推送。如果苹果返回一个 410 响应,我们就会销毁这个推送订阅。

 

这样,我们就可以在 Campsite 中发送高信号通知和聊天的推送了。

网络推送:坏处

如果你一直习惯的是构建原生推送通知,那么你会发现 Safari Web Push 缺少很多特性,还会造出很多陷阱。

 

我们发现的情况中最令人惊讶的是,你在收到通知时必须总是在设备上显示通知。这是在 Service Worker 中完成的,因此从技术上讲你可以跳过它的显示。但如果你这样做,苹果将撤销你的推送端点。来自官方文档:

Service Worker 收到推送通知后立即向用户呈现推送通知。如果你不这样做,Safari 会撤销你站点的推送通知权限。

Reddit 上的用户发现,第三次未显示通知后权限就被撤销了。

 

这意味着,如果你正在 PWA 上查看一段聊天内容并收到了新消息,你是没办法屏蔽新消息的推送的,这对用户来说非常烦人。

 

为了解决这个问题,我们会延迟 10 秒发送,这样你在查看聊天内容时就能把刚收到的信息标记为已读。相比之下,原生应用可以控制是否显示推送通知。

 

以下是我们在 iOS 上使用 Safari Web Push 时遇到的一些其他问题:

 

  • 没有静默推送,因此我们只能使用显示的推送来更新应用图标的小红点。理想情况下,如果你在其他地方清除通知,我们会自动删除你的手机上的应用图标小红点记录,但这对于 PWA 的推送机制来说是不可能做到的。

  • 除非你点击通知,否则无法从通知中心删除通知。你可以获取通知,但调用 notification.close() 不会执行任何操作。用户必须手动清除 Campsite 的推送。

  • 你无法删除“from Campsite”这条注释。

  • 没有通知分组或通讯通知。

错误和缺失的特性

我们在 Campsite 中提供了由 next-thems 驱动的动态明暗模式支持,简单说就是:

window.matchMedia('(prefers-color-scheme: dark)')
复制代码

虽然你的 PWA 将以浅色或深色模式呈现,但在应用程序被终止之前它不会来回切换。

随着 iOS 17 的发布,这个功能失效了。撰写本文时功能已经失效了 6 个多月,而且在 17.4 Beta 版中它似乎还是这个样子。开发人员在过去一段时间来一直在报告问题。

 

我们经常遇到一些更烦人的错误:

 

  • 我们使用 CSS sticky 将元素固定在视口的顶部/底部(导航栏、聊天输入等)。一段时间后,sticky 元素会破裂并在页面上自由滚动。这只能通过终止应用来解决。

  • 键盘也变化无常得厉害。它将 sticky 元素推离屏幕,有时它在 PWA 中干脆显示不出来了,唯一的解决方法是重新启动手机。

  • 没有用于触觉、PIP 或联系人同步的 API。(感谢 Jacob 指出这些问题)

我们接下来该怎么做?

我非常赞成我们构建 PWA 的决定。我们发现应用程序图标红点和推送通知可以帮助我们同用户保持更紧密的联系。我们的用户也同意这一点——有些人现在使用 Campsite 一半的时间都是在用手机应用!

 

不幸的是,iOS 上的 PWA 不符合 Campsite 的工艺和质量标准,而且苹果限制 PWA 在欧洲使用的最新消息也令人担忧。一旦我们锁定了 Campsite 的核心功能,我们就打算从头构建一个原生应用。

 

如果你的用户需要原生应用,构建基本的 PWA 支持可以帮助你快速入门,只是不要指望你的 PWA 能够接近原生体验。

 

原文链接:https://app.campsite.co/campsite/p/notes/rengvq2txami

2024-02-23 14:557026

评论

发布
暂无评论

云原生引擎单元测试实践

京东科技开发者

云原生 单元测试 代码覆盖

阿里十年架构师总结的Java核心知识点大全,恐怖程度难以想象!

开心学Java

Java spring JVM Java工程师 多线程并发

"我眼中的ChatGPT"征文获奖作品合集

InfoQ写作社区官方

技术专题合集 热门活动 ChatGPT

运维进阶训练营 -W18H

赤色闪电

蚁人与量子停车场

脑极体

AI

《动手学深度学习--PyTorch》之学习环境搭建

IT蜗壳-Tango

AIGC导航网站推荐

kcodez

人工智能 AIGC Chat ChatGPT

GPT-4免费无限制使用教程

南城FE

人工智能 AI 前端 ChatGPT

【程序员日记】---当“微服务”遇到了“电饼铛“

京东科技开发者

架构 微服务 系统架构 开发 企业号 3 月 PK 榜

App Store 新定价机制 - 2023年最全版

37手游iOS技术运营团队

ios iap In App Purchase App Store Connect API app store

PyTorch 深度学习实战 | 基于ResNet的花卉图片分类

TiAmo

数据集 PyTorch

架构训练营模块九作业

现在不学习马上变垃圾

架构训练营10期

如何落地质量门禁?

老张

软件测试 质量保障 质量度量 质量门禁

可观测行之系统如何识别网站有多少文件命中了缓存?

Yestodorrow

可观测性 可观测性用观测云

一种基于实时大数据的图指标解决方案

京东科技开发者

大数据 运维 系统架构 开发 图指标

设计电商秒杀系统

Geek_e5f2e5

Java并发夺命23问

程序员大彬

Java Java并发 java面试

三月征文活动结果已出炉,快来看看有没有你

InfoQ写作社区官方

热门活动 ChatGPT

如何构建内部开发者门户:企业参考指南

SEAL安全

企业号 3 月 PK 榜 开发者体验 内部开发者门户

媒体赞誉丨九科信息入选“第一新声”2022高成长新锐企业榜、RPA高成长企业榜,并受邀参加“2022年高科技高成长年度峰会”

九科Ninetech

Removing HTTP/2 Server Push from Chrome

Yestodorrow

「Go框架」bind函数:gin框架中是如何绑定请求数据的?

Go学堂

golang 开源 程序员 个人成长

Dubbo Triple 异常处理

昵称不能为null

dubbo triple协议 dubbo异常处理

架构实战营10期-模块九作业

炮仗

SaaS时代下的我们需要什么样的数据库?

陈飞

架构实战营第10期毕业设计-秒杀系统

Geek_4db2d5

9 个可以快速掌握的 Java 性能调优技巧,必须掌握

三十而立

Java

运维进阶训练营 -W19H

赤色闪电

利用 Amazon Managed Blockchain 发展和扩大忠诚度奖励计划(第一部分)

亚马逊云科技 (Amazon Web Services)

人工智能

谷歌架构师分享gRPC与云原生应用开发Go和Java为例文档

程序知音

Java 架构 云原生 编程语言 后端

SVN管理工具:Cornerstone 4 激活版

真大的脸盆

svn Mac Mac 软件 SVN客户端

苹果扼杀 PWA ?iOS 上的 PWA 体验难达标,原生应用才是王道_跨端开发_Ryan Nystrom_InfoQ精选文章