【问题标题】:PWAs on iOS 12 no longer shares Service Worker cache with Safari?iOS 12 上的 PWA 不再与 Safari 共享 Service Worker 缓存?
【发布时间】:2019-02-02 20:01:06
【问题描述】:

对于 iOS 11 上的 PWA,我们通过将登录详细信息存储在 Service Worker Web 缓存中解决了在 Safari 中打开的外部第三方登录。

这不再适用于 iOS 12(在撰写本文时处于测试阶段)。我认为这一定是因为 PWA 现在有自己的服务工作者缓存,它不再与 Safari 共享,但我无法确认这一点。

有谁知道是否有办法在 safari 和 PWA 之间共享 Service Worker 缓存?请注意,我们已经尝试过 IndexedDB,但它不是共享的,当然也不是 cookie。

据我所知,这意味着 PWA 完全是从 safari 沙盒化的,并且无法让第三方登录正常工作。有什么解决办法吗?

【问题讨论】:

标签: ios service-worker progressive-web-apps


【解决方案1】:

从 iOS 12.2(2019 年 3 月)开始,现在可以进行 OAuth 登录,因为外部网站的链接现在在 PWA 应用内浏览器中打开,并且返回的链接指向 PWA。因此,我现在能够通过第三方 Auth0 登录在 iOS 上部署 PWA 应用程序(它已经在 Android 和 Windows 上运行)。

但请注意,Safari 和 PWA 之间不会像在早期版本的 iOS 中那样共享登录会话。

我是从 Maximiliano Firtman 的 this article 那里了解到的。

【讨论】:

  • 您的问题意味着,在通过 URL 在 Safari 中进行初始部署时,您需要用户登录,登录详细信息存储在缓存中(严格来说,不是 service worker 的组成部分) .你说它在 iOS 12 之后不再有效,并认为这是因为 PWA 使用了单独的缓存。这似乎意味着您发现 PWA 要求用户再次登录。这是你发现的吗?
  • 此外,您的回答说“这不再是 iOS 12.2 的问题”。那么您现在是否发现初始 Safari 登录(在添加到主屏幕之前)意味着一旦它作为 PWA 安装并添加到主屏幕,就不需要额外的登录? (我问是因为这不是我们在 iOS 13.5 下的体验 - 当它作为已安装的 PWA 访问时,初始 Safari 登录无法识别。)
  • 我可以看到我并不完全清楚。从 iOS 12 开始,不再可以在 safari 和 PWA 之间共享登录。 12.2 中修复的是:“当外部 URL 重定向或指向范围内的 URL - 包括 POST 请求、JavaScript 重定向或链接 - 时,PWA 会关闭浏览器并在独立窗口中加载内容,然后返回到原始 PWA。”换句话说,我们现在可以在 PWA 应用程序中使用调用的第三方 OAuth 登录,这在 iOS 12 中不起作用。
  • 感谢您的澄清,Tarostar。您已确认我们的要求 - 允许我们的用户在初始访问时通过 URL 登录应用程序,并在切换到已安装的 PWA(Android/Chrome 允许)时保持登录状态 - 在 Safari/iOS 下是不可能的.
【解决方案2】:

我在 Twitter 上向 Jonathan Davis(Apple 的 Web 技术传播者)询问了这个问题。他说 iOS 上的 Web 应用程序(“保存到主屏幕”应用程序)不与 Safari 共享数据存储。它们作为独立于 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

希望这个答案有帮助!

【讨论】:

  • 我认为 OP 提出了通过缓存共享不再起作用的问题
猜你喜欢
  • 2016-05-19
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2019-05-09
  • 2018-09-29
  • 2020-11-20
  • 1970-01-01
相关资源
最近更新 更多