【问题标题】:Force refresh of manifest.json to download new PWA强制刷新 manifest.json 以下载新的 PWA
【发布时间】:2019-12-07 01:01:20
【问题描述】:

我将 start_url 设置为 /mysite。现在我更新了清单,将 start_url 设置为 /mysite?tracking=ga,以便查看来自应用的安装。

无论如何,我无法弄清楚如何强制下载新应用程序,该应用程序仍然指向旧的start_url。我知道如何更新服务工作者,从而更新缓存 API 或任何其他缓存,但没有可靠的方法来强制刷新 manifest.json,从而强制重新下载 apk。即使我删除 apk 并通过“添加到主屏幕”下载新应用程序,它也会指向旧的`start_url。我的理解是每个清单都需要一个新的 apk。

*更新:进行了多次测试,我更新了 manifest theme_color,查看更改的唯一方法是卸载应用程序并完全清除 Chrome 缓存和数据,然后通过“添加到主屏幕”提示重新安装。

【问题讨论】:

    标签: android manifest progressive-web-apps


    【解决方案1】:

    请参阅此link

    引用链接,

    桌面 Chrome 更新

    当 PWA 启动或在浏览器选项卡中打开时,Chrome 会确定上次检查本地清单以进行更改的时间。如果自上次启动浏览器后未检查清单,或者在过去 24 小时内未检查清单,Chrome 将向清单发出网络请求,然后将其与本地副本进行比较。

    如果清单中的选择属性已更改(请参阅下面的列表),Chrome 会将新清单排入队列,并在关闭所有窗口后安装它。安装后,新清单中的所有字段(名称、短名称、start_url 和图标除外)都会更新。

    哪些属性会触发更新?

    • display
    • scope
    • shortcuts
    • theme_color
    • file_handlers

    Android 版 Chrome 更新

    启动 PWA 时,Chrome 会确定上次检查本地清单是否有更改的时间。如果在过去 24 小时内未检查清单,Chrome 将为清单安排网络请求,然后将其与本地副本进行比较。

    如果清单中的选择属性已更改(请参见下面的列表),Chrome 会将新清单排入队列,并且在 PWA 的所有窗口都已关闭、设备插入并连接到 WiFi 后,Chrome 会请求更新的 WebAPK从服务器。更新后,将使用新清单中的所有字段。

    哪些属性会触发更新?

    • background_color
    • display
    • orientation
    • scope
    • shortcuts
    • start_url
    • theme_color
    • web_share_target

    在大多数情况下,更改应在 PWA 启动后的一两天内反映,在清单更新后。

    【讨论】:

    • 习惯上粘贴答案而不是链接,因为链接可能会断开
    【解决方案2】:

    我做了一些测试,包括 (1) 卸载当前的 PWA,(2) 清除浏览器数据和缓存,以及 (3) 重新安装似乎强制刷新的 PWA。但是,这当然只是出于测试目的——我想您将无法指导所有应用用户都这样做。

    除了通过文档链接给出的答案之外,我想强调一下 Chrome 75 及更早版本,WebAPK 更新发生在 3 day intervals。在 Chrome 76(2019 年 7 月)及更高版本上,更新间隔减少到 1 day。当计时器到期时,应用程序将检查manifest 是否需要更新 - 这将在应用程序启动时完成。

    以下是更新的原因:

    enum UpdateReason {
        NONE = 1;
        OLD_SHELL_APK = 2;
        PRIMARY_ICON_HASH_DIFFERS = 3;
        SCOPE_DIFFERS = 5;
        START_URL_DIFFERS = 6; // OP's scenario
        SHORT_NAME_DIFFERS = 7;
        NAME_DIFFERS = 8;
        BACKGROUND_COLOR_DIFFERS = 9;
        THEME_COLOR_DIFFERS = 10;
        ORIENTATION_DIFFERS = 11;
        DISPLAY_MODE_DIFFERS = 12;
        WEB_SHARE_TARGET_DIFFERS = 13;
        MANUALLY_TRIGGERED = 14;
        PRIMARY_ICON_MASKABLE_DIFFERS = 15;
        SHORTCUTS_DIFFER = 16;
        SPLASH_ICON_HASH_DIFFERS = 17;
    
        reserved 4;
    }
    

    【讨论】:

      【解决方案3】:

      更改<link rel="manifest" href="manifest.json">

      收件人:<link rel="manifest" href="manifest.json?v=2">

      在您网站页面的头文件中。

      这将替换新清单文件的缓存。

      【讨论】:

      • 您不应更改清单的 url/名称,请参阅已接受答案中的链接:“如果 Web 清单 URL 未更改,Chrome 将仅更新 WebAPK。如果您更改网页从引用 /manifest.json 到引用 /manifest2.json,WebAPK 将不再更新。(不要这样做!)" developers.google.com/web/fundamentals/integration/…
      猜你喜欢
      • 1970-01-01
      • 2013-09-09
      • 2012-02-22
      • 2019-10-30
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      相关资源
      最近更新 更多