更新行为
复制一个包含安装步骤和此插件的完整 Markdown 指南的配置提示。
当您向您的Capgo应用程序发布更新时,您可能希望您的用户尽快接收该更新。但您也不希望通过强制用户等待下载或在会话中间重启应用程序来干扰他们的体验。
Capgo的更新行为是为了在快速交付更新和最小化对用户的干扰之间取得平衡。
默认更新流程
标题为“默认更新流程”的部分默认情况下,Capgo如何处理应用程序更新:
-
当应用程序移动到前台时,Capgo插件会检查是否有新的更新可用。同时,应用程序保持打开状态,它也会在重复的定时器控制下再次检查
periodCheckDelay(default 10 minutes). -
如果发现更新,它会在用户继续使用当前应用程序版本时在后台下载.
-
Capgo等待用户将应用程序置于后台.
-
当用户下次将应用程序切换到前台时,他们将运行更新后的版本.
这条流程确保用户始终运行应用程序的最新版本,而不需要被更新提示或被迫等待下载.
为什么采用这种方法?
标题:为什么采用这种方法?在后台或杀死事件上应用更新对用户体验有几个关键优势:
-
targetLanguage":"Simplified Chinese",
-
protectedTokens":["Cloudflare","Capacitor","GitHub","Capgo","code","API","SDK","CLI","npm","bun"]
-
,
texts":["用户不会被更新提示或被迫在会话中等待下载中打断。",
更新在会话之间被应用,启动应用的体验始终是新的。",
-
您可以频繁地发布更新而不必担心中断活跃用户。",
-
主要的缺点是,如果用户在应用更新期间背景化并快速恢复应用,他们可能会丢失任何未保存的状态。",
-
为了减轻这一点,我们建议:
."保存状态频繁并在应用恢复时优雅地恢复。",
避免频繁更新,修改应用状态的大部分。",考虑定制更新行为以适应敏感流(见下文)。",
Capgo provides a setDelay function that lets you specify conditions that must be met before an update is installed:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setMultiDelay({ delayConditions: [ { kind: 'date', value: '2023-06-01T00:00:00.000Z', }, { kind: 'background', value: '60000', }, ],});这段示例将延迟安装更新,直到 2023 年 6 月 1 日之后,并且应用程序至少在后台运行 60 秒。
可用的延迟条件是:
date: 等待特定日期/时间后再应用更新。background: 等待应用程序在后台运行至少一定时间后再应用更新。nativeVersion: 等待安装具有最低版本的原生二进制文件之前再应用更新。kill: 等待下一个应用程序杀死事件再应用更新。
您可以混合和匹配这些条件来精确控制更新何时安装。
立即应用更新
标题:立即应用更新对于关键更新或具有非常简单状态的应用程序,您可能希望立即将更新应用到下载后,而不等待背景或杀死事件。Capgo通过在Capgo配置中启用 autoUpdate policy in your Capacitor config.
autoUpdate 文件中设置,而不是在JavaScript中 __CAPGO_KEEP_0__. 它支持以下值: capacitor.config.ts file, not in JavaScript code. It supports these values:
false: 禁用自动更新检查'off'config is still detected. Use __CAPGO_KEEP_0__ to force a full bundle upload.true或'atBackground'(default): 每次前台检查时自动检查并下载,下次应用切换到后台时应用更新'atInstall': 只在新安装或原生应用商店更新后立即应用;否则使用"atBackground"行为'onLaunch': 只在应用从杀死状态(冷启动)切换到前台时立即应用。第一次检查后,回退到"atBackground"行为'always': 每次前台转换时检查,并在有更新时立即应用'onlyDownload': 自动检查并下载,发出updateAvailable,并且永远不会设置下一个捆绑包或自动应用更新
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'always', // or 'atInstall' for updates only on app install/update autoSplashscreen: true, keepUrlPathAfterReload: true, }, SplashScreen: { launchAutoHide: false, // Required when using instant apply with autoSplashscreen }, },};
export default config;使用 autoUpdate: 'always', Capgo 在每次前台转换时进行检查,并在下载完成时立即应用更新,即使用户正在使用应用。期间的定期检查由 periodCheckDelay 控制。可以在应用保持打开时触发的相同立即应用行为。
注意,因为 autoUpdate is a native configuration, instant apply modes require some additional handling in your JavaScript code.
下载并应用
标题:下载并应用如果您希望Capgo检查并下载更新,但不自动应用它们,请使用 autoUpdate: 'onlyDownload':
const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'onlyDownload', }, },};在此模式下,插件会在下载包后发出 updateAvailable 您的应用程序可以决定何时调用 CapacitorUpdater.set() 或显示自己的更新提示。
自动启动屏幕处理
标题:自动启动屏幕处理为了使即时应用模式更易于使用,Capgo提供了一个 autoSplashscreen 选项,自动处理隐藏启动屏幕(自版本7.6.0起可用):
const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: 'always', // or 'atInstall' autoSplashscreen: true, // Automatically hide splashscreen keepUrlPathAfterReload: true, }, SplashScreen: { launchAutoHide: false, }, },};当 autoSplashscreen 启用时:
- 插件会自动在应用更新时隐藏启动屏幕
- 插件会自动在不需要更新时隐藏启动屏幕
- 您不需要手动监听
appReady事件或调用SplashScreen.hide()
手动启动屏幕处理
名为“手动启动屏幕处理”的部分如果您希望手动控制或需要自定义逻辑,可以禁用 autoSplashscreen 并自己处理:
import { CapacitorUpdater } from '@capgo/capacitor-updater';import { SplashScreen } from '@capacitor/splash-screen';
CapacitorUpdater.addListener('appReady', () => { // Hide splash screen SplashScreen.hide();});
CapacitorUpdater.notifyAppReady();The event fires once the app has finished initializing and applying any pending updates. This is the point at which it’s safe to show your app’s UI, as it ensures the user will see the latest version. appReady In addition to handling the event, we recommend setting the configuration option to when using an instant apply mode. This preserves the current URL path when the app is reloaded due to an update, helping maintain the user’s location in the app and reducing disorientation.
If you don’t handle the event and set when using an instant apply mode, the user may briefly see a stale version of the app, be taken back to the initial route, or see a flicker as the update is applied. appReady Using an instant apply mode can be useful for delivering critical bug fixes or security patches, but it comes with some tradeoffs: keepUrlPathAfterReload The user may see a brief flicker or loading state as the update is applied if you don’t properly handle the splashscreen (either with or manual) true 在应用程序完成初始化和应用任何待处理更新后,会触发此事件。 这是显示应用程序 UI 的安全点,因为它确保用户将看到最新版本。
除了处理事件外,我们建议在使用即时应用模式时设置配置选项为 。这在应用程序由于更新而重新加载时保留当前 URL 路径,帮助维护用户在应用程序中的位置并减少混乱。 appReady 如果您不处理事件并在使用即时应用模式时设置 ,用户可能会在应用程序更新时看到过时版本、被带回初始路由或看到闪烁。 keepUrlPathAfterReload 使用即时应用模式可以用于交付关键 bug 修复或安全补丁,但它会带来一些权衡:
如果您不正确处理启动屏幕(即使是使用 或手动),用户可能会在应用程序更新时看到短暂的闪烁或加载状态。
- 在应用程序完成初始化和应用任何待处理更新后,会触发此事件。 这是显示应用程序 UI 的安全点,因为它确保用户将看到最新版本。
autoSplashscreen除了处理事件外,我们建议在使用即时应用模式时设置配置选项为 。这在应用程序由于更新而重新加载时保留当前 URL 路径,帮助维护用户在应用程序中的位置并减少混乱。appReady事件处理). - 如果更新修改了应用程序状态或 UI,用户可能会在会话中看到一个中断性的变化。
- 如果用户的位置在应用程序中丢失,可能会让他们感到混乱。
keepUrlPathAfterReload您需要小心地处理保存和恢复状态,以确保平滑的过渡。 - 如果您启用了即时应用,我们建议:
使用
- 进行最简单的设置,或者手动处理
autoSplashscreen: true事件,如果您需要自定义逻辑。appReady设置 - 到
keepUrlPathAfterReload以保留用户的位置在应用程序中。true__CAPGO_KEEP_0__ - 根据需要保存和恢复应用程序状态,以避免丢失用户进度。
- 彻底测试应用程序更新行为,以确保没有突然的过渡、丢失状态或混乱的位置变化。
在大多数情况下,预设的更新行为提供了最好的平衡,快速交付更新并最小化干扰。但是,对于具有特定需求的应用程序,Capgo 提供了自定义更新应用的灵活性。
继续从更新行为
标题:继续从更新行为如果您正在使用 更新行为 来规划实时更新交付,请将其与 Capgo Live Updates for the product workflow in Capgo Live Updates, __CAPGO_KEEP_0__ Live Updates 中,查看 功能 在功能中实现详细信息 更新类型 在更新类型中实现详细信息 开始 在开始中实现详细信息