【问题标题】:How to save PWA state in iOS如何在 iOS 中保存 PWA 状态
【发布时间】:2018-01-18 23:06:20
【问题描述】:

我意识到 iOS 目前并不完全支持渐进式 Web 应用程序,但在支持 Service Workers 和 Web App Manifest 标准之前,我希望应用程序能够以相同的状态关闭和重新打开。我应该提一下,目前我打开的应用程序没有导航栏,所以在这方面它确实感觉像是一个原生应用程序,但是缺少我认为可能有益和可能的这一件事。

这是一个例子:

发生了什么:

  1. 从主屏幕图标打开 PWA
  2. 打开到默认打开页面
  3. 导航到 PWA 中的特定页面
  4. 返回主屏幕
  5. 从主屏幕图标打开 PWA
  6. 打开到默认打开页面

我想发生什么:

  1. 从主屏幕图标打开 PWA
  2. 打开到默认打开页面
  3. 导航到 PWA 中的特定页面
  4. 返回主屏幕
  5. 从主屏幕图标打开 PWA
  6. 在 #3 中从上方打开导航页面

几周前,我在某处读到了某人的评论,说他们已经完成了这项工作,但再也找不到了。我意识到没有“官方”的方法可以做到这一点,但想知道是否有任何技巧可以做到这一点。

任何想法或经验将不胜感激。

【问题讨论】:

  • 最简单的方法是盯着他们在 localStorage 中访问的最后一个页面,然后去那里然后应用程序再次启动。
  • @abraham 我认为这可能是最有可能的解决方案,希望有某种教程强调这种方法,但可能我必须自己弄清楚。
  • 无论哪种方式,您都可能会遇到这种情况。您可以重用此功能来实现“返回”按钮并存储 2 的堆栈大小。
  • @NealJones,我们也面临与 PWA 相同的问题,应用程序每次从第一个屏幕加载。如果您对此有详细的解决方法,请告诉我。

标签: ios progressive-web-apps


【解决方案1】:

好消息!此错误已在 iOS 13 中修复

iOS 12 在 PWA 中带来了持久状态的改进,这意味着当你关闭应用程序时,当你返回它时它会处于相同的状态。但是,这带来了另一个错误:强制退出应用程序仍然不会使应用程序恢复到新状态。

在 iOS 13 和 iPadOS 中,这些错误现已完全修复,应用生命周期似乎与最终用户的原生应用相同。

这不需要任何特殊设置:升级到 iOS 13/iPadOS,您应该会立即看到改进。

参考:https://wespeter.com/posts/ios13-pwa-improvements/

【讨论】:

    【解决方案2】:

    我不知道您是否使用任何客户端路由库,但我们意识到 iOS 12 在重新加载后导航到“登录”页面。所以我们对 angularjs 所做的就是缓存转换时的状态,然后在 '$stateChangeStart' 上读取它

         if (toState.name === 'login') {
                            event.preventDefault();
                            var appState = $rootScope.$localStorage.applicationState;
                            if (appState && appState.state && appState.state.name && appState.params) {
                                $state.go(appState.state.name, appState.params);
                            } else {
                                $state.go('main.orders');
                            }
                        } else {
                            $rootScope.$localStorage.applicationState = { state: toState, params: toParams };
                        }
    

    【讨论】:

      【解决方案3】:

      iOS/iPadOS 14 现已推出,它带来了重大改进:

      从 iOS 11.x 到 iOS 13,每个安装的 PWA 都有自己的存储空间 与 Safari 和其他 PWA 安装完全隔离 相同的清单。

      我在 iOS 和 iPadOS 14 中发现,这种行为已经完全改变:

      PWA 与 Safari 共享 Service Worker 的注册和缓存存储。这种新行为与您在 Android 上发生的情况相匹配 安装 PWA。 但是,Cookie、Web 存储和 IndexedDB 是 仍然与 Safari 和其他相同图标隔离并分开 PWA。也就是说,当您打开 PWA 时,部分存储将可用 从主屏幕。

      安装一些 PWA 后,您可以在独立体验中继续您的会话。例如,在 Pinterest 上,如果您已登录 在浏览器中,您也在应用程序中登录,但是 有一些小故障(我推测是因为部分存储)。我是 如果 cookie 不同(并且它们在 我的测试)

      来源:Safari on iOS 14 and iPadOS 14 for PWA and Web Developers

      【讨论】:

        猜你喜欢
        • 2020-09-06
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        • 2018-08-27
        • 2022-12-14
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        相关资源
        最近更新 更多