iOS 12上的PWA不再与Safari共享Service Worker缓存?

6
对于 iOS 11 上的 PWA,我们通过将登录详情存储在服务工作器 Web 缓存中解决了在 Safari 中打开的外部第三方登录问题。

但是,在 iOS 12(截至撰写本文时还处于测试版)中,这种方法不再可行。我认为可能是因为 PWA 现在拥有自己的服务工作器缓存,不再与 Safari 共享,但我无法确认。

请问是否有办法在 Safari 和 PWA 之间共享服务工作器缓存?请注意,我们已经尝试过 IndexedDB,但它不是共享的,当然 cookies 也不是。

据我所知,这意味着 PWA 与 Safari 彻底隔离,并且没有办法使第三方登录工作。有什么解决办法吗?


1
也许可以在 Twitter 上询问这个人 https://twitter.com/jonathandavis - Mathias
2个回答

3
我在Twitter上向苹果的Web技术传教士Jonathan Davis提出了这个问题。他说,iOS上的Web应用程序(“添加到主屏幕”应用程序)不与Safari共享数据存储。它们作为独立的应用程序单独运行,设备之间没有分享数据的方法。
作为可能适合您的解决方案,我提议阅读Maciej Caputa撰写的一篇文章。引用作者的话,建议创建一个虚假的终端点来保存POST请求中的缓存数据,并在GET请求中返回缓存数据。此文链接:https://www.netguru.com/codestories/how-to-share-session-cookie-or-state-between-pwa-in-standalone-mode-and-safari-on-ios
希望这个回答对您有所帮助!

2
我认为OP提出了一个确切的问题,即通过缓存共享不再起作用。 - ciekawy

1
OAuth登录现在可以在iOS 12.2(2019年3月)上进行,因为外部网站的链接现在在PWA应用内浏览器中打开,并且返回链接指向PWA。因此,我现在能够在iOS上部署具有第三方Auth0登录的PWA应用程序(它已经在Android和Windows上运行)。
但是请注意,登录会话不像早期版本的iOS中那样在Safari和PWA之间共享。
我从Maximiliano Firtman的this article中了解到这一点。

您的问题意味着,在通过URL在Safari上进行初始部署时,您要求用户登录,并将登录详细信息存储在缓存中(严格来说,不是服务工作者的组成部分)。您说在iOS 12之后它不再起作用,并假设这是因为PWA使用了单独的缓存。这似乎意味着您发现PWA需要用户重新登录。这是您发现的吗? - Velojet
此外,您的回答中提到:“自iOS 12.2起,这不再是一个问题。”那么现在您是否发现,在将其安装为PWA并添加到主屏幕之前,初始的Safari登录意味着不需要额外的登录?(我问这个问题是因为在iOS 13.5下我们没有这样的经验-当它作为已安装的PWA访问时,初始的Safari登录无法被识别。) - Velojet
我发现我的表述不够清晰。自从iOS 12以后,Safari和PWA之间不再支持共享登录。12.2版本修复的问题是:“当外部URL重定向或指向范围内的URL(包括POST请求、JavaScript重定向或链接)时,PWA会关闭浏览器并在独立窗口中加载内容,然后返回到原始的PWA。”换句话说,我们现在可以在PWA应用程序中使用调用的第三方OAuth登录,这在iOS 12中无法实现。 - Tarostar
感谢您的澄清,Tarostar。您已经确认我们的要求 - 允许用户通过URL登录应用程序并在切换到安装的PWA时保持已登录状态(这是Android / Chrome允许的)- 在Safari / iOS下不可能实现。 - Velojet
嗨Tarostar。当有人在您的安装版PWA中使用FB登录时,是否能够显示“继续作为[name]”Facebook登录按钮?目前,当我从我的已安装PWA内点击Facebook登录按钮(在浏览器版本上正常工作)时,它会打开一个登录表单,无论我是否已经登录到Facebook应用程序。强制用户输入他们的Facebook用户名和密码显然违背了在应用程序中拥有Facebook登录功能的目的。您知道解决这个问题的方法吗?谢谢 - Shaun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接