渐进式 Web 应用何时更新其清单文件的更改?
When does a progressive web app update on making a change to its manifest file?
我有一个渐进式 Web 应用程序,我希望对其清单文件进行更改,例如更改其 start_url、范围、图标、名称和 short_name。我想知道,渐进式网络应用程序的更新在对其清单进行更改后何时进行?我尝试了以下方法来强制更新 Chrome 浏览器上的网络应用程序:
- 启动 WebAPK
- 关闭 WebAPK
- 修改网络清单
- 将 Android 的系统时间提前 3 天。
在我的设备上:设置>系统>日期和时间>设置日期
- 启动WebAPK,稍等几秒
- 运行
adb shell dumpsys jobscheduler | JOB.*91.*org.chromium.components.background_task_scheduler.BackgroundTaskJobService
- 检查输出是否为空
- 关闭 WebAPK
- 运行
adb shell cmd jobscheduler run -f com.android.chrome 91
强制更新
但是,我想知道在完成清单文件更改后更新到 Web 应用程序的真正标准是什么?请有人附上支持相同的代码片段,这可能特定于 Chrome 如何实现它?
我进行了深入研究,以了解根据清单文件更改更新 Web 应用程序的确切标准,并且我能够在具有更新逻辑的 Chromium 代码库中找到相关的源代码。根据最新的铬源代码更改 https://chromium-review.googlesource.com/c/chromium/src/+/1635860 , the update interval is set to 1 day (99% cases, where the apps may update more frequently) and 30 days (1% cases where the apps may update less frequently). Previously, it was set to 3 days ( 99% cases) and 30 days ( 1% cases). Also, there is an official documentation by Google https://developers.google.com/web/fundamentals/integration/webapks#update-webapk 说:
Chrome 将定期将本地安装的清单与从网络获取的清单副本进行比较。如果将 PWA 添加到主屏幕所需的清单中的任何属性在网络副本中发生了更改,Chrome 将请求更新的 WebAPK,以反映这些新值。
有许多规则控制如何触发这些更新检查:
- 仅在启动 WebAPK 时才会进行更新检查。直接启动 Chrome 不会触发对给定 WebAPK 的更新检查。
- Chrome 每 1 天或每 30 天检查一次更新。大多数情况下,每天都会检查更新。在更新服务器无法提供更新的不太可能的情况下,它会切换到 30 天间隔。
- 清除 Chrome 的数据(通过 Android 设置中的 "CLEAR ALL DATA")重置更新计时器。
- Chrome 只会在 Web Manifest URL 没有改变的情况下更新 WebAPK。如果您将网页从引用 /manifest.json 更改为引用 /manifest2.json,WebAPK 将不再更新。 (不要这样做!)
如果 WebAPK 不是 运行,- Chrome 只会更新 WebAPK。如果保持 运行.
,则将 WebAPK 移动到后台是不够的
- 只有Chrome(Stable/Beta/Dev/Canary)正式版创建的WebAPK才会更新。它不适用于 Chromium (org.chromium.chrome)。
- 更新检查可能会延迟到设备插入电源并具有 WiFi 连接后。
已验证相同内容。
负责此更新的代码流程如下:
- 只要同源的清单文件有更新,WebApkUpdateTask 就会在后台服务中安排更新任务,link 如下:https://cs.chromium.org/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateTask.java .
- 此更新任务由 WebApkUpdateManager 管理,link 如下:https://cs.chromium.org/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java?sq=package:chromium&dr=CSs&g=0
- 更新间隔的检查由 WebappDataStorage 完成,link 如下:https://chromium.googlesource.com/chromium/src/+/652f0ba0d8d29ba7508654bf20172d3c83a784fb/chrome/ android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java (https://chromium.googlesource.com/chromium/src/+/652f0ba0d8d29ba7508654bf20172d3c83a784fb/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java)
我有一个渐进式 Web 应用程序,我希望对其清单文件进行更改,例如更改其 start_url、范围、图标、名称和 short_name。我想知道,渐进式网络应用程序的更新在对其清单进行更改后何时进行?我尝试了以下方法来强制更新 Chrome 浏览器上的网络应用程序:
- 启动 WebAPK
- 关闭 WebAPK
- 修改网络清单
- 将 Android 的系统时间提前 3 天。 在我的设备上:设置>系统>日期和时间>设置日期
- 启动WebAPK,稍等几秒
- 运行
adb shell dumpsys jobscheduler | JOB.*91.*org.chromium.components.background_task_scheduler.BackgroundTaskJobService
- 检查输出是否为空
- 关闭 WebAPK
- 运行
adb shell cmd jobscheduler run -f com.android.chrome 91
强制更新
但是,我想知道在完成清单文件更改后更新到 Web 应用程序的真正标准是什么?请有人附上支持相同的代码片段,这可能特定于 Chrome 如何实现它?
我进行了深入研究,以了解根据清单文件更改更新 Web 应用程序的确切标准,并且我能够在具有更新逻辑的 Chromium 代码库中找到相关的源代码。根据最新的铬源代码更改 https://chromium-review.googlesource.com/c/chromium/src/+/1635860 , the update interval is set to 1 day (99% cases, where the apps may update more frequently) and 30 days (1% cases where the apps may update less frequently). Previously, it was set to 3 days ( 99% cases) and 30 days ( 1% cases). Also, there is an official documentation by Google https://developers.google.com/web/fundamentals/integration/webapks#update-webapk 说:
Chrome 将定期将本地安装的清单与从网络获取的清单副本进行比较。如果将 PWA 添加到主屏幕所需的清单中的任何属性在网络副本中发生了更改,Chrome 将请求更新的 WebAPK,以反映这些新值。 有许多规则控制如何触发这些更新检查:
- 仅在启动 WebAPK 时才会进行更新检查。直接启动 Chrome 不会触发对给定 WebAPK 的更新检查。
- Chrome 每 1 天或每 30 天检查一次更新。大多数情况下,每天都会检查更新。在更新服务器无法提供更新的不太可能的情况下,它会切换到 30 天间隔。
- 清除 Chrome 的数据(通过 Android 设置中的 "CLEAR ALL DATA")重置更新计时器。
- Chrome 只会在 Web Manifest URL 没有改变的情况下更新 WebAPK。如果您将网页从引用 /manifest.json 更改为引用 /manifest2.json,WebAPK 将不再更新。 (不要这样做!) 如果 WebAPK 不是 运行,
- Chrome 只会更新 WebAPK。如果保持 运行. ,则将 WebAPK 移动到后台是不够的
- 只有Chrome(Stable/Beta/Dev/Canary)正式版创建的WebAPK才会更新。它不适用于 Chromium (org.chromium.chrome)。
- 更新检查可能会延迟到设备插入电源并具有 WiFi 连接后。
已验证相同内容。
负责此更新的代码流程如下:
- 只要同源的清单文件有更新,WebApkUpdateTask 就会在后台服务中安排更新任务,link 如下:https://cs.chromium.org/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateTask.java .
- 此更新任务由 WebApkUpdateManager 管理,link 如下:https://cs.chromium.org/chromium/src/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateManager.java?sq=package:chromium&dr=CSs&g=0
- 更新间隔的检查由 WebappDataStorage 完成,link 如下:https://chromium.googlesource.com/chromium/src/+/652f0ba0d8d29ba7508654bf20172d3c83a784fb/chrome/ android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java (https://chromium.googlesource.com/chromium/src/+/652f0ba0d8d29ba7508654bf20172d3c83a784fb/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappDataStorage.java)